В службу технической поддержки RUVDS регулярно обращаются по поводу GUI и удаленного доступа к нему на виртуальных серверах с Linux, несмотря на то что в интернете достаточно много материалов освещающих эту проблему. Поэтому, для наших пользователей мы решили собрать всё по этой теме в одну статью.
Введение
На всякий случай возможно стоит упомянуть, что SSH — основной способ предоставления доступа к линуксовым виртуалкам на RUVDS. Большая часть действий описываемых в этой статье будет осуществляться именно таким образом.
Для подключения необходимо найти SSH-клиент для вашей операционной системы.
Windows:
Linux:
- OpenSSH; если Вы пользуетесь Linux, например Ubuntu, скорее всего всё уже установлено, до нас, так что можно смело писать в терминале: ssh root@[IP].
- PuTTY есть и для Linux?..
MAC OS:
Плагины для браузеров:
- FireSSH для Firefox
- 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:
Для Linux:
- Можно использовать вышеупомянутый клиент: remmina
- Если в браузере хотите: novnc — HTML5 VNC client
- И ещё куча всяких разных: 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
И настроив сессию как показано ниже, можно будет запустить браузер на удаленном сервере, а на вашей машине откроется окно его отображающее:
Или так; тогда просто откроется окно терминала:
Ниже вы можете видеть скриншот окна статуса текущей сессии. Оранжевыми цифрами отмечены кнопки:
- «Suspend session» — после нажатия на эту кнопку соединение будет разорвано, но сессия останется и будет ожидать повторного подключения. Все запущенные вами на сервере приложения продолжат свою работу;
- «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-серверов в настройке комфортного и удобного для них окружения.
Автор: RUVDS.com