Удаленное управление Linux (доступ к графической сессии текущего пользователя)

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 693]


    Так как единственным вменяемым способом удаленного доступа к графической консоли Linux-рабочих станций на данный момент является TeamViewer, который нельзя использовать для удаленной коммерческой поддержки (и он постоянно отключается), нам пришлось продумывать метод удаленного подключения к рабочим станциям Linux без ограничения по времени сеанса.

    Удаленное управление Linux

    Вопрос обратного подключения (к машинам за NAT) с легкостью решается созданием на нашей стороне OpenVPN-сервера к котором у клиенты собственно и подключаются, а вот с доступом к графической консоли возникли некоторые сложности методы обхода которых мы в данной статье и рассмотрим.

    Данная заметка является компиляцией наших старых записей по вопросам реализации удаленного доступа к графической сессии текущего пользователя. Мы не нашли какого то штатного решения для удаленного доступа к сессии пользователя на всех этапах работы ,включая авторизацию, и проработали несколько методов позволяющих реализовать необходимый функционал. Мы попробовали ,наверное, все возможные методы реализации удаленного управления и подобрали максимально удовлетворяющее нас открытое решение на базе x11vnc.

    Во-первых, вам понадобится установить необходимое ПО:

    # aptitude install x11vnc

    Во-вторых, зададим пароль для удаленного доступа:

    # x11vnc -storepasswd /etc/x11vnc.passwd

    Длина пароля ограничена шестью символами, поэтому рекомендуем вам ограничить доступ по сети к управляющему порту 5900, например при помощи iptables.

    Перейдем к настройке x11vnc. В нашем случае для авторизации пользователя в системе используется дисплейный менеджер SDDM, если вы вызовите список процессов системы, то вы обратите внимание, что при каждом запуске sddm генерируется случайный токен авторизации вида:

    -auth /var/run/sddm/{cc7aa561-db33-4908-9d45-d8026747d25a}

    И в простейшем случае для реализации возможности подключения к текущей сессии достаточно выполнить команду:

    # /usr/bin/x11vnc -display :0 -auth $(ls /var/run/sddm/{*}) -rfbauth /etc/x11vnc.passwd -o /var/log/x11.log

    После этого вы можете подключиться к графической консоли пользователя с удаленного компьютера выполнив команду:

    $ vncviewer <remote-pc-ip>

    Обратите внимание, что отключившись от сессии x11vnc завершит свою работу. Для того чтобы x11vnc не завершал свою работу, а продолжал работать в фоновом режиме в качестве демона немного модифицируем командную строку запуска, добавив несколько параметров:

    -bg — работать в фоновом режиме;
    -shared — разрешить подключаться одновременно нескольким пользователям;
    -dontdisconnect — не отключать подключенных пользователей при подключении нового;
    -many — не завершать работу сервера после отключения первого клиента.

    # /usr/bin/x11vnc -display :0 -bg -shared -dontdisconnect -many \
    -auth $(ls /var/run/sddm/{*}) -rfbauth /etc/x11vnc.passwd -o /var/log/x11.log

    Теперь нам необходимо оформить эту команду в виде демона для запуска при старте системы. Для этого создайте файл /etc/systemd/system/x11vnc.service содержащий следующие параметры:

    [Unit]
    Description=Remote control x11vnc
    After=graphical.target

    [Service]
    Restart=always
    RestartSec=30
    Type=simple
    ExecStart=-/bin/bash -c "/usr/bin/x11vnc -display :0 -shared -dontdisconnect -many \
    -auth $(ls /var/run/sddm/{*}) -rfbauth /etc/x11vnc.passwd -o /var/log/x11.log"

    [Install]
    WantedBy=graphical.target

    Настраиваем запуск службы при старте системы:

    # systemctl enable x11vnc

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


    Обсуждение статьи
    Вопрос нашего пользователяЕщё один метод удаленного подключения к домашней машине Linux (на Debian 8) без ограничения по времени сеанса, я организовал через openssh + x11vnc. Запуск скрипта реализовал или вручную через строку запуска в /etc/kde4/kdm/Xsetup sh /home/robert/.x11vnc_start.sh или вручную через кнопку запуска того же скрипта на рабочем столе. В винде отлично показали себя две программы (от лучшего к худшему):TightVNC Viewer и VNC-Viewer.
    Скрипт ниже
    #!/bin/bash
    /usr/bin/x11vnc -dontdisconnect -display :0 -notruecolor -noxfixes -shared -capslock -xrandr resize -forever -bg -rfbport 5900 -auth /home/robert/.Xauthority -rfbauth /home/robert/.vnc/passwd
    Ответ на комментарийСпасибо за ваш скриптик.

    Ваш комментарий: