02.12.2008

Удалённый доступ к рабочему столу

Источник


Иногда возникает необходимость получить доступ к рабочему столу, который в текущий момент запущен на удалённом компьютере. Стандартное ПО VNC в Linux позволяет лишь запустить ещё одну, виртуальную, копию X-сервера и работать в этом новом X-окружении (т.е. в новом рабочем столе).

Ниже, в первую очередь приведён сложный, но гибкий способ решения проблемы.
Способ решения для которого нужно лишь щёлкать мышкой в KDE приведён далее.


Сложный способ решения проблемы
В противовес обычному VNC x11vnc действует так же как VNC в Windows — т.е. обеспечивает доступ к уже запущенной “настоящей” сессии (кстати, замечу, что в Windows это сделано так не как фича, а как вынужденная необходимость, не забывайте что за Windows XP может одновременно работать не более одного человека, а за Windows 2003 — не более 3-х, лицензии на дополнительные подключения (для Windows 2003) стоят дополнительных денег, а для Windows XP — просто не существуют)

С помощью следующих команд (взятых из x11vnc (1) ) можно автоматизировать процесс подключения к удалённому компьютеру по ssh, запуск там x11vnc в контексте работающего рабочего стола, туннелирование vnc трафика через зашифрованное соединение (ssh-туннель) и собственно подключение:

# Создаем соединение и запускаем x11vnc:

$ ssh -t -L 5901:localhost:5900 example.com ‘x11vnc -localhost -rfbauth .vnc/pass-x11 -display :0′

# Подключаемся

$ vncviewer -encodings ‘copyrect tight zrle hextile’ localhost:1

Hint: иногда может помочь опция -C для сжатия трафика туннелироваyного в ssh

Предварительно неплохо бы создать пароль для VNC (дабы никто обладающий доступом к вашему удалённому компьютеру не смог заюзать рабочий стол не зная пароля, это актуально на компьютерах, к которым имеют доступ несколько человек:

$ x11vnc -storepasswd .vnc/pass-x11

Простой способ решения проблемы
Используйте программу krfb для создания приглашения на рабочий стол своего компьютера и krdc (или любой другой VNC-клиент) для подключения

Offtopic
Что быстрее VNC?
На самом деле это не способ решения нашей проблемы, а просто быстрый аналог VNC
Если скорость работы VNC вас не удовлетворяет, а запускать графические приложения на удалённом компьютере всё же нужно, используйте ssh X11 tunneling — по производительности это решение превосходит все известные мне аналоги, в том числе под Windows.
достаточно при создании ssh соединения с удалённым компьютером разрешить перенаправление X11 (опция -X у ssh, также нужно чтобы эту возможность не запретил админ удалённого сервера), а затем в удалённом терминале просто запускать графические приложения, они отобразятся на вашем локальном X-сервере (кстати под Windows тоже есть реализация X-сервера)


Для начала установим x11vnc:

emerge x11vnc

Установка не займёт много времени, поскольку исходные тексты занимают всего около двух мегабайт. После установки на диске появятся следующие файлы (список может немного меняться в зависимости от версии и USE-флагов,использованных при сборке):

/usr/bin/x11vnc
/usr/share/man/man1/x11vnc.1.bz2
/usr/share/x11vnc/classes/ssl/VncViewer.jar
/usr/share/x11vnc/classes/ssl/index.vnc
/usr/share/x11vnc/classes/ssl/SignedVncViewer.jar
/usr/share/x11vnc/classes/ssl/proxy.vnc
/usr/share/x11vnc/classes/ssl/README
/usr/share/x11vnc/classes/ssl/UltraViewerSSL.jar
/usr/share/x11vnc/classes/ssl/SignedUltraViewerSSL.jar
/usr/share/x11vnc/classes/ssl/ultra.vnc
/usr/share/x11vnc/classes/ssl/ultrasigned.vnc
/usr/share/x11vnc/classes/ssl/ss_vncviewer
/usr/share/x11vnc/classes/VncViewer.jar
/usr/share/x11vnc/classes/index.vnc
/usr/share/doc/x11vnc-0.9.3/ChangeLog.bz2
/usr/share/doc/x11vnc-0.9.3/README.bz2

В самом простом случае для запуска достаточно просто выполнить команду:

x11vnc

Однако если у вас слабый канал, то может быть полезным отключение полной цветопередачи (опция -notruecolor) а так же включить масштабирование (опция -scale). В этом случае команда будет выглядеть примерно так:

x11vnc -notruecolor -scale 2/3

В результате по сети будет передаваться изображение с восьмибитным цветом и размером в 2/3 от оригинала.

У x11vnc есть ещё одна особенность: после запуска x11vnc ждёт подключения клиента, а по завершении подключения - завершает свою работу. Если необходимо чтобы x11vnc был запущен постоянно и не завершал работу после отключения клиента - нужно добавить опцию -forever к строке запуска. Дополняя предыдущую команду получим:

x11vnc -notruecolor -scale 2/3 -forever

Так же полезно явно указать используемый дисплей при помощи опции -display. Если опция не указана то используется дисплей, указанный в переменной окружения DISPLAY. Если же переменная окружения DISPLAY не указана - создаётся новый дисплей.

Кроме того полезно настроить авторизацию. Для этого выполните команду:

x11vnc -storepasswd

Пароль будет сохранён как и в случае с другими реализациями vnc в файле ~/.vnc/passwd. Причём если у вас уже есть этот файл (например созданный при помощи realvnc) то его можно использовать без изменений. Чтобы x11vnc использовал авторизацию ему нужно передать опцию -usepw. В итоге получится вот такая команда:

x11vnc -notruecolor -scale 2/3 -forever -display :0 -usepw

Если используется KDE и есть необходимость запустить x11vnc вместе с KDE то можно создать скрипт ~/.kde/Autostart/startvnc.sh следующего содержания:

#!/bin/sh

x11vnc -notruecolor -scale 2/3 -forever -display :0 -usepw

Всё. Теперь нужно выполнить этот скрипт или перезапустить KDE и можно подключаться к вашему компьютеру командой:

vncviewer <Ваш_IP>

Большая часть написанного выше не привязана к конкретному дистрибутиву, и потому может быть использовано и в других дистрибутивах.
Источник:
http://ylsoftware.com/?action=news&na=viewfull&news=373