Есть хост, есть сервер. На хосте лежит программка 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. Знаю, что на форуме поднимали эту тему несколько раз. Не помогло.









 , , , ,






URL записи