Методи віддаленого доступу до Linux GUI

В службу технічної підтримки 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.0087 s 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 daemon X2Go
Loaded: loaded (/etc/init.d/x2goserver)
Active: active (running) since Tue 2016-10-11 22:05:51 MSK; 30min ago
...

А тепер важливий момент, підключитися без цього фікса не вийде! Потрібно знайти у файлі .profile рядок «бемщ n» і замінити її на «tty -s && бемщ 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 рядок «бемщ n || true» і замінити її на «tty -s && бемщ 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 рядок «бемщ n || true» і замінити її на «tty -s && бемщ 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 [ПАРОЛЬ]

Установка на 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 [ПАРОЛЬ]

Установка на 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 [ПАРОЛЬ]

Також необхідно прийняти ліцензійну угоду 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 запросить пароль: [ПАРОЛЬ].



Замість висновку
Ось начебто і все. Сподіваємося, що ця стаття допоможе користувачам linux-серверів налаштування комфортного і зручного для них оточення.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.