В diskutovali jsme o spuštění serveru VNC na virtuálním počítači jakéhokoli typu. Tato možnost má řadu nevýhod, z nichž hlavní jsou vysoké požadavky na propustnost kanálů přenosu dat. Dnes se pokusíme připojit ke grafické ploše na Linuxu přes RDP (Remote Desktop Protocol). Systém VNC je založen na přenosu polí pixelů pomocí protokolu RFB (Remote Framebuffer) a RDP umožňuje posílat složitější grafická primitiva a příkazy na vysoké úrovni. Obvykle se používá k hostování Služeb vzdálené plochy v systému Windows, ale jsou k dispozici i servery pro Linux.
Obsah:
Instalace grafického prostředí
Vezmeme virtuální stroj s Ubuntu Server 18.04 LTS se dvěma výpočetními jádry, čtyřmi gigabajty RAM a dvacetigigabajtovým pevným diskem (HDD). Slabší konfigurace není vhodná pro grafický desktop, i když to závisí na řešených úlohách. Nezapomeňte použít promo kód Habrahabr10 pro získání 10% slevy na vaši objednávku.

Instalace desktopového prostředí se všemi závislostmi se provádí pomocí následujícího příkazu:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsStejně jako v předchozím případě jsme zvolili XFCE kvůli jeho relativně nízkým nárokům na výpočetní zdroje.
Rusifikace serveru a instalace softwaru
Často jsou virtuální stroje nasazeny pouze s anglickou lokalizací. Na ploše možná budete potřebovat ruštinu, která se snadno nastavuje. Nejprve nainstalujme překlady pro systémové programy:
sudo apt-get install language-pack-ruNastavíme lokalizaci:
sudo update-locale LANG=ru_RU.UTF-8Stejného efektu lze dosáhnout ruční úpravou souboru /etc/default/locale.
Pro lokalizaci GNOME a KDE má úložiště balíčky language-pack-gnome-ru a language-pack-kde-ru – budete je potřebovat, pokud používáte programy z těchto desktopových prostředí. V XFCE se překlady instalují 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-dictU některých aplikačních programů může být navíc vyžadována instalace překladů:
# Браузер 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ím je příprava desktopového prostředí dokončena, zbývá pouze nakonfigurovat RDP server.
Instalace a konfigurace serveru RDP
Repozitáře Ubuntu mají volně distribuovaný server Xrdp, který budeme používat:
sudo apt-get install xrdpPokud vše proběhlo v pořádku, server by se měl spustit automaticky:
sudo systemctl status xrdp 
Server Xrdp běží s uživatelskými právy xrdp a ve výchozím nastavení přebírá certifikát /etc/ssl/private/ssl-cert-snakeoil.key, který lze nahradit vaším vlastním. Chcete-li mít přístup ke čtení souboru, musíte uživatele přidat do skupiny ssl-cert:
sudo adduser xrdp ssl-certVýchozí nastavení lze nalézt v souboru /etc/default/xrdp a všechny ostatní konfigurační soubory serveru jsou umístěny v adresáři /etc/xrdp. Hlavní parametry jsou v souboru xrdp.ini, který není třeba měnit. Konfigurace je dobře zdokumentována a jsou zahrnuty odpovídající manuálové stránky:
man xrdp.ini
man xrdpZbývá pouze upravit skript /etc/xrdp/startwm.sh, který se spustí při inicializaci uživatelské relace. Nejprve si vytvořte záložní kopii skriptu z distribuce:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shChcete-li spustit desktopové prostředí XFCE, budete potřebovat skript něco takového:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Poznámka: ve skriptech je lepší napsat úplnou cestu ke spustitelným souborům - to je dobrý zvyk. Udělejme skript spustitelný a v tomto okamžiku lze nastavení serveru Xrdp považovat za dokončené:
sudo chmod 755 /etc/xrdp/startwm.shRestartujte server:
sudo systemctl restart xrdp
Konfigurace brány firewall
Ve výchozím nastavení Xrdp naslouchá TCP portu 3389 na všech rozhraních. V závislosti na konfiguraci virtuálního serveru může být nutné nakonfigurovat bránu firewall Netfilter. Na Linuxu se to obvykle provádí pomocí nástroje iptables, ale na Ubuntu je lepší použít ufw. Pokud je známa IP adresa klienta, konfigurace se provede pomocí následujícího příkazu:
sudo ufw allow from IP_Address to any port 3389Můžete povolit připojení z libovolné IP adresy, jako je tato:
sudo ufw allow 3389Protokol RDP podporuje šifrování, ale vystavení serveru Xrdp veřejným sítím je špatný nápad. Pokud klient nemá pevnou IP adresu, měl by server pro zvýšení zabezpečení naslouchat pouze localhost. Nejlepší je přistupovat k němu přes SSH tunel, který bezpečně přesměruje provoz z klientského počítače. Máme podobný přístup pro VNC server.
Připojení k serveru RDP
Pro práci s desktopovým prostředím je lepší vytvořit samostatného neprivilegovaného uživatele:
sudo adduser rdpuser 
Přidejme uživatele do skupiny sudo, aby mohl provádět úkoly související s administrací. Pokud taková potřeba není, můžete tento krok přeskočit:
sudo gpasswd -a rdpuser sudoK serveru se můžete připojit pomocí libovolného klienta RDP, včetně vestavěného klienta Windows Remote Desktop Services. Pokud Xrdp naslouchá externímu rozhraní, nebudou potřeba žádné další akce. V nastavení připojení stačí zadat VPS IP adresu, uživatelské jméno a heslo. Po připojení uvidíme něco takového:

