V Probrali jsme spuštění serveru VNC na virtuálním stroji jakéhokoli typu. Tento variant má spoustu nedostatků, přičemž hlavním z nich jsou vysoké požadavky na šířku pásma přenosových kanálů. Dnes se pokusíme připojit k grafické pracovní ploše na Linuxu pomocí RDP (Remote Desktop Protocol). Systém VNC je založen na přenosu políček pixelů prostřednictvím protokolu RFB (Remote Framebuffer), zatímco RDP umožňuje posílat složitější grafické primitiva a vysoce úrovňové příkazy. Obvykle se používá k organizaci služeb vzdálených pracovních ploch ve Windows, ale servery pro Linux jsou také k dispozici.
Obsah:
Instalace grafického prostředí
Vezmeme si virtuální stroj s Ubuntu Server 18.04 LTS se dvěma procesorovými jádry, čtyřmi gigabajty RAM a pevným diskem (HDD) o velikosti dvacet gigabajtů. Slabší konfigurace se špatně hodí pro grafickou plochu, i když to záleží na úlohách, které řešíte. Nezapomínejte používat promo kód Habrahabr10 pro získání 10% slevy při objednávce.

Instalace pracovního prostředí se všemi závislostmi se provádí následujícím příkazem:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsJak již bylo řečeno, vybrali jsme XFCE kvůli relativně nízkým požadavkům na výpočetní zdroje.
Čeština serveru a instalace software
Často se virtuální stroje rozbíhají pouze s anglickou lokalizací. Na ploše může být potřeba čeština, kterou není těžké nastavit. Nejprve nainstalujeme překlady systémových programů:
sudo apt-get install language-pack-csNastavíme lokalizaci:
sudo update-locale LANG=cs_CZ.UTF-8Téhož efektu lze dosáhnout úpravou souboru /etc/default/locale ručně.
Pro lokalizaci GNOME a KDE jsou v repozitáři k dispozici balíčky language-pack-gnome-cs a language-pack-kde-cs – budou potřebné, pokud budete používat programy z těchto prostředí desktopu. V XFCE se překlady instalují spolu s aplikacemi. Dále můžete nainstalovat slovníky:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictKromě toho může být instalace překladů nutná pro některé aplikace:
# Браузер 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 příprava desktopového prostředí dokončena, zbývá nastavit server RDP.
Instalace a nastavení serveru RDP
V repozitářích Ubuntu je dostupný server Xrdp, který využijeme:
sudo apt-get install xrdpPokud vše proběhlo správně, server by měl automaticky naběhnout:
sudo systemctl status xrdp 
Server Xrdp běží s právy uživatele xrdp a standardně používá certifikát /etc/ssl/private/ssl-cert-snakeoil.key, který lze nahradit vlastním. Pro přístup ke čtení souboru je třeba uživatele přidat do skupiny ssl-cert:
sudo adduser xrdp ssl-certVýchozí nastavení můžete nalézt v souboru /etc/default/xrdp, zatímco všechny ostatní konfigurační soubory serveru jsou umístěny v adresáři /etc/xrdp. Hlavní parametry se nacházejí v souboru xrdp.ini, který lze nechat beze změn. Konfigurace je dobře zdokumentována a navíc jsou k dispozici odpovídající manpages:
man xrdp.ini
man xrdpZbývá pouze upravit skript /etc/xrdp/startwm.sh, který se spouští při inicializaci uživatelské relace. Nejprve vytvoříme zálohu skriptu z distribuce:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shPro spuštění prostředí desktopu XFCE bude potřeba skript přibližně takovéhoto obsahu:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Všimněte si, že ve skriptech je lepší psát úplnou cestu k vykonávaným souborům — je to dobrý zvyk. Uděláme skript vykonavatelným a tímto můžeme považovat nastavení serveru Xrdp za ukončené:
sudo chmod 755 /etc/xrdp/startwm.shRestartujeme server:
sudo systemctl restart xrdp
Nastavení firewallu
Standardně Xrdp naslouchá na TCP portu 3389 na všech rozhraních. V závislosti na konfiguraci virtuálního serveru může být třeba nastavit firewall Netfilter. V Linuxu se to obvykle provádí pomocí nástroje iptables, ale v Ubuntu je lepší použít ufw. Pokud je známá IP adresa klienta, konfigurace se provádí následujícím příkazem:
sudo ufw allow from IP_Address to any port 3389Povolit spojení z jakéhokoliv IP lze takto:
sudo ufw allow 3389Protokol RDP podporuje šifrování, ale zpřístupnit server Xrdp z veřejných sítí — je špatný nápad. Pokud klient nemá pevnou IP adresu, pro zvýšení úrovně bezpečnosti by server měl naslouchat pouze na localhost. Přístup k němu je lepší nastavit přes SSH tunel, který bezpečně přesměruje provoz z klientského počítače. Podobný přístup jsme pro server VNC.
Připojení k serveru RDP
Pro práci s desktopovým prostředím je lepší vytvořit jednotlivého neprivilegovaného uživatele:
sudo adduser rdpuser 
Přidáme uživatele do skupiny sudo, aby mohl vyřešit administrativní úkoly. Pokud to není nutné, tento krok lze přeskočit:
sudo gpasswd -a rdpuser sudoK serveru se lze připojit pomocí jakéhokoli RDP klienta, včetně vestavěného klienta služby vzdálených pracovních ploch Windows. Pokud Xrdp poslouchá na externím rozhraní, nejsou potřeba žádné další kroky. Stačí zadat v nastavení připojení IP adresu VPS, uživatelské jméno a heslo. Po připojení uvidíme přibližně takový obraz:

