screen, но для оконных приложений

Jan 22, 2011 23:28


У меня иногда возникает необходимость работать за чужими компьютерами, да ещё и под Windows. То это какой-то из кафедральных компьютеров, иногда компьютер в комнате оптиков или чей-то ноутбук. В такой ситуации часто сложно сделать что-либо полезное - редко когда на чужом компьютере есть LaTeX, Mathematica или Maple, Emacs или средства разработки.

Да даже если и есть, то нет доступа к литературе или какие-нибудь нужные исходники отсутствуют на GitHub.

Выход в удаленной работе на какой-нибудь машине. Одно из простых решений - использование ssh. Например, для этого у нас на кафедре есть машины pink и heps. Можно использовать аккаунт на cern-овском кластере или на shell.tor.hu.

В Windows достаточно скачать Portable putty и можно работать в привычном окружении и с привычными инструментами. Но только с консольными :(

При этом от обрывов связи помогает замечательная программа screen.

Кроме того, при помощи screen можно отключиться от сервера и продолжить работу позднее, возможно даже с другой машины. Это бывает важно, когда подключаешься с чужого компьютера и компьютер становится внезапно нужен хозяину :)

К сожалению, с оконными приложениями не все так просто.

Во-первых, для удаленной работы с оконными приложениями нужно помимо ssh-клиента иметь на машине локальной X Server. (Сейчас я не рассматриваю такие варианты, как VNC, так как они требуют установки нетривиального программного обеспечения на удаленную машину, где может не быть root-доступа). Практически единственный бесплатный вариант под Windows - это Xming. Он требует установки, что не всегда удобно.

К счастью, есть такой приятный продукт, как MobaXterm - переносимое приложение (1 exe-файл), в котором упакован Xming, ssh-client и даже некоторые консольные утилиты из Cygwin.

После запуска MobaXterm нужно выбрать локальную сессию, а в окне терминала написать ssh -X user@host

Затем можно запускать приложения, например firefox & или emacs &.

Однако тут возникают некоторые проблемы. Во-первых, это обрыв соединения. Настройки ssh-сервера в Linux по умолчанию таковы, что для поддержания соединения используются TCP keep alive-пакеты, которые не шифруются и не всегда проходят через NAT. В результате неактивное соединение закрывается сервером через считанные минуты, а соответствующие X-приложения падают.

Чтобы обойти данную проблему и не терять соединения (и запущенных приложений!) при неактивности или кратковременном обрыве связи можно использовать опции ssh-клиента ssh -o ServerAliveInterval 30 -o TCPKeepAlive no -o ServerAliveCountMax 9999

Совсем хороший результат дают настройки сервера (в /etc/ssh/sshd_config) TCPKeepAlive no ClientAliveInterval 30 ClientAliveCountMax 20160

В результате машину-клиента можно hibernate-ить даже на часы и дни, а после включения ssh-соединение останется активным, а X-приложения продолжат работу.

Другая проблема - это отключение от сервера с сохранением запущенных X-приложений. В идеале в дальнейшем хочется продолжать работу с другой машины-клиента.

Есть старая программка xmove, которая позволяет перемещать приложения между разными X-серверами. Программа уже давно не развивается, но все ещё работает. Для ее сборки практически ничего не нужно, кроме компилятора и заголовков X-библиотек.

wget http://archlinux-stuff.googlecode.com/files/xmove-2.0beta2.tar.gz tar xzf xmove-2.0beta2.tar.gz cd xmove-2.0beta2/xmove xmkmf make cd ../xmovectrl xmkmf make
Однако при использовании возникают проблемы с аутентификацией. Подробности описаны тут Проще всего сделать три скриптика:

  1. xmove.sh запускает xmove и настраивает аутентификацию

    #!/bin/bash killall -9 xmove nohup xmove -server localhost:10 -port 9 & cookie=`xauth list |grep hostname/unix:10 |cut -d ' ' -f 5` xauth add localhost:10 MIT-MAGIC-COOKIE-1 $cookie export DISPLAY=:9
    Здесь hostname - имя вашего сервера

  2. xmove-suspend.sh - приостанавливает работу всех X-приложений, запущенных через xmove (на DISPLAY=:9). После этого можно закрыть ssh-соединение.

    #!/bin/bash DISPLAY=:9 xmovectrl -moveall -suspend

  3. xmove-resume.sh - возобновляет работу всех X-приложений, запущенных через xmove (на DISPLAY=:9).

    #!/bin/bash cookie=`xauth list |grep hostname/unix:10 |cut -d ' ' -f 5` xauth add localhost:10 MIT-MAGIC-COOKIE-1 $cookie export DISPLAY=:9 xmovectrl -moveall localhost:10

Теоретически, можно зайти по ssh с одной машины, поработать с какими-то приложениями, приостановить их, отключиться. Потом подключиться по ssh с другой машины и продолжить работу. Я так пока не пробовал, а только пробовал запустить приложения, приостановить их, отключиться, выключить машину-клиента, а затем подключиться и продолжить работу на следующий день.

К сожалению, у xmove есть существенный недостаток - при его использовании сильно падает скорость отрисовки, что достаточно неприятно при не слишком быстром соединении. Что удивительно, emacs подвержен этой проблеме сильнее, чем firefox.

Существует более новое аналогичное решение - Xpra. Но оно требует наличия на сервере python2.6 и pygtk, чего на нашей кафедральной машине нет. Так что я его не пробовал.

Может быть кто-то может что-то добавить к приведенному рецепту или предложить действительно удобную альтернативу, стойкую к неожиданным обрывам связи?

Update
Оказалось, что VNC устанавливается и настраивается совсем просто, так что проблема решена.

x window, geek, screen, ssh, linux

Previous post Next post
Up