Почему задание cron не может открыть соединение с X-дисплеем [закрыто]

У меня есть приложение java, отображающее некоторые спрайты с использованием LWJGL и OpenGL. Он работает нормально, пока я не перенесу его на удаленную виртуальную машину без физической графической карты, Mesa 3d со связанными материалами используется для его эмуляции. Когда я подключаюсь через ssh и запускаю работу вручную, все работает нормально. Но при запуске в качестве задания cron возникает исключение

Caused by: java.lang.RuntimeException: org.lwjgl.LWJGLException: Could not open X display connection
        at org.lwjgl.opengl.Display.<clinit>(Display.java:141) ~[lwjgl.jar:na]
        ... 7 common frames omitted
Caused by: org.lwjgl.LWJGLException: Could not open X display connection
        at org.lwjgl.opengl.LinuxDisplay.openDisplay(Native Method) ~[lwjgl.jar:na]

. Очевидно, что с X11 что-то не так.

Другое обновление:

Я обнаружил, что оно не работает при проверке поддержки Xrandr или XF86VidMode. Я установил их, но они вроде отключены. Я пытался явно добавить RANDR, но это не помогло.

xvfb-run -a '--server-args = + extension RANDR -screen 0 1024x768x16' /home/username/start.sh

-1
задан 30 April 2014 в 06:01
2 ответа

Серверы X11 не запускаются просто по запросу. Должен быть запущенный сервер X11, ваше приложение должно знать о существовании сервера X11, который оно должно использовать, через переменную DISPLAY, и учетная запись должна быть авторизована для подключения к серверу X11, на который указывает переменная DISPLAY ( xauth).

Перенаправление X11, встроенное в SSH, прекрасно, потому что оно обрабатывает все эти детали автоматически, так что вам не нужно ничего знать. Но от cron это не поможет.

Перенаправление X11, встроенное в SSH, прекрасно, потому что оно обрабатывает все эти детали автоматически, так что вам не нужно ничего знать. Но от cron это не поможет.

Перенаправление X11, встроенное в SSH, прекрасно, потому что оно обрабатывает все эти детали автоматически, так что вам не нужно ничего знать. Но от cron это не поможет.

3
ответ дан 5 December 2019 в 19:03

Ваша проблема в том, что программа ожидает функции, которая может присутствовать на «реальном» X-сервере, но отсутствует в Xvfb.

Добавление функций в Xvfb, вероятно, больше работы, чем вы готовы вложить в это. Итак, вы будете искать альтернативы, из которых несколько:

  • Остановить приложение в зависимости от расширения режима отображения.
  • Вместо этого запустите приложение на «реальном» X-сервере.
  • Запустите приложение на другом X-сервере.

Если это ваше собственное приложение, вы сможете выяснить, в какой момент оно пытается использовать расширение режима отображения. Могут ли приложение быть недовольным настройками, которые вы выбрали для Xvfb? Если вам повезет, это может быть так же просто, как приложение, требующее глубины цвета 32 бита, и указание x32 в командной строке, а не x16, может помочь.

Реальный X-сервер все еще может быть вариантом, даже на виртуальной машине. Это зависит от возможностей эмуляции графики на этой виртуальной машине.

В качестве альтернативы, возможно, стоит попробовать с Xvnc, который, как мне кажется, имеет больше возможностей, чем Xvfb.

2
ответ дан 5 December 2019 в 19:03

Теги

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