Po prvotním nastavení desktopového prostředí získáme plnohodnotný desktop. Jak vidíte, nespotřebovává mnoho zdrojů, i když vše bude záviset na použitých aplikacích.

Pokud server Xrdp naslouchá pouze localhost, bude muset být provoz na klientském počítači zabalen do tunelu SSH (sshd musí běžet na VPS). V systému Windows můžete použít grafického klienta SSH (například PuTTY) a v systémech UNIX potřebujete nástroj ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipPo inicializaci tunelu se klient RDP již nebude připojovat ke vzdálenému serveru, ale k místnímu hostiteli.
S mobilními zařízeními je to složitější: SSH klienty schopné zvednout tunel bude nutné zakoupit a v iOS a iPadOS je provoz aplikací třetích stran na pozadí obtížný kvůli příliš dobré optimalizaci spotřeby energie. Na iPhonu a iPadu nebudete moci vytvořit tunel v samostatné aplikaci; budete potřebovat aplikaci harvester, která sama dokáže vytvořit připojení RDP přes SSH. Jako např .
Správce relací a uživatelské relace
Schopnost víceuživatelské práce je implementována přímo na serveru Xrdp a nevyžaduje další konfiguraci. Po spuštění služby přes systemd běží jeden proces v režimu démona, naslouchá na portu 3389 a komunikuje přes localhost se správcem relací.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Správce relací obvykle není pro uživatele viditelný, protože se do něj automaticky přenáší přihlašovací jméno a heslo zadané v nastavení klienta. Pokud se tak nestane nebo dojde k chybě při ověřování, objeví se místo plochy interaktivní přihlašovací okno.

Automatické spuštění správce relací je uvedeno v souboru /etc/default/xrdp a konfigurace je uložena v /etc/xrdp/sesman.ini. Ve výchozím nastavení to vypadá asi 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
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]Zde nemusíte nic měnit, stačí zakázat přihlášení s právy root (AllowRootLogin=false). Pro každého uživatele autorizovaného v systému je spuštěn samostatný proces xrdp: pokud se odpojíte bez ukončení relace, uživatelské procesy budou ve výchozím nastavení nadále běžet a vy se můžete k relaci znovu připojit. Nastavení lze změnit v souboru /etc/xrdp/sesman.ini (sekce [Sessions]).
Přepínání rozložení klávesnice
S obousměrnou schránkou obvykle nejsou žádné problémy, ale s ruským rozložením klávesnice si budete muset trochu pohrát (ruské národní prostředí by již mělo být ). Upravme nastavení klávesnice serveru Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniNa konec konfiguračního souboru musíte 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á pouze uložit soubor a restartovat Xrdp:
sudo systemctl restart xrdpJak vidíte, není těžké nastavit server RDP na Linux VPS, ale Nastavení VNC jsme již probrali. Kromě těchto technologií existuje ještě jedna zajímavá možnost: systém X3Go využívající upravený protokol NX 2. Budeme se jím zabývat v příští publikaci.
Zdroj: www.habr.com
