У меня есть приложение 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
Серверы X11 не запускаются просто по запросу. Должен быть запущенный сервер X11, ваше приложение должно знать о существовании сервера X11, который оно должно использовать, через переменную DISPLAY, и учетная запись должна быть авторизована для подключения к серверу X11, на который указывает переменная DISPLAY ( xauth).
Перенаправление X11, встроенное в SSH, прекрасно, потому что оно обрабатывает все эти детали автоматически, так что вам не нужно ничего знать. Но от cron это не поможет.
Перенаправление X11, встроенное в SSH, прекрасно, потому что оно обрабатывает все эти детали автоматически, так что вам не нужно ничего знать. Но от cron это не поможет.
Перенаправление X11, встроенное в SSH, прекрасно, потому что оно обрабатывает все эти детали автоматически, так что вам не нужно ничего знать. Но от cron это не поможет.
Ваша проблема в том, что программа ожидает функции, которая может присутствовать на «реальном» X-сервере, но отсутствует в Xvfb.
Добавление функций в Xvfb, вероятно, больше работы, чем вы готовы вложить в это. Итак, вы будете искать альтернативы, из которых несколько:
Если это ваше собственное приложение, вы сможете выяснить, в какой момент оно пытается использовать расширение режима отображения. Могут ли приложение быть недовольным настройками, которые вы выбрали для Xvfb? Если вам повезет, это может быть так же просто, как приложение, требующее глубины цвета 32 бита, и указание x32 в командной строке, а не x16, может помочь.
Реальный X-сервер все еще может быть вариантом, даже на виртуальной машине. Это зависит от возможностей эмуляции графики на этой виртуальной машине.
В качестве альтернативы, возможно, стоит попробовать с Xvnc, который, как мне кажется, имеет больше возможностей, чем Xvfb.