A /dev/null эквивалентно для DISPLAY, когда на дисплее просто шум

Я запускаю Java-приложение, которое создает визуальное отображение некоторых вещей, которые оно делает, в то время как оно делает это. Тем не менее, я хочу запустить это в сценарии, который не будет отображаться для подключения. В текущей среде даже не задана переменная окружения DISPLAY. Я попытался просто установить мой DISPLAY на:0.0. Но этого не существует. Я действительно не забочусь о дисплее. Я просто хочу, чтобы приложение обрабатывало файлы без вывода сообщений.

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

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

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

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

6 ответов

Решение

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

Xvfbвиртуальный кадровый буфер X - это сервер дисплея, реализующий протокол сервера дисплея X11.

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

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

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

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

Но я бы сначала заглянул в Xvfb.

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

xvfb-run JAVA_COMMAND_LINE

В зависимости от вашей версии и разновидности Linux, в xvfb-run может потребоваться изменить одну строку, чтобы все работало.

Я использую Xvfb и очень хорошо работает для запуска приложений, которым требуется X-сервер в сеансах ssh.

Чтобы дополнить предыдущие ответы, я использую два основных способа запуска Xvfb:

  1. Запустить Xvfb в конкретный порт и настройте терминал на использование этого порта:

    Xvfb:10 и экспорт DISPLAY =:10 ВАША_КОМАНДА

  2. Использовать xvfb-run:

    xvfb-run YOUR_COMMAND

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

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

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

Подробнее о безголовом режиме...

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

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

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

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

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

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

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