Многие пользователи операционных систем Linux рано или поздно сталкиваются с необходимостью удалённо управлять уже запущенной X-сессией. Решить эту задачу можно разными способами, в зависимости от этапа, с которого пользователь хочет управлять сессией и менеджера графических окружений. В статье будут рассмотрены несколько способов реализации. **Дано:** компьютер N1 (сервер), с установленной ОС ALT Linux 5.0 Школьный Лёгкий - это будет система, которую нужно контролировать. Компьютер включен в локальную сеть и имеет адрес 192.168.10.1/24. Компьютер N2 (клиент) включен в эту же локальную сеть, имеет установленную ОС Windows или Linux, имеет адрес 192.168.10.2/24. \\ **Надо:** обеспечить удалённое управление **//уже работающей X-сессии//** с целью контроля за учениками.\\ **Уровень пользователя:** умение работать с текстовым редактором, понимание функционирования X.org-сервера хотя бы в общих чертах.\\ **Решение:** Предполагается, что после запуска машины и загрузки системы, запускаются иксы и менеджер рабочих столов. Пользователь вводит свой логин\пароль и входит в систему. Вариант управления X-сессией с момента начала работы менеджера рабочих столов можно реализовать с помощью пакета x11vnc. В качестве клиентской программы используется любой vnc-клиент. Программа x11vnc в нормальном режиме запускается после процедуры аутентификации самим пользователем и перехватывает обращения стандартного графического терминала. Этот вариант не всегда удобен, поскольку никогда не знаешь когда нужно запустить в работу такую возможность управления. Ниже будет рассмотрен вариант запуска x11vnc по требованию - сервер будет всегда готов, но при обращении клиентской программы к нему, он запустится и начнёт выполнять свою работу. ===== Вариант для менеджеров графических окружений xdm и kdm ===== **На машине-сервере:** \\ **1.** Доустанавливаем пакеты xinetd и x11vnc (можно через менеджер пакетов Synaptic): # apt-get update # apt-get install xinetd x11vnc **2.** В любимом редакторе открываем файл /etc/xinetd.conf и комментируем в нём строку, разрешающую подключения только с 127.0.0.1, как показано ниже: defaults { log_type = SYSLOG authpriv info log_on_success = PID HOST DURATION log_on_failure = HOST instances = 100 per_source = 5 # only_from = 127.0.0.1 } includedir /etc/xinetd.d **3.** Переходим в каталог /etc/xinetd.d и создаём файл, назовём его **x11vnc**, такого содержания: service x11vnc { disable = no socket_type = stream protocol = tcp port = 5900 user = root wait = no server = /usr/local/bin/x11vnc_wrapper } В нём задаются "какую программу и с какими параметрами запускать при обращении на tcp-порт 5900 этого компьютера". Запускать мы будем скрипт /usr/local/bin/x11vnc_wrapper. Так как мы разрешили доступ для запуска служб xinetd не только для localhost`а, но и для других ip-адресов, проследите, чтобы в остальных файлах в /etc/xinetd.d/ конфигурации ненужных сервисов были отключены опцией **//disable//**. Например: disable = yes **4.** Создаём скрипт **x11vnc_wrapper** #!/bin/bash authfilename=`ls /var/lib/xdm/authdir/authfiles/` authfile="/var/lib/xdm/authdir/authfiles/$authfilename" if [[|-r $authfile ]]; then exec /usr/bin/x11vnc -inetd -o /var/log/x11vnc.log -display :0 \ -auth $authfile -noxdamage -prog /usr/bin/x11vnc fi Этот скрипт проверяет наличие файла аутентификации для X-сессии, запускает x11vnc и передаёт путь к этому файлу в параметрах запуска. Для менеджера GDM, такой скрипт не нужен, поскольку путь до файла аутентификации всегда статичен и запуск x11vnc можно производить непосредственно из конфигурационного файла xinetd. От имени root`а копируем его в /usr/local/bin/ и даём права на исполнение: # chmod +x /usr/local/bin/x11vnc_wrapper По своему усмотрению, можно в строку запуска добавить нужные опции. Например, не лишним будет добавить опции проверки пароля у клиентской стороны. **5.** Зарегистрируем сервис с номером порта 5900 в файле /etc/services , иначе суперсервер xinetd не разрешит подключаться на этот порт. Открываем в редакторе файл и вставляем строку такого содержания: ... x11vnc 5900/tcp # X11vnc protocol ... Этим описывается сервис, его порт и рабочий протокол. **6.** Перезапустим xinetd: # /etc/init.d/xinetd restart **7.** Проверим, прослушивается ли порт 5900, выполнив команду netstat: # netstat -a -n |grep 5900 tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN Отлично, xinetd заработал как надо. Иначе - изучаем логи daemon и syslog для получения дополнительной информации о проблемах. **На машине-клиенте:** \\ **1.** Доустановим программы vnc-клиенты. Если контролируемая машина всего одна, то можно установить пакет **//vncviewer//** (консольное приложение) или **//gvncviewer//** (GTK-интерфейс). Если машин много, то лучше программы **//Remmina//** просто нету - имеет удобный и интуитивно-понятный интерфейс в виде списка машин. Каждый экран открывается в новом окне. # apt-get install remmina **Внимание!** В некоторых дистрибутивах //remmina// идёт без плагинов и требуется дополнительно установить пакеты //remmina-plugins//. Проверить наличие плагинов можно запустив программу и перейдя в меню "Инструменты" -> "Плагины". Должно открыться окно со списком доступных плагинов и в списке //должен// быть плагин VNC. Если нет - попробуйте найти и поставить в репозиториях пакет **//remmina-plugins//**. [{{ Remmina-plugins-menu.png?400 |Окно плагинов}}] **2.** Теперь можно добавить нужные машины в список программы и проверить соединение. На стороне сервера, программой x11vnc сообщения будут писаться в лог /var/log/x11vnc.log В случае проблем, можно посмотреть этот лог на предмет ошибок. Для подключения к серверу через программу vncviewer можно выполнить: $ vncviewer 192.168.1.1:0 FullColor=1 У vncviewer достаточно много опций и можно хорошо оптимизировать работу под пропускную способность канала передачи данных. Для ОС Windows можно воспользоваться любым VNC-клиентом. **Особенность работы горячих клавиш для переключения раскладок клавиатур**\\ Комбинации горячих клавиш для переключения раскладок не должны совпадать на клиентской и серверной стороне! Совпадение и использование этих клавиш в некоторых случаях приводит к неадекватному поведению X-сессии. ===== Вариант для менеджера графических окружений gdm ===== //Раздел ждёт автора ;-)// ===== Смотрите также ===== * [[http://www.nixzeya.ru.net/forum/index.php?topic=278.0|Обсуждение статьи на форуме]] * **man //x11vnc//** * **man //vncviewer//** * Страничка //Karl J. Runge//, проекта x11vnc: http://www.karlrunge.com/x11vnc/