Po počátečním nastavení pracovní plochy získáme plnohodnotný desktop. Jak vidíte, nezabírá to mnoho prostředků, i když vše bude záviset na používaných aplikacích.

Pokud server Xrdp poslouchá pouze na localhost, bude třeba na klientském počítači zabalit provoz do SSH tunelu (na VPS musí běžet sshd). Pod Windows lze použít grafického SSH klienta (například PuTTY), zatímco v UNIXových systémech je potřeba utilita ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipPo inicializaci tunelu se klient RDP nebude připojovat k vzdálenému serveru, ale k místnímu hostiteli.
S mobilními zařízeními je to složitější: klienti SSH schopní zřídit tunel si budete muset zakoupit, navíc na iOS a iPadOS je obtížné, aby běžely alternativní aplikace na pozadí kvůli příliš dobré optimalizaci spotřeby energie. Na iPhonu a iPadu nebude možné zřídit tunel v samostatné aplikaci – budete potřebovat aplikaci-kombinaci, která umí samostatně navázat připojení RDP přes SSH. Taková, například, jako .
Správce relací a relace uživatelů
Možnost víc uživatelské práce je realizována přímo v serveru Xrdp a nevyžaduje žádné dodatečné nastavení. Po spuštění služby přes systemd běží jeden proces v režimu démona, poslouchá na portu 3389 a komunikuje přes localhost s manažerem relací.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Manažer relací obvykle není uživatelům viditelný, protože nastavené v klientských nastaveních uživatelské jméno a heslo mu jsou automaticky předávány. Pokud k tomu nezapůsobilo, nebo pokud při ověřování nastala chyba, místo pracovní plochy se zobrazí interaktivní okno pro přihlášení.

Automatické spuštění manažera relací je zapsáno v souboru /etc/default/xrdp, a konfigurace je uložena v /etc/xrdp/sesman.ini. Ve výchozím stavu vypadá přibližně 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
; Když je AlwaysGroupCheck=false, bude přístup povolen
; pokud není definována skupina TerminalServerUsers.
AlwaysGroupCheck=false
[Sessions]Tady není třeba nic měnit, stačí zakázat přihlášení s právy root (AllowRootLogin=false). Pro každého uživatele, který se do systému autorizuje, se spustí samostatný proces xrdp: pokud se odpojí bez ukončení relace, uživatelské procesy budou ve výchozím nastavení pokračovat, a k relaci se bude možné znovu připojit. Nastavení lze změnit v souboru /etc/xrdp/sesman.ini (sekce [Sessions]).
Přepínání jazykových rozložení klávesnice
S obousměrným clipboardem obvykle nejsou problémy, ale s ruskou klávesnicí bude třeba trochu experimentovat (ruská lokalizace již ). Upravíme klávesové nastavení serveru Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniNa konec konfiguračního souboru je třeba přidat následující řádky:
[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,ruZbývá uložit soubor a restartovat Xrdp:
sudo systemctl restart xrdpJak vidíte, zprovoznit RDP server na linuxovém VPS není obtížné, a v už jsme probrali nastavení VNC. Kromě těchto technologií existuje ještě jedna zajímavá možnost: systém X2Go používající modifikovaný protokol NX 3. S tím se seznámíme v následujícím příspěvku.
Zdroj: habr.com
