Перенаправление вывода 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, в этом случае это может быть ужасно)