Перенаправление вывода X

У меня есть небольшая программа, которая проверяет некоторые элементы веб-службы. Программа показывает графический вывод и результаты командной строки.

Я пытался автоматизировать эту программу для периодического запуска на сервере в моем офисе. Проблема в том, что это работает только тогда, когда у меня включен X - либо непосредственно на сервере, либо через SSH -X,

После Google я попробовал Xvfb, который дал мне довольно загадочное сообщение об ошибке:

Xvfb :1 -screen 0 1600x1200x32

Fatal server error:
Server is already active for display 1
        If this server is no longer running, remove /tmp/.X1-lock
        and start again.

Есть идеи как его запустить? Я на самом деле ищу X эквивалент &>/dev/null...

4 ответа

Решение

Вы можете создать дисплей VNC. VNC предназначен для удаленного рабочего стола: на стороне сервера он создает виртуальный X-дисплей, который визуализируется в памяти (ему даже не нужна видеокарта), и вы можете подключиться к нему удаленно с помощью клиента VNC.

Пакет Ubuntu называется vnc4server во вселенной. Вы можете запустить отображение с помощью следующей команды:

vnc4server :10

Когда вы запускаете его в первый раз, он запрашивает у вас пароль, но, поскольку вам не нужно подключаться к дисплею удаленно, вы можете ввести что угодно. Обратите внимание, что при этом открывается порт на вашей машине (5910 в этом примере), который можно использовать для подключения к этому новому X-дисплею, поэтому было бы разумно его настроить.

Теперь запустите скрипт cron с DISPLAY=:10.0 в его среде, и он должен использовать дисплей VNC.

В Ubuntu echo $DISPLAY вероятно дает :0.0, сообщая вам, что ваш сеанс Ubuntu использует дисплей 0. Это должно оставить любой другой номер для использования. Так, :1 должно было быть хорошо, если нет еще Xvfb работает из предыдущего теста? (Или, как говорится в сообщении об ошибке: если только какой-то временный файл /tmp/.X1-lock не был удален после некоторого более раннего теста.) Но: если вы не можете выяснить, что использует дисплей 1, то любое другое большее число должно также подойти.

Быстрый тест в свежей Ubuntu 9.10:

# Установите один раз, если требуется:
sudo apt-get установить xvfb
sudo apt-get установить imagemagick

# Запустите Xvfb в фоновом режиме, на дисплее 1
Xvfb: 1 &

# Запустите xclock в фоновом режиме, на дисплее 1
DISPLAY=:1 час

# Сделать скриншот окна с именем Xclock
DISPLAY=:1 импорт -окно Xclock current-time.png

# Stop xclock
убить `pidof xclock`

# Стоп Xvfb
убить `pidof Xvfb` 

Это должно создать файл current-time.png показывая текущее время. Это работает для вас?

У меня была похожая проблема, и хотя ответ Алекса Мореги в порядке, мне больше понравился этот:

После установки xvfb вы можете решить это в одной строке: "xvfb-run ", где - ваша программа.

Источник

Похоже, ваш сервер работает на уровне выполнения 5 (X11 активен). То, что вы можете хотеть, это уровень запуска без этого, так что попробуйте 3 для запуска Xvfb? (при условии, что вы не запускаете Ubuntu, в этом случае это может быть ужасно)

Другие вопросы по тегам