V Rozobrali sme spustenie VNC servera na virtuálnom stroji akéhokoľvek typu. Táto možnosť má množstvo nevýhod, pričom hlavná z nich sú vysoké požiadavky na šírku pásma prenosových kanálov. Dnes sa pokúsime pripojiť k grafickej pracovnej ploche na Linuxe pomocou RDP (Remote Desktop Protocol). Systém VNC je založený na prenose políčok pixelov prostredníctvom protokolu RFB (Remote Framebuffer), zatiaľ čo RDP umožňuje posielať zložitejšie grafické primitívy a príkazy na vysokej úrovni. Zvyčajne sa používa na organizáciu služieb vzdialených pracovných plôch vo Windows, ale servery pre Linux sú tiež k dispozícii.
Obsah:
Inštalácia grafického prostredia
Vezmeme virtuálny stroj s Ubuntu Server 18.04 LTS s dvoma výpočtovými jadrami, štyrmi gigabajtmi RAM a pevným diskom (HDD) s kapacitou dvadsať gigabajtov. Slabšia konfigurácia nie je vhodná pre grafickú pracovnú plochu, aj keď to závisí od úloh. Nezabudnite použiť propagačný kód Habrahabr10 na získanie 10% zľavy pri objednávke.

Inštalácia prostredia pracovnej plochy so všetkými závislosťami sa vykonáva nasledujúcim príkazom:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsRovnako ako v predchádzajúcom prípade, sme si vybrali XFCE kvôli relatívne nízkym požiadavkám na výpočtové zdroje.
Ruská lokalizácia servera a inštalácia softvéru
Často sú virtuálne stroje nasadené iba s anglickou lokalizáciou. Na pracovnej ploche môže byť potrebná ruská, ktorú je jednoduché nastaviť. Najprv nainštalujeme preklady pre systémové programy:
sudo apt-get install language-pack-skNastavíme lokalizáciu:
sudo update-locale LANG=sk_SK.UTF-8Rovnakého efektu možno dosiahnuť manuálnym úpravou súboru /etc/default/locale.
Pre lokalizáciu GNOME a KDE sú v repozitári k dispozícii balíky language-pack-gnome-sk a language-pack-kde-sk — budú potrebné, ak plánujete používať programy z týchto desktopových prostredí. V XFCE sa preklady inštalujú spolu s aplikáciami. Potom je možné nainštalovať slovníky:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictOkrem toho môže byť inštalácia prekladov potrebná pre niektoré aplikačné programy:
# Браузер 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-ruTýmto je príprava prostredia pracovnej plochy dokončená, zostáva nastaviť RDP server.
Inštalácia a nastavenie RDP servera
V repozitároch Ubuntu je voľne dostupný server Xrdp, ktorý využijeme:
sudo apt-get install xrdpAk všetko prebehlo bez problémov, server by sa mal spustiť automaticky:
sudo systemctl status xrdp 
Server Xrdp sa spúšťa s právami používateľa xrdp a predvolene berie certifikát /etc/ssl/private/ssl-cert-snakeoil.key, ktorý môže byť nahradený vlastným. Na prístup k súboru je potrebné pridať používateľa do skupiny ssl-cert:
sudo adduser xrdp ssl-certPredvoľby je možné nájsť v súbore /etc/default/xrdp a všetky ostatné konfiguračné súbory servera sú v adresári /etc/xrdp. Hlavné parametre nájdeme v súbore xrdp.ini, ktorý nie je potrebné meniť. Konfigurácia je dobre zdokumentovaná a súčasťou sú aj príslušné manpages:
man xrdp.ini
man xrdpZostáva len upraviť skript /etc/xrdp/startwm.sh, ktorý sa vykonáva pri inicializácii používateľskej relácie. Predtým si vytvoríme zálohu skriptu z distribúcie:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shNa spustenie pracovného prostredia XFCE bude potrebný skript približne takto:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Všimnite si: v skriptoch je lepšie uvádzať úplnú cestu k spustiteľným súborom — je to dobrý zvyk. Urobíme skript spustiteľným a týmto je nastavenie servera Xrdp ukončené:
sudo chmod 755 /etc/xrdp/startwm.shReštartujeme server:
sudo systemctl restart xrdp
Nastavenie firewallu
Predvolene Xrdp počúva na TCP porte 3389 na všetkých rozhraniach. V závislosti od konfigurácie virtuálneho servera môže byť potrebné nastaviť firewall Netfilter. V Linuxe sa to zvyčajne robí pomocou nástroja iptables, ale v Ubuntu je lepšie použiť ufw. Ak je známa IP adresa klienta, konfigurácia sa vykoná nasledujúcou príkazom:
sudo ufw allow from IP_Address to any port 3389Povoliť pripojenia z akejkoľvek IP je možné takto:
sudo ufw allow 3389Protokol RDP podporuje šifrovanie, ale otvárať prístup k serveru Xrdp z verejných sietí — je zlé rozhodnutie. Ak klient nemá statickú IP, na zvýšenie úrovne zabezpečenia by mal server počúvať iba na localhost. Prístup je lepšie nastaviť cez SSH tunel, ktorý bezpečne presmeruje prenos z klientského počítača. Podobný prístup sme pre server VNC.
Pripojenie k RDP serveru
Na prácu s pracovným prostredím je lepšie vytvoriť samostatného nepremenného používateľa:
sudo adduser rdpuser 
Pridáme používateľa do skupiny sudo, aby mohol riešiť úlohy súvisiace s administráciou. Ak nie je táto potreba, tento krok možno preskočiť:
sudo gpasswd -a rdpuser sudoNa pripojenie k serveru je možné použiť akéhokoľvek RDP klienta, vrátane integrovaného klienta služby vzdialených pracovných stolov Windows. Ak Xrdp počúva na vonkajšom rozhraní, nebude potrebné žiadne ďalšie kroky. Stačí zadať v nastaveniach pripojenia IP adresu VPS, meno používateľa a heslo. Po pripojení uvidíme približne takýto obraz:

Po počiatočnom nastavení pracovného prostredia získame plnohodnotný desktop. Ako vidíte, nevyžaduje to veľa zdrojov, hoci ďalšie závisí od používaných aplikácií.

Ak server Xrdp počúva len na localhost, musí sa na klientskej počítači prenášať prenos cez SSH tunel (na VPS musí bežať sshd). Na Windows môžete použiť grafického SSH klienta (napríklad PuTTY), zatiaľ čo v UNIX systémoch potrebujete nástroj ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipPo inicializácii tunela sa klient RDP bude pripájať už nie k vzdialenému serveru, ale k lokálnemu hostiteľovi.
S mobilnými zariadeniami je to zložitejšie: budete musieť zakúpiť klientov SSH schopných vytiahnuť tunel, navyše v iOS a iPadOS je zložitá práca na pozadí s aplikáciami tretích strán kvôli príliš dobrej optimalizácii energetickej spotreby. Na iPhone a iPade nebude možné vytiahnuť tunel v samostatnej aplikácii — bude potrebná aplikácia kombinujúca oboje, ktorá sama dokáže nadviazať pripojenie RDP cez SSH. Napríklad taká, ako je .
Správca relácií a relácie používateľov
Možnosť viacerých používateľov je realizovaná priamo v serveri Xrdp a nevyžaduje dodatočné nastavenie. Po spustení služby cez systemd jeden proces funguje v režime démona, počúva port 3389 a interaguje cez localhost s manažérom relácií.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Manažér relácií nie je používateľom zvyčajne viditeľný, pretože v nastaveniach klienta sú zadané prihlásenie a heslo automaticky prenášané. Ak sa tak nestane alebo ak pri autentifikácii nastane chyba, namiesto pracovnej plochy sa zobrazí interaktívne okno na prihlásenie do systému.

Automatické spustenie manažéra relácií je zapísané v súbore /etc/default/xrdp a konfigurácia sa ukladá v /etc/xrdp/sesman.ini. Predvolená podoba vyzerá približne takto:
[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
; Ak je AlwaysGroupCheck=false, prístup bude povolený
; ak skupina TerminalServerUsers nie je definovaná.
AlwaysGroupCheck=false
[Sessions]Tu nie je potrebné nič meniť, stačí zakázať prihlasovanie s právami root (AllowRootLogin=false). Pre každého užívateľa, ktorý sa v systéme autentizuje, je spustený samostatný proces xrdp: ak sa odpojí bez ukončenia relácie, procesy používateľov budú predvolene pokračovať v prevádzke a k relácii sa bude možné znova pripojiť. Nastavenia je možné zmeniť v súbore /etc/xrdp/sesman.ini (sekcia [Sessions]).
Prepínanie rozložení klávesnice
S obojsmerným clipboardom zvyčajne nie sú problémy, ale s ruskou klávesnicou bude potrebné trochu laborovať (ruská lokalizácia musí byť už ). Upraviť nastavenia klávesnice servera Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniNa koniec konfiguračného súboru je potrebné pridať nasledujúce riadky:
[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,ruZostáva súbor uložiť a reštartovať Xrdp:
sudo systemctl restart xrdpAko vidíte, spustiť server RDP na linuxovom VPS nie je ťažké, už sme rozobrali nastavenie VNC. Okrem týchto technológií existuje ešte jedna zaujímavá varianta: systém X2Go, ktorý využíva modifikovaný protokol NX 3. S ňou sa budeme zaoberať v nasledujúcom príspevku.
Zdroj: habr.com
