2009-05-07 5 views
17

Я запускаю приложение java, которое создает визуальное отображение некоторых вещей, которые он делает, пока он это делает. Тем не менее, я хочу запустить это в скрипте, который не будет иметь экран для подключения. В текущей среде нет даже переменной окружения DISPLAY. Я попытался просто установить мой ДИСПЛЕЙ: 0.0. Но этого не существует. Меня не волнует дисплей. Я просто хочу, чтобы приложение обрабатывало файлы молча.A/dev/null equivalent для DISPLAY, когда дисплей просто шумит

Поскольку я не могу просто выключить дисплей (не мое приложение), я остался с попыткой обойти необходимость отображения.

Есть ли черная дыра, которую я могу отправить DISPLAY? эквивалент/dev/null?

Я искал вокруг немного в Интернете, но слова, которые я мог придумать для использования: «display», «null» «disregard» и т. Д., Являются все двумя родовыми, чтобы дать мне ответ.

Это середина большого скрипта, поэтому я хочу, чтобы остальная часть вывода была доступна для вывода stdout.

ответ

13

Существует безголовый X-сервер под названием Xvfb. Это в основном то, что вам нужно, поскольку оно принимает X-клиентов, но в основном ничего не делает с данными из них. С этой связанной страницы (слегка перефразировать):

Xvfb, виртуальные фреймбуферами Х, является сервером отображения реализации протокола дисплея сервера X11.

В отличие от других серверов отображения, Xvfb выполняет все графические операции в памяти без отображения вывода на экран.

С точки зрения клиента он действует точно так же, как и любой другой сервер отображения X, обслуживает запросы и отправляет события и ошибки в зависимости от ситуации. Однако выход не отображается.

Этот виртуальный сервер не требует, чтобы компьютер, на котором он запущен, имел экран или любое устройство ввода. Нужен только сетевой уровень.

Если вы не можете найти это, то другой возможностью будет использование запасного ПК с полной установкой CygWin. CygWin поставляется с полномасштабным X-сервером, к которому вы можете подключить свое приложение (и просто игнорировать его). Вы даже можете настроить его как корпоративный/dev/null DISPLAY.

Но я сначала посмотрю на Xvfb.

+0

Это очень хорошо сработало для меня. Это Xvfb. Ящик не мой, но администратор был достаточно хорош, чтобы положить его на коробку. – Marc

+0

Спасибо! Я всегда хотел иметь возможность запускать gschem для создания PDF-файлов и PNG-схем моих схем на моей машине сборки, но он не работал без X (что является болью в прикладе). Теперь с Xvfb есть X-сервер для подключения! – KeyserSoze

0

Можете ли вы запустить виртуальную машину на целевой машине? Тогда вы можете установить для этого ДИСПЛЕЙ. Или вы можете попробовать vnc (в настоящее время на машине, которая этого не позволяет, или я бы попробовал ...).

1

Вы можете использовать Xvfb, как указано выше. Таким образом, вы никогда не увидите результат (вы можете использовать инструмент для скриншотов).

http://en.wikipedia.org/wiki/Xvfb http://packages.debian.org/sid/xvfb

Или вы можете настроить сервер VNC. В Linux сервер VNC реализован как специальный X-сервер, к которому можно получить доступ через VNC, вместо отображения на локальном мониторе. Это дает вам безголовый X-сервер с дополнительным бонусом, который вы можете подключить к нему через VNC на случай, если вы do нужно посмотреть, что происходит.

http://www.tightvnc.com/vncserver.1.html

Vncserver хороший скрипт-обертка для (плотный) VNC, что делает Запуск сервера VNC ветер. Большинство дистрибутивов должны установить его по умолчанию.

2

Если это java-программа, вы можете использовать режим без звука для запуска приложения.

Попробуйте запустить его с -Djava.awt.headless=true параметром, как это, если это баночка файл:

java -Djava.awt.headless=true -jar jarfile.jar

More about headless mode...

+0

У меня не было возможности сделать этот подход работать. Я попытался, но получил безголовое исключение. Без сомнения, если бы это маленькое приложение было написано правильно, я мог бы использовать этот флаг. – Marc

+0

@Marc: 'java.awt.headless = true' просто сообщает JVM, что дисплей недоступен. Некоторые Java-API могут справиться с этим и продолжить работу, некоторые из них не могут и бросают 'HeadlessException'. Так ли это работает, зависит от того, что делает программа. Подробнее см. [Использование режима безглавых в платформе Java SE] (http://www.oracle.com/technetwork/articles/javase/headless-136834.html) (автор Артем Ананьев и Алла Редько, июнь 2006 г.). – sleske

0

Короткий ответ, использование:

xvfb-run JAVA_COMMAND_LINE 

В зависимости от версии и вкусом Linux, может быть one line you have to change в xvfb-run, чтобы получить все для запуска.

 Смежные вопросы

  • Нет связанных вопросов^_^