Подтвердить что ты не робот

Как запустить X-программу вне X-сеанса (например, с консоли или SSH)

Не будучи человеком, вошедшим в систему на консоли, как мне запустить приложение X и показать его на этом X-сеансе? Предположим, что я либо root, либо я тот же пользователь, который вошел в систему, поэтому в принципе у меня есть желание сделать это. Но как мне убедить X в этом?

Некоторые примеры таких ситуаций:

  • Войдите в систему с SSH и запустите программу, которая отображается на экране удаленного компьютера ( не, туннелированная через SSH — это совершенно другое)
  • Задача cron сделать снимок экрана сеанса X с помощью команды ImageMagick import
  • Запуск регистратора нажатия клавиш для целей аудита

Это более простая версия Запустить приложение OpenGL прямо из без оконного терминала Linux

4b9b3361

Ответ 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)=/ }'