Java AWT требует X11, как использовать xvfb (ubuntu 14.04)

У меня есть приложение Java, для которого требуется переменная X11 DISPLAY, исключение, которое я получаю:

    Caused by: java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)
        at java.awt.Window.<init>(Window.java:536)
        at java.awt.Frame.<init>(Frame.java:420)

Я установил Xvfb на машину с Ubuntu:

root      1470  1469  0 02:40 pts/3    00:00:00 Xvfb :1 -screen 0 1152x900x8

Но я все еще получаю эту ошибку.

Когда я запускаю Xvfb, я получаю следующий ответ:

Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
Initializing built-in extension XInputExtension
Initializing built-in extension XTEST
Initializing built-in extension BIG-REQUESTS
Initializing built-in extension SYNC
Initializing built-in extension XKEYBOARD
Initializing built-in extension XC-MISC
Initializing built-in extension SECURITY
Initializing built-in extension XINERAMA
Initializing built-in extension XFIXES
Initializing built-in extension RENDER
Initializing built-in extension RANDR
Initializing built-in extension COMPOSITE
Initializing built-in extension DAMAGE
Initializing built-in extension MIT-SCREEN-SAVER
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension Present
Initializing built-in extension DRI3
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension SELinux
Initializing built-in extension GLX
[dix] Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/100dpi/:unscaled, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/75dpi/:unscaled, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/Type1, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/100dpi, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/75dpi, removing from list!

и он не возвращается ко мне, поэтому я нажимаю «CTRL + C», чтобы вернуть себе управление, но после просмотра «ps aux | grep Xvfb' я вижу, что процесс запущен, поэтому я не уверен, сработало это или нет.

Любая помощь будет принята с благодарностью.

Спасибо


person Alex Odesser    schedule 08.09.2016    source источник
comment
для запуска Xvfb я использую следующую команду: «Xvfb: 1 -screen 0 1152x900x8 &»   -  person Alex Odesser    schedule 08.09.2016


Ответы (1)


Вы не получаете сообщение об ошибке, это предупреждающие сообщения о старых шрифтах. Запустите виртуальный X-сервер в фоновом режиме (и/или с nohup), например

 nohup Xvfb :1 -screen 0 1152x900x8 &

А затем, чтобы использовать его, установите отображение на :1 на локальном хосте, например

 export DISPLAY="localhost:1"
person Elliott Frisch    schedule 08.09.2016
comment
Это работает, когда я пытаюсь запустить банку с командной строкой, но я пытаюсь использовать это в серверном приложении, используя tomcat в качестве сервера, и я получаю ту же ошибку в веб-приложении, я должен изменить что-нибудь, чтобы заставить его работать? - person Alex Odesser; 08.09.2016
comment
Установите переменную отображения в скрипте, который вы используете для запуска tomcat. - person Elliott Frisch; 08.09.2016
comment
извините, я не знаю, что вы подразумеваете под переменной в сценарии, который я использую для запуска tomcat - person Alex Odesser; 08.09.2016
comment
@AlexOdesser Как у тебя дела с котом? - person Elliott Frisch; 09.09.2016
comment
используя tomcat.conf из /etc/init/ , а затем просто «sudo service tomcat start» - person Alex Odesser; 10.09.2016
comment
@AlexOdesser Где-то есть скрипт, который вызывает java. Этот сценарий необходимо изменить для использования xvfb. Кроме того, вы можете изменить его для запуска и остановки xvfb. - person Elliott Frisch; 10.09.2016
comment
Вот JAVA_OPTS, который у меня есть в файле конфигурации tomcat: env JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom , я должен просто добавить Xvfb :1 -screen 0 1152x900x8 к этому варианту, или вы имели в виду что-то другое, извините, я не делал ничего подобного раньше, поэтому я немного потерялся здесь. - person Alex Odesser; 10.09.2016
comment
JAVA_OPTS — это другая переменная среды. Добавьте export DISPLAY="localhost:1" в строку перед установкой JAVA_OPTS. - person Elliott Frisch; 11.09.2016
comment
Я добавил экспорт DISPLAY в tomcat.conf , но он по-прежнему не работает. Должен ли я запустить Xvfb как обычную службу в фоновом режиме или запустить ее по-другому, чтобы она работала со службой tomcat? - person Alex Odesser; 11.09.2016