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

Опубликовано Avatar - пт, 10/14/2016 - 08:50

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


Введение


На всякий случай возможно стоит упомянуть, что 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 (Подключение к удаленному рабочему столу).
 



Стандартный порт 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.
 



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



Далее для Windows:
 


 

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.
 



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



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



Также можете попробовать другие 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.

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



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



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

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



Замечание: обратите внимание, что в списке нет Вашего любимого 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


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



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



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

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

 


 

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].
 


 

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


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

 

via


Похожие материалы на сайте:

Памятка пользователям ssh