В обсъдихме пускането на VNC сървър на виртуална машина от всякакъв тип. Тази опция има много недостатъци, основният от които е високите изисквания за пропускателна способност на каналите за предаване на данни. Днес ще се опитаме да се свържем с графичен работен плот на Linux чрез RDP (Remote Desktop Protocol). Системата VNC се основава на предаване на масиви от пиксели с помощта на протокола RFB (Remote Framebuffer), а RDP ви позволява да изпращате по-сложни графични примитиви и команди от високо ниво. Обикновено се използва за хостване на услуги за отдалечен работен плот в Windows, но са налични и сървъри за Linux.
Съдържание:
Инсталиране на графичната среда
Ще вземем виртуална машина с Ubuntu Server 18.04 LTS с две изчислителни ядра, четири гигабайта RAM и двадесет гигабайтов твърд диск (HDD). По-слабата конфигурация не е подходяща за графичен работен плот, въпреки че това зависи от задачите, които се решават. Не забравяйте да използвате промо код Habrahabr10, за да получите 10% отстъпка от поръчката си.

Инсталирането на работната среда с всички зависимости се извършва със следната команда:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsКакто и в предишния случай, избрахме XFCE поради сравнително ниските му изисквания за изчислителни ресурси.
Русификация на сървъра и инсталиране на софтуер
Често виртуалните машини се разполагат само с английска локализация. На работния плот може да ви трябва руски език, който е лесен за настройка. Първо, нека инсталираме преводи за системни програми:
sudo apt-get install language-pack-ruНека да настроим локализацията:
sudo update-locale LANG=ru_RU.UTF-8Същият ефект може да се постигне чрез ръчно редактиране на /etc/default/locale.
За локализиране на GNOME и KDE, хранилището разполага с пакетите language-pack-gnome-ru и language-pack-kde-ru - ще ви трябват, ако използвате програми от тези десктоп среди. В XFCE преводите се инсталират с приложения. След това можете да инсталирате речниците:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictОсвен това може да се изисква инсталиране на преводи за някои приложни програми:
# Браузер Firefox
sudo apt-get install firefox firefox-locale-ru
# Почтовый клиент Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# Офисный пакет LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ruТова завършва подготовката на работната среда, остава само да конфигурирате RDP сървъра.
Инсталиране и конфигуриране на RDP сървър
Репозиториите на Ubuntu имат свободно разпространяван Xrdp сървър, който ще използваме:
sudo apt-get install xrdpАко всичко върви добре, сървърът трябва да стартира автоматично:
sudo systemctl status xrdp 
Xrdp сървърът работи с xrdp потребителски права и по подразбиране приема /etc/ssl/private/ssl-cert-snakeoil.key сертификат, който може да бъде заменен с ваш собствен. За да имате достъп за четене на файла, трябва да добавите потребителя към групата ssl-cert:
sudo adduser xrdp ssl-certНастройките по подразбиране могат да бъдат намерени във файла /etc/default/xrdp, а всички останали сървърни конфигурационни файлове се намират в директорията /etc/xrdp. Основните параметри са във файла xrdp.ini, който не трябва да се променя. Конфигурацията е добре документирана и съответните страници с ръководство са включени:
man xrdp.ini
man xrdpВсичко, което остава, е да редактирате скрипта /etc/xrdp/startwm.sh, който се изпълнява при инициализиране на потребителската сесия. Първо, нека направим резервно копие на скрипта от разпространението:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shЗа да стартирате средата на работния плот XFCE, ще ви е необходим скрипт нещо подобно:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Моля, обърнете внимание: в скриптовете е по-добре да напишете пълния път до изпълнимите файлове - това е добър навик. Нека направим скрипта изпълним и в този момент настройката на Xrdp сървъра може да се счита за завършена:
sudo chmod 755 /etc/xrdp/startwm.shРестартирайте сървъра:
sudo systemctl restart xrdp
Настройка на защитна стена
По подразбиране Xrdp слуша TCP порт 3389 на всички интерфейси. В зависимост от конфигурацията на виртуалния сървър може да се наложи да конфигурирате защитна стена на Netfilter. В Linux това обикновено се прави с помощната програма iptables, но в Ubuntu е по-добре да използвате ufw. Ако IP адресът на клиента е известен, конфигурацията се извършва със следната команда:
sudo ufw allow from IP_Address to any port 3389Можете да разрешите връзки от всеки IP като този:
sudo ufw allow 3389RDP протоколът поддържа криптиране, но излагането на Xrdp сървъра на обществени мрежи е лоша идея. Ако клиентът няма фиксиран IP, сървърът трябва да слуша само localhost, за да увеличи сигурността. Най-добре е да получите достъп до него чрез SSH тунел, който сигурно ще пренасочи трафика от клиентския компютър. Имаме подобен подход за VNC сървър.
Свързване към RDP сървър
За да работите с работната среда, по-добре е да създадете отделен непривилегирован потребител:
sudo adduser rdpuser 
Нека добавим потребителя към групата sudo, за да може да изпълнява задачи, свързани с администриране. Ако няма такава нужда, можете да пропуснете тази стъпка:
sudo gpasswd -a rdpuser sudoМожете да се свържете със сървъра, като използвате всеки RDP клиент, включително вградения клиент за услуги за отдалечен работен плот на Windows. Ако Xrdp слуша външния интерфейс, няма да са необходими допълнителни действия. Достатъчно е да посочите VPS IP адреса, потребителското име и паролата в настройките за връзка. След като се свържем, ще видим нещо подобно:

