У меня иногда возникает необходимость работать за чужими компьютерами, да ещё и
под 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
Однако при использовании возникают проблемы с аутентификацией. Подробности
описаны
тут
Проще всего сделать три скриптика:
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 - имя вашего сервера
xmove-suspend.sh - приостанавливает работу всех X-приложений, запущенных
через xmove (на DISPLAY=:9). После этого можно закрыть ssh-соединение.
#!/bin/bash
DISPLAY=:9 xmovectrl -moveall -suspend
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 устанавливается и настраивается совсем просто, так что проблема решена.