Методы удаленного доступа к Linux GUI

В службу технической поддержки RUVDS регулярно обращаются по поводу GUI и удаленного доступа к нему на виртуальных серверах с Linux, несмотря на то что в интернете достаточно много материалов освещающих эту проблему. Поэтому, для наших пользователей мы решили собрать всё по этой теме в одну статью.
8015af4cb62840738443cf4b4ff1ad96.jpg


Введение


На всякий случай возможно стоит упомянуть, что SSH — основной способ предоставления доступа к линуксовым виртуалкам на RUVDS. Большая часть действий описываемых в этой статье будет осуществляться именно таким образом.

Для подключения необходимо найти SSH-клиент для вашей операционной системы.

Windows:

  1. PuTTY: Telnet/SSH-Клиент
  2. OpenSSH для Cygwin
  3. OpenSSH для MinGW
  4. WinSCP

Linux:
  1. OpenSSH; если Вы пользуетесь Linux, например Ubuntu, скорее всего всё уже установлено, до нас, так что можно смело писать в терминале: ssh root@[IP].
  2. PuTTY есть и для Linux?…

MAC OS:
  1. OpenSSH; это бесплатно!
  2. ZOC (80$!)
  3. vSSH

Плагины для браузеров:
  1. FireSSH для Firefox
  2. Secure Shell для Google Chrome

Установка GUI


Итак, перейдем к установке GUI. Сначала нужно поставить графическую подсистему:
Для Debian/Ubuntu:
$ apt-get update
$ apt-get install --no-install-recommends xserver-xorg xserver-xorg-core xfonts-base xinit libgl1-mesa-dri x11-xserver-utils

Для CentOS:
$ yum groupinstall "X Window System" "Fonts"

Далее следует установка Desktop Environment (DE). Их существует великое множество. Мы рекомендуем ставить на сервер более легковесные среды, а еще лучше, не ставить вовсе. Первые две DE достаточно компактные, функциональные и «привычные».

1. Xfce
Для Debian/Ubuntu:

$ apt-get update

Полная установка:
$ apt-get install task-xfce-desktop

Стандартная:
$ apt-get install xfce4 xfce4-terminal

Можно поставить дополнительно:
$ apt-get install xfce4-goodies

Для CentOS:
$ yum install epel-release
$ yum groupinstall "Xfce"
$ echo "PREFERRED=startxfce4" >> /etc/sysconfig/desktop

2. LXDE
Для Debian/Ubuntu:
$ apt-get update

Полная:
$ apt-get install lxde

Минимальная:
$ apt-get install lxde-core

Для CentOS:
Нет в официальных репозиториях

Добавление русской раскладки:
$ setxkbmap -option grp:switch,grp:ctrl_shirt_toggle us,ru

Сочетание клавиш можно менять на свое усмотрение, например:

$ setxkbmap -option grp:switch,grp:alt_shift_toggle us,ru

Чтобы эта команда запускалась каждый раз при запуске LXDE, нужно добавить в конец файла с помощью вашего любимого vi строку: @setxkbmap -option grp: switch, grp: ctrl_shift_toggle, grp_led: scroll us, ru. Или вот так…
$ echo "@setxkbmap -option grp:switch,grp:alt_shift_toggle,grp_led:scroll us,ru" >> /etc/xdg/lxsession/LXDE/autostart

Следующие две DE являются чрезвычайно легкими. Если уж GUI нужен на сервере, вероятно, стоит использовать именно их.

3. FluxBox
Для Debian/Ubuntu:

$ apt-get update
$ apt-get install fluxbox xterm

Для CentOS:
$ yum install fluxbox xterm
$ echo "PREFERRED=startfluxbox" >> /etc/sysconfig/desktop

4. Openbox
Для Debian/Ubuntu:

$ apt-get update
$ apt-get install openbox xterm

Для CentOS:
$ yum install epel-release
$ yum install openbox xterm
$ echo "PREFERRED=openbox-session" >> /etc/sysconfig/desktop

Далее следуют наиболее популярные на десктопах графические оболочки.

5. Gnome
Для Ubuntu/Debian:

$ apt-get update

Минимальная установка:
$ apt-get install --no-install-recommends lightdm gnome-panel gnome-terminal

Полная установка:
$ apt-get install gnome gnome-shell

