У меня есть Centos 6 минимальный (без головы) в качестве хоста и установил Ubuntu 14.04 Desktop в качестве гостя и с использованием KVM.

В гостевой системе развернуто веб-приложение, которое открывает и закрывает одно приложение GTK (javafx) в фоновом режиме.

Я вызываю это веб-приложение с моего хоста через ssh как «curl http://guest/myapp/start ». Я просмотрел журналы в гостевой ОС и вижу сообщение об ошибке «Gtk-WARNING **: не могу открыть дисплей»

Я не понял причину этой ошибки. 1) Это приложение GTK физически не открывает никаких окон в консоли ssh на хосте и, более того, это фон. 2) Гость настольная версия.

Может ли кто-нибудь помочь мне, как решить эту проблему. Я не могу включить XWindows из-за требований безопасности со стороны клиента.

Спасибо,

Шридхар

1 ответ1

1

«Фон» на самом деле не меняет работу программы.

Когда текстовые программы запускаются "в фоновом режиме", им все равно требуется, чтобы что-то было прикреплено к "stdin" (клавиатура) и "stdout" (терминал); они просто получают /dev /null вместо реального терминала.

Точно так же, независимо от того, как вы запускаете программу GTK, она остается программой GTK - она всегда будет пытаться подключиться к серверу X11 или Wayland и открывать там свои окна.

Поэтому вам нужен какой-нибудь сервер X11 на гостевой. Вам не нужен полный графический интерфейс, только X-сервер; и вам даже не нужен Xorg - в идеале это должно быть то, что предназначено для вашей программы, а не доступно через консоль.

Лучшим вариантом будет использование Xdummy или Xvfb (возможно, использование xpra для упрощения настройки). Узнайте, как запустить один из них в фоновом режиме, а затем убедитесь, что ваше веб-приложение устанавливает соответствующие переменные среды - DISPLAY= и XAUTHORITY=.

Даже если у гостя уже есть полный графический интерфейс с Xorg, вам все равно нужно сообщить программе, как получить к нему доступ. Это не может просто всплыть окно где-то случайно (особенно по SSH); ему нужны те же переменные окружения, чтобы найти гостевой сервер Xorg. (Существует проблема, однако, для реального графического интерфейса они будут отличаться после каждой перезагрузки, поэтому вы все равно должны использовать Xdummy или Xvfb, чтобы иметь предсказуемый адрес.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .