Как запустить X-программу вне X-сеанса (например, с консоли или SSH)
Не будучи человеком, вошедшим в систему на консоли, как мне запустить приложение X и показать его на этом X-сеансе? Предположим, что я либо root, либо я тот же пользователь, который вошел в систему, поэтому в принципе у меня есть желание сделать это. Но как мне убедить X в этом?
Некоторые примеры таких ситуаций:
- Войдите в систему с SSH и запустите программу, которая отображается на экране удаленного компьютера ( не, туннелированная через SSH — это совершенно другое)
- Задача cron сделать снимок экрана сеанса X с помощью команды ImageMagick
import
- Запуск регистратора нажатия клавиш для целей аудита
Это более простая версия Запустить приложение OpenGL прямо из без оконного терминала Linux
Ответы
Ответ 1
Короткий ответ заключается в том, что вы должны установить переменную среды DISPLAY
, а затем приложение запустится.
Длинным ответом является то, что у нас есть Xauth, и если вы не работаете как один и тот же пользователь на том же компьютере, который, вероятно, не будет работать, если вы не экспортируете учетные данные Xauth из учетной записи, на которой запущен X-сервер, на учетную запись запуск X-клиента. ssh -X
обрабатывает это для вас, поэтому это потрясающе, но ручная процедура включает запуск xauth extract - $DISPLAY
на учетной записи X-сервера и подачу этих данных в xauth merge -
в учетной записи клиента. (Предупреждение: данные двоичные.)
В современных Linux-системах есть один сеанс X в: 0, а файл данных полномочий X11 всегда $HOME/.Xauthority
, поэтому вы можете чаще всего устанавливать две переменные среды, например, в Bash:
export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY=':0'
Ответ 2
Результат заключается в том, что вам нужно знать X-дисплей (помещенный в переменную среды DISPLAY
) и волшебный файл cookie (помещенный в файл с именем файла в переменной среды XAUTHORITY
).
Быстрый и грязный способ
В системе, где запущен X, если вы являетесь пользователем root, или вы являетесь тем же пользователем, который вошел в систему X, просто предположите, что наиболее распространенные файлы отображения и файлов cookie (работает практически с любой стандартной установкой рабочего стола любого дистрибутива).
env DISPLAY=:0 XAUTHORITY=/home/whoever/.Xauthority /path/to/my/X/program
Более верный способ
Найдите их из среды уже запущенной X-программы. Опять же, если вы являетесь пользователем root или тем же пользователем, который зарегистрировался, это скажет вам (если пользователь использует GNOME):
cat /proc/`pgrep -f ^x-session-manager`/environ \
| ruby -ne 'puts $_.split("\0").select { |e| e =~ /^(DISPLAY|XAUTHORITY)=/ }'