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

5758
Adam Matan

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

Я пытался автоматизировать эту программу для периодического запуска на сервере в моем офисе. Проблема в том, что это работает только тогда, когда у меня включен 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...

3

4 ответа на вопрос

3
Arjan

В 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показывающий текущее время. Это работает для вас?

You'll want to save the PIDs using `cmd & cmd_pid=$!` and kill them specifically to avoid taking out any innocent bystanders. l0b0 10 лет назад 0
3
Jonny Best

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

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

Источник

1
Alex Morega

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

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

vnc4server :10 

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

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

0
brandstaetter

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

Благодарю. Я на самом деле использую Ubuntu, и попытка 3 дала мне «Неустранимая ошибка сервера: не удалось добавить экран 0». Adam Matan 15 лет назад 0
Да, в Ubuntu есть странная конфигурация уровней запуска. Уровень запуска по умолчанию равен 2, я думаю, и, кажется, нет уровня запуска без запуска X11. Если вы не уверены в уровнях выполнения, прочтите документацию. brandstaetter 15 лет назад 0
@brandstaetter: в Debian и Ubuntu уровни выполнения 2-5 идентичны (загрузка системы выполняется до уровня запуска 2). Уровень запуска 1 - это однопользовательский «режим восстановления», X там нет. quack quixote 14 лет назад 0
Благодарю. Но нет многопользовательского режима без X11, все же :( brandstaetter 14 лет назад 0

Похожие вопросы