anton_nazarov: (Default)

У меня иногда возникает необходимость работать за чужими компьютерами, да ещё и под 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 устанавливается и настраивается совсем просто, так что проблема решена.

anton_nazarov: (Default)
Сегодня дома отключили свет и я опять поехал в Петергоф.
Как я уже писал, тут на факультете есть wifi, но имеется маленькая проблемка - открыт только 80-й порт.
То есть ни почту не почитать, ни по гуглтолку не початиться.

Однако решение проблемы существует!
Нужно только иметь ssh-аккаунт на каком-нибудь сервере.

И так, по шагам:

  1. Ставим программку corkscrew и настраиваем вот по этому руководству.

  2. Однако для полного выполнения предыдущего пункта нам не хватает адреса прокси-сервера, причём нужен не обычный http-proxy, а http-proxy, поддерживающий метод CONNECT. Находим его в этом списке

  3. Запускаем ssh соединение командой ssh -D 9999 yourname@yourserver Всё, теперь у нас есть SOCKS-proxy по адресу 127.0.0.1:9999, его можно использовать во всех программах - в браузере, почтовом клиенте, skype

Profile

anton_nazarov: (Default)
anton_nazarov

September 2014

S M T W T F S
 123456
78910111213
14 151617181920
21222324252627
282930    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2025 09:00 am
Powered by Dreamwidth Studios