LINUX.ORG.RU

Невозможно запустить приложение в X11 (xhost: unable to open display ":0")

 , , , ,


0

2

Есть хост, есть сервер. На хосте лежит программка reboot_alert. Программка reboot_alert представляет собой окошечко с кнопкой на gtk, которое выводит сообщение.

reboot_alert запускается с помощью скрипта.

Вот, собственно, скрипт:

#!/bin/bash

dsp=$(who | grep -oE "\(:.\)" | grep -oE ":." | head -n 1)

$(DISPLAY=${dsp} /home/user/reboot_alert "Сейчас кто-то перезагрузится")
exit_code=$?

if [ "${exit_code}" == "0" ]; then
	shutdown -r
fi

exit 1

Если запускать скрипт с хоста, проблем не возникает. Все работает.

Другое дело, если программа запускается с сервера (на хосте). Вылезает ошибка:

No protocol specified
Unable to init server: Не удалось подключиться к: В соединении отказано

(reboot_alert:2112): Gtk-[1;33mWARNING[0m **: [34m22:40:15.683[0m: cannot open display: :0

Ok. Ошибка, вроде, типичная. Гуглю. После чего, ради избавления от ошибки, было решено использовать xhost +. (Знаю, что нехорошо, но пока хотя бы так). Но так как сервер запускает скрипт явно не в иксах, то была явно указана переменная DISPLAY: export DISPLAY:=0. (В идеале активный DISPLAY должен определяться в скрипте, но в данном случае я точно знаю, что на хосте активен display :0).

Для проверки, что эта конструкция работает, был написан скрипт:

#!/bin/bash
DISPLAY=:0
export DISPLAY
xhost +

Запускаю скрипт с сервера и…

No protocol specified
xhost:  unable to open display ":0"

Вот, собственно, и проблема.

Возможно, на это влияет то, что сервер запускает скрипт на хосте с помощью jail. Но тут я полный ноль.

Возможно, как вариант, можно написать скриптик, который будет запускать xhost + в иксах сразу после их загрузки. Но это, на мой непрофессиональный взгляд, слишком большой костыль, недостойный жизни.

P.S. Если на хосте вручную прописать xhost +, а потом на сервере запустить скрипт, который запускает программу, все работает.

P.S.S. Знаю, что на форуме поднимали эту тему несколько раз. Не помогло.


Возможно, на это влияет то, что сервер запускает скрипт на хосте с помощью

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

Lrrr ★★★★★
()

Обычно забывают об XAUTHORITY. Значение взять или у активного юзера или из параметров команды X сервера.

Elyas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.