След първоначалната настройка на работната среда ще получим пълноценен работен плот. Както можете да видите, той не консумира много ресурси, въпреки че всичко ще зависи от използваните приложения.

Ако Xrdp сървърът слуша само localhost, трафикът на клиентския компютър ще трябва да бъде пакетиран в SSH тунел (sshd трябва да работи на VPS). В Windows можете да използвате графичен SSH клиент (например PuTTY), а в UNIX системи имате нужда от помощната програма ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipСлед като тунелът се инициализира, RDP клиентът вече няма да се свързва с отдалечения сървър, а с локалния хост.
По-трудно е с мобилни устройства: SSH клиенти, способни да издигат тунел, ще трябва да бъдат закупени, а в iOS и iPadOS фоновата работа на приложения на трети страни е трудна поради твърде добрата оптимизация на потреблението на енергия. На iPhone и iPad няма да можете да създадете тунел в отделно приложение; ще ви трябва приложение за комбайн, което може само да установи RDP връзка чрез SSH. Като напр .
Мениджър на сесии и потребителски сесии
Възможността за многопотребителска работа е внедрена директно в Xrdp сървъра и не изисква допълнителна конфигурация. След стартиране на услугата чрез systemd, един процес работи в режим на демон, слуша на порт 3389 и комуникира чрез localhost с мениджъра на сесии.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Мениджърът на сесии обикновено не се вижда от потребителите, тъй като потребителското име и паролата, посочени в настройките на клиента, се прехвърлят към него автоматично. Ако това не се случи или има грешка по време на удостоверяване, вместо работния плот ще се появи интерактивен прозорец за влизане.

Автоматичното стартиране на мениджъра на сесиите е указано във файла /etc/default/xrdp, а конфигурацията се съхранява в /etc/xrdp/sesman.ini. По подразбиране изглежда нещо подобно:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]Не е нужно да променяте нищо тук, просто трябва да деактивирате влизането с root права (AllowRootLogin=false). За всеки потребител, упълномощен в системата, се стартира отделен xrdp процес: ако прекъснете връзката, без да прекратите сесията, потребителските процеси ще продължат да се изпълняват по подразбиране и можете да се свържете отново със сесията. Настройките могат да се променят във файла /etc/xrdp/sesman.ini (секция [Сесии]).
Превключване на клавиатурни подредби
Обикновено няма проблеми с двупосочен клипборд, но с руската клавиатурна подредба ще трябва да си поиграете малко (руският локал трябва да е вече ). Нека редактираме настройките на клавиатурата на Xrdp сървъра:
sudo nano /etc/xrdp/xrdp_keyboard.iniТрябва да добавите следните редове в края на конфигурационния файл:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ruВсичко, което остава, е да запазите файла и да рестартирате Xrdp:
sudo systemctl restart xrdpКакто можете да видите, не е трудно да настроите RDP сървър на Linux VPS, но Вече обсъдихме настройката на VNC. В допълнение към тези технологии има още една интересна опция: системата X3Go, използваща модифициран NX 2 протокол. Ще се занимаваме с него в следващата публикация.
Източник: www.habr.com