Замечание: с настройкой VNC-сервера под Gnome что-то пошло не так… Сервера из репозиториев tightvncserver и vnc4server так и не согласились сотрудничать, поэтому пришлось собрать пару deb-пакетов руками. Если у Вас не получится настроить сервер, то мы можем порекомендовать скачать собранный нами архив с tigervnc-server«ом и поставить его. Для этого:
$ curl -LOk https://ruvds.com/downloads/tightvnc-packages.tar

Или
$ wget https://ruvds.com/downloads/tightvnc-packages.tar
$ tar -xvf tightvnc-packages.tar
$ cd ./tightvnc-packages
$ dpkg -i *.deb || (apt -f install -y ; dpkg -i *.deb)

Для CentOS:
$ yum groupinstall "GNOME"
$ echo "PREFERRED=gnome-session" >> /etc/sysconfig/desktop

6. KDE
Для Debian:
$ apt-get update

Полная:
$ apt-get install kde-full

Стандартная:
$ apt-get install kde-standart

Минимальная установка:
$ apt-get install kde-plasma-desktop

Для CentOS:
$ yum groupinstall "KDE"
$ echo "PREFERRED=startkde" >> /etc/sysconfig/desktop

7. Cinnamon
Для Debian/Ubuntu:
$ apt-get update
$ apt-get install --no-install-recommends cinnamon-core lightdm

Для CentOS:
$ yum install cinnamon

8. MATE
Для Debian/Ubuntu:
$ apt-get update

Полная:
$ apt-get install mate-desktop-environment-extras

Стандартная:
$ apt-get install mate-desktop-environment

Минимальная:
$ apt-get install mate-desktop-environment-core

Для CentOS:
$ yum groupinstall "MATE Desktop"

Если Вы хотите получать доступ к GUI через «Аварийный режим», то необходимо сделать следующее:
$ systemctl set-default graphical.target

Мало того, необходимо обеспечить запуск графической оболочки при старте системы. Для этого можно установить какой-нибудь экранный менеджер (Display Manager, DM), например:
$ apt-get install lightdm

Или в случае с CentOS:
$ yum install lightdm

Если необходимости в доступе из личного кабинета нет, то следует выполнить:
$ systemctl set-default multi-user.target

Заметка: Ubuntu предлагает своим пользователям несколько метапакетов для более удобной установки нужной DE:

Unitu:

$ apt-get install ubuntu-desktop

LXDE:
$ apt-get install lubuntu-desktop

XFCE:
$ apt-get install xubuntu-desktop

KDE:
$ apt-get install kubuntu-desktop

Далее, есть много способов получить удаленный доступ к GUI.

Удаленный доступ


RDP


На виртуальном сервере, в зависимости от OS нужно произвести следующие действия.

Debian:

$ apt-get install xrdp
$ systemctl enable xrdp
$ systemctl start xrdp

CentOS:
$ yum install epel-release
$ yum install xrdp tigervnc-server tigervnc-server-module
$ chcon -t bin_t /usr/sbin/xrdp
$ chcon -t bin_t /usr/sbin/xrdp-sesman
$ firewall-cmd --zone=public --add-port=3389/tcp --permanent
$ firewall-cmd --zone=public --add-port=3389/udp --permanent
$ firewall-cmd --reload
$ systemctl enable xrdp
$ systemctl start xrdp

XDMCP:
$ vi /etc/gdm/custom.conf

[security]
AllowRemoteRoot=true
DisallowTCP=false
 
[xdmcp]
Enable=true
MaxSessions=30

Далее, если вы используете Windows, подключаемся через встроенный RDP-клиент, Remote Desktop Connection (Подключение к удаленному рабочему столу).
b315c9cdf6d956d3cb4fd15bc4a3746f.png

Стандартный порт 3389. Для Linux есть масса клиентов которые можно установить из репозиториев: freerdp и remmina, gnome-rdp, vinagre и т.п.

Для Mac OS:

Также можно пробросить RDP-шный трафик через SSH-туннель. Для этого нужно поправить конфигурационный файл xrdp:

$ vi /etc/xrdp/xrdp.ini

В секцию [globals] нужно добавить строку: address=127.0.0.1
$ systemctl restart xrdp

Проверить, что всё правильно, можно так:
$ nmap -p 3389 [IP]

Starting Nmap 6.47 ( http://nmap.org ) at 2016-10-04 13:07 MSK
Nmap scan report for unspecified.mtw.ru ([IP])
Host is up (0.0087s latency).
PORT     STATE  SERVICE
3389/tcp closed ms-wbt-server

Затем если вы используете cygwin или mingw, linux или mac os:
ssh root@[IP] -L 3389:localhost:3389

Если PuTTY:

Запустите PuTTY. В древовидном меню слева Connection → SSH → Tunnels. Далее добавляем новый Forwarded Port (Source port: 3389, Destination: localhost:3389). Нажимаем Add.

a1ffc659ce89a469ee13d3f14ba01a41.png

Далее следуете в секцию Session. Вводите IP вашего сервера в поле Host Name (or IP address). Нажимаете кнопку Open, вводите пароль для подключения по SSH.

3d978335bfb479c10f662b3234d1c6d5.png

Далее для Windows:

8a54628e2fe2a5b84e21708e55200776.png

VNC


Клиент:

Для Windows:

  1. www.realvnc.com
  2. www.tightvnc.com
  3. www.uvnc.com/downloads/ultravnc.html

Для Linux:
  1. Можно использовать вышеупомянутый клиент: remmina
  2. Если в браузере хотите: novnc — HTML5 VNC client
  3. И ещё куча всяких разных: directvnc, gnome-rdp, krdc, xtightvncviewer, vinagre, xvnc4viewer

Для MAC OS:

OS X предоставляет для этого встроенное приложение Screen Sharing. Можно также использовать Safari

vnc://yourserverip:5901

Сервер: На Вашей виртуальной машине установите VNC сервер:
$ apt-get install tightvncserver

Или
$ apt-get install vnc4server
$ yum install tigervnc-server

Если на Вашей системе работает файрвол необходимо открыть соответствующие порты. Пример для CentOS
$ firewall-cmd --zone=public --add-port=5901/tcp --permanent
$ firewall-cmd --zone=public --add-port=5901/udp --permanent
$ firewall-cmd --reload

Далее выполните:
$ vncpasswd
Password:
Verify:

При возникновении проблем с отображением иконок и шрифтов при использовании xfce4 по Ubuntu/Debian:
$ echo "export XKL_XMODMAP_DISABLE=1" >> ~/.vnc/xstartup

Если вы хотите, чтобы VNC-сервер стартовал автоматически, создайте файл:
$ vi /lib/systemd/system/vncsrv.service

Со следующим содержимым:
[Service]
Environment=RESOLUTION=800x600
Environment=COLOR=16
Environment=DISPLAY=1

[Unit]
Description=VNC Server

[Service]
Type=forking
ExecStart=/usr/bin/vncserver -depth ${DEPTH} -geometry ${RESOLUTION} :${DISPLAY}
ExecStop=/usr/bin/vncserver -kill :${DISPLAY}
ExecReload=/usr/bin/vncserver -kill :${DISPLAY} && /usr/bin/vncserver -depth ${DEPTH} -geometry ${RESOLUTION} :${DISPLAY}
User=root

[Install]
WantedBy=multi-user.target

Делее выполните:
systemctl daemon-reload
systemctl enable vncsrv.service
systemctl start vncsrv.service

Теперь можно подключиться, например, через UltraVNC. Для этого нужно запустить UltraVNC Viewer, в поле VNC Server записать [IP]::5901 (по-умолчанию: 5901, 5902 и т.п. для первого дисплея, второго и т.д. соответственно) и нажать на кнопку подключиться.

Также можно пустить vnc-шный трафик через ssh-туннель. Для этого отредактируйте:

$ vi /lib/systemd/system/vncsrv.service

[Service]
Environment=RESOLUTION=800x600
Environment=COLOR=16
Environment=DISPLAY=1

[Unit]
Description=VNC Server

[Service]
Type=forking
ExecStart=/usr/bin/vncserver -depth ${DEPTH} -geometry ${RESOLUTION} :${DISPLAY} -localhost
ExecStop=/usr/bin/vncserver -kill :${DISPLAY}
ExecReload=/usr/bin/vncserver -kill :${DISPLAY} && /usr/bin/vncserver -depth ${DEPTH} -geometry ${RESOLUTION} :${DISPLAY} -localhost
User=root

[Install]
WantedBy=multi-user.target

Затем если вы используете cygwin или mingw, linux или mac os:
ssh root@[IP] -L 5901:localhost:5901

Если PuTTY:
Запустите PuTTY. В древовидном меню слева Connection → SSH → Tunnels. Далее добавляем новый Forwarded Port (Source port: 5901, Destination: localhost:5901). Нажимаем Add.
c88e8c753eec2df40e59d9b4fd2646a5.png

Далее следуете в секцию Session. Вводите IP вашего сервера в поле Host Name (or IP address). Нажимаете кнопку Open, вводите пароль для подключения по SSH.

3d978335bfb479c10f662b3234d1c6d5.png

Затем открываете UltraVNC Viewer и в поле VNC Server вводите: localhost::5901 после чего подключаетесь.

dd790e6d0aaa9446e16b32e835a4aeb4.png

Также можете попробовать другие VNC-сервера:

x11vnc — фактически VNC-сервер (как vnc4server или tightvnc), но позволяет получать доступ к уже существующей X-сессии. Т.е. если Вы настроили графическую оболочку таким образом, что она запускается при старте системы, то можно использовать следующий вариант:

$ apt-get install x11vnc
$ x11vnc -storepasswd
$ x11vnc -usepw
$ x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw &
$ disown -h %1

После подключения по VNC (на порт 5900) Вы должны увидеть тоже что и в «Аварийном режиме».

Для старта x11vnc при запуске OS необходимо проделать следующее:

$ vi /lib/systemd/system/xvncsrv.service

Добавляем:
[Unit]
Description=X11VNC

[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :2 -usepw
User=root

[Install]
WantedBy=graphical.target

Далее:
systemctl daemon-reload
systemctl enable xvncsrv.service
systemctl start xvncsrv.service

NX


Теперь немного поинтереснее. Одна замечательная компания NoMachine разработала отличный протокол NX на замену VNC. Клиенты для подключения по этому протоколу бесплатны, а официальное серверное ПО от NoMachine  стоит много денег. В свое время, эта же компания поддерживала проект FreeNX работы на котором со временем затихли; текущая версия 0.7.2 от 2008–08–22. Но, к счастью, нашлись люди создавшие форк и назвавшие его x2go. К сожалению, x2go не совместим ни с NX от NoMachine, ни с freeNX. Так что клиент берем тут.

Установка сервера на Debian (источник):

Для примера поставим эту DE:

$ apt-get install fluxbox

Далее следуем инструкциям с оффициального сайта:
$ apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
$ echo "deb http://packages.x2go.org/debian jessie main" > /etc/apt/sources.list.d/x2go.list
$ echo "deb-src http://packages.x2go.org/debian jessie main" >> /etc/apt/sources.list.d/x2go.list
$ apt-get update
$ apt-get install x2go-keyring && apt-get update
$ apt-get install x2goserver x2goserver-xsession

Вывод следующей команды должен показать, что x2go готов к работе:
$ systemctl status x2goserver
● x2goserver.service - LSB: Start and stop the X2Go daemon
   Loaded: loaded (/etc/init.d/x2goserver)
   Active: active (running) since Tue 2016-10-11 22:05:51 MSK; 30min ago
...

А теперь важный момент, подключиться без этого фикса не получится! Нужно найти в файле .profile строку «mesg n» и заменить её на «tty -s && mesg n».
$ vi .profile

Следующая команда выведет путь до исполняемого файла startfluxbox, понадобится при настройке клиента:
$ whereis startfluxbox

Установка сервера на Ubuntu:
$ apt-get install xfce4 xfce4-terminal
$ add-apt-repository ppa:x2go/stable
$ apt-get update
$ apt-get install x2goserver x2goserver-xsession

А теперь важный момент, подключиться без этого фикса не получится! Нужно найти в файле .profile строку «mesg n || true» и заменить её на «tty -s && mesg n».
$ vi .profile

Установка сервера на CentOS:
$ yum install epel-release
$ yum install x2goserver x2goserver-xsession

Клиент для линукс ставится из вышеприведенных репозиториев следующей командой:
$ apt-get install x2goclient

Для Windows — скачиваем, ставим, запускаем. По той же ссылке, приведенной выше, есть клиент для OS X.

Запускаем клиент:

f0ab093c2df0c064981f9caf2444cc43.png

В настройках сессии указываем: в поле Host — IP вашего сервера, в поле Login — root, порт оставляем как есть, session type — тот GUI который ставили.

11b3604307cb7cdeacb86c5eb16de7dc.png

Как вы можете видеть, есть возможность аутентификации по ключу. В общем много всякого. Посмотрите сами. И звук можно через PulseAudio выводить.

После нажатия Ok вы увидите вот такие вот очаровательные штучки, на которые нужно нажать для получения запроса на ввод пароля и подключения к выбранной сессии:

6d92b59971741bd508aa653d9d5813f5.png

Замечание: обратите внимание, что в списке нет Вашего любимого FluxBox«а поэтому путь к нему приходится прописывать руками.

Важной возможностью x2go является возможность запуска любого графического приложения вообще без установки DE. Для этого в настройках сессии нужно в секции session type нужно выбрать пункт single application и выбрать выполняемое приложение или ввести путь к программе которую следует запустить.

В этом случае установка ПО на сервер будет выглядеть следующим образом. В случае с Ubuntu:

$ add-apt-repository ppa:x2go/stable
$ apt-get update
$ apt-get install x2goserver x2goserver-xsession

А теперь важный момент, подключиться без этого фикса не получится! Нужно найти в файле .profile строку «mesg n || true» и заменить её на «tty -s && mesg n».
$ vi .profile
$ apt-get install firefox xterm

И настроив сессию как показано ниже, можно будет запустить браузер на удаленном сервере, а на вашей машине откроется окно его отображающее:
ebfca67dd150e107c49afd597971e872.png

Или так; тогда просто откроется окно терминала:

d3146aa752265ead40019bba22d69c53.png

Ниже вы можете видеть скриншот окна статуса текущей сессии. Оранжевыми цифрами отмечены кнопки:

  1. «Suspend session» — после нажатия на эту кнопку соединение будет разорвано, но сессия останется и будет ожидать повторного подключения. Все запущенные вами на сервере приложения продолжат свою работу;
  2. «Terminate session» — после нажатия подключение к серверу будет разорвано, а запущенные вами на сервере приложения будут завершены.

b88f32c5c1d42105032a043ba6a20162.png

TeamViewer


Последний способ удаленного доступа к рабочему столу.

Установка на Ubuntu:

$ apt-get update
$ apt-get install lubuntu-desktop
$ reboot
$ dpkg --add-architecture i386
$ apt-get update
$ wget http://download.teamviewer.com/download/teamviewer_i386.deb
$ dpkg -i teamviewer_i386.deb
$ apt-get -f install
$ teamviewer --passwd [PASSWD]

Установка на Debian:
$ apt-get update
$ apt-get install lxde lightdm
$ reboot
$ dpkg --add-architecture i386
$ apt-get update
$ wget http://download.teamviewer.com/download/teamviewer_i386.deb
$ dpkg -i teamviewer_i386.deb
$ apt-get -f install
$ teamviewer --passwd [PASSWD]

Установка на CentOS:
$ yum groupinstall "X Window system"
$ yum install epel-release
$ yum install fluxbox xterm lightdm
$ systemctl set-default graphical.target
$ reboot
$ curl -o TeamViewer_Linux_PubKey.asc -Lk http://www.teamviewer.com/link/?url=354858
$ rpm --import TeamViewer_Linux_PubKey.asc
$ curl -LOk http://download.teamviewer.com/download/teamviewer.i686.rpm
$ yum install teamviewer.i686.rpm
$ teamviewer --passwd [PASSWD]

Также необходимо принять лицензионное соглашение TeamViewer«а, это можно сделать с помощью «Аварийного режима», либо добавить следующие строки в конец файла /opt/teamviewer/config/global.conf:
$ echo "[int32] EulaAccepted = 1" >> /opt/teamviewer/config/global.conf
$ echo "[int32] EulaAcceptedRevision = 6" >> /opt/teamviewer/config/global.conf
$ teamviewer --daemon restart

Следующая команда покажет состояние демона TeamViewer«а и необходимый для подключения девятизначный TeamViewer ID:
$ teamviewer --info

А следующая команда позволяет установить пароль для входа:

После запуска клиента скачанного тут, нужно ввести TeamViewer ID в поле Partner UD и нажать на кнопку «Connect to partner». Далее TeamViewer запросит пароль: [PASSWD].

bfcd8411e9a43e275b67fa237c133fe8.png

Вместо заключения


Вот вроде бы и всё. Надеемся что эта статья поможет пользователям linux-серверов в настройке комфортного и удобного для них окружения.

Комментарии (1)

  • 13 октября 2016 в 14:46

    0

    Как решается вопрос с периодичным отваливанием смены раскладки при использовании x2go на клиенте и сервере? А так же с корректной работой цифрового блока клавиатуры?

© Habrahabr.ru