Как SSH к запущенному экземпляру X удаленно?

У меня на компьютере-сервере запущен экземпляр X, и иногда я подключаюсь к нему через TeamViewer Время от времени происходит сбой TeamViewer, и я не могу перезапустить его удаленно. Есть ли способ войти в мой работающий экземпляр X через ssh и перезапустить TeamViewer удаленно?

2
задан 12 October 2011 в 00:34

2 ответа

Вероятно, самый простой способ - это дистанционно (через SSH) запустить vncserver на соответствующем дисплее. После этого используйте туннелирование SSH для подключения клиента vnc с удаленной машины через соединение SSH к серверу VNC.

0
ответ дан 12 October 2011 в 00:34

X-программе требуется две части информации для подключения к X-дисплею.

  • Ему нужен адрес дисплея, который обычно равен :0, когда вы вошли в систему локально, или :10, :11 и т. Д., Когда вы вошли в систему удаленно (но число может меняться в зависимости от того, сколько активных соединений X). Адрес дисплея обычно указывается в переменной среды DISPLAY.

  • Требуется пароль для дисплея. Пароли X-дисплея называются магические куки . Волшебные файлы cookie не указываются напрямую: они всегда хранятся в X авторитетных файлах, которые представляют собой набор записей вида «display :42 имеет cookie 123456». Файл полномочий X обычно указывается в переменной среды XAUTHORITY. Если $XAUTHORITY не установлено, программы используют ~/.Xauthority.

Вы пытаетесь воздействовать на окна, которые отображаются на вашем рабочем столе. Если вы единственный, кто использует ваш настольный компьютер, вполне вероятно, что отображаемое имя будет :0. Найти местоположение авторитетного файла X сложнее, потому что с gdm, настроенным в Debian squeeze или Ubuntu 10.04, он находится в файле со случайно сгенерированным именем. (У вас не было проблем раньше, потому что в более ранних версиях gdm использовались настройки по умолчанию, то есть файлы cookie, хранящиеся в ~/.Xauthority.)

Если это однократный снимок, вы можете обнаружить значения DISPLAY и XAUTHORITY из запущенного процесса. Это неудобно для автоматизации. Вы должны выяснить PID процесса, который подключен к дисплею, с которым вы хотите работать, а затем получить переменные среды из /proc/$pid/environ (eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')).

Долгосрочным автоматическим решением является копирование файлов cookie при входе в сеанс X вашего рабочего стола. Добавьте следующие строки в ~/.profile (или некоторый другой скрипт, который читается при входе в систему):

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

Затем вы можете запускать программы на удаленном X-дисплее, просто установив DISPLAY:

ssh foo.example.com 'DISPLAY=:0 restart teamviewer'

Этот ответ адаптирован из более полного ответа на аналогичный вопрос о Unix Stack Exchange .

0
ответ дан 12 October 2011 в 00:34

Другие вопросы по тегам:

Похожие вопросы: