I Vi har genomgått lanseringen av en VNC-server på en virtuell maskin av vilken typ som helst. Denna metod har många nackdelar, varav den främsta är höga krav på bandbredden för datatrafik. Idag kommer vi att försöka ansluta till en grafisk skrivbordsmiljö på Linux via RDP (Remote Desktop Protocol). VNC-systemet bygger på att överföra pixlar via RFB (Remote Framebuffer) protocol, medan RDP möjliggör att skicka mer komplexa grafiska primitiva och högre nivå kommandon. Det används vanligtvis för att organisera fjärrskrivbordstjänster i Windows, men servrar för Linux finns också tillgängliga.
Innehåll:
Installation av grafiskt gränssnitt
Vi kommer att ta en virtuell maskin med Ubuntu Server 18.04 LTS med två kärnor, fyra gigabyte RAM och en hårddisk (HDD) på tjugo gigabyte. En svagare konfiguration passar dåligt för grafiska skrivbord, även om detta beror på de uppgifter som ska utföras. Glöm inte att använda kampanjkoden Habrahabr10 för att få 10% rabatt vid beställning.

Installation av skrivbordsmiljön med alla beroenden utförs med följande kommando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsSom i föregående fall har vi valt XFCE på grund av dess relativt låga krav på beräkningsresurser.
Lokalisering av servern och installation av programvara
Ofta distribueras virtuella maskiner endast med engelsk lokalisering. Skrivbordet kan behöva rysk, vilket är enkelt att konfigurera. Först installerar vi översättningarna för systemprogrammen:
sudo apt-get install language-pack-ruLåt oss ställa in lokaliseringen:
sudo update-locale LANG=ru_RU.UTF-8Samme effekt kan uppnås genom att redigera filen /etc/default/locale manuellt.
För lokalisering av GNOME och KDE finns det paket i arkivet language-pack-gnome-ru och language-pack-kde-ru — de kommer att behövas om du ska använda program från dessa skrivbordsmiljöer. I XFCE installeras översättningar tillsammans med applikationerna. Därefter kan du installera ordböcker:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictDessutom kan installation av översättningar krävas för vissa applikationer:
# Браузер 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-ruFörberedelserna för skrivbordsmiljön är nu klara, det återstår att konfigurera RDP-servern.
Installation och konfiguration av RDP-server
I Ubuntu-repositories har vi en fritt distribuerad server Xrdp, som vi kommer att utnyttja:
sudo apt-get install xrdpOm allt går bra ska servern starta automatiskt:
sudo systemctl status xrdp 
Xrdp-servern startar med användaren xrdp:s rättigheter och hämtar som standard ett certifikat från /etc/ssl/private/ssl-cert-snakeoil.key, vilket kan bytas ut mot ett eget. För att ge läsåtkomst till filen behöver vi lägga till användaren i ssl-cert gruppen:
sudo adduser xrdp ssl-certStandardinställningar finns i filen /etc/default/xrdp, medan alla andra konfigurationsfiler för servern ligger i katalogen /etc/xrdp. De viktigaste parametrarna finns i xrdp.ini-filen, som kan lämnas oförändrad. Konfigurationen är väl dokumenterad och det finns dessutom relevanta man-sidor:
man xrdp.ini
man xrdpDet återstår bara att redigera skriptet /etc/xrdp/startwm.sh, som utförs vid initialiseringen av användarsessionen. Först gör vi en säkerhetskopiering av skriptet från distributionen:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shFör att starta XFCE-skrivbordsmiljön behöver vi ett skript med ungefär följande innehåll:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Observera: I skripten är det bättre att ange den fullständiga sökvägen till exekverbara filer — det är en bra vana. Gör skriptet exekverbart och vi kan betrakta konfigurationen av Xrdp-servern som färdig:
sudo chmod 755 /etc/xrdp/startwm.shStarta om servern:
sudo systemctl restart xrdp
Konfiguration av brandväggen
Som standard lyssnar Xrdp på TCP-port 3389 på alla gränssnitt. Beroende på konfigurationen av den virtuella servern kan det vara nödvändigt att konfigurera brandväggen Netfilter. I Linux görs detta vanligtvis med hjälp av verktyget iptables, men i Ubuntu är det bättre att använda ufw. Om klientens IP-adress är känd, görs konfigurationen med följande kommando:
sudo ufw allow from IP_Address to any port 3389För att tillåta anslutningar från vilken IP som helst kan man göra så här:
sudo ufw allow 3389RDP-protokollet stöder kryptering, men att öppna åtkomst till Xrdp-servern från offentliga nätverk är en dålig idé. Om klienten inte har en fast IP-adress, bör servern för ökad säkerhet bara lyssna på localhost. Åtkomsten är bättre att ställa in via en SSH-tunnel, vilket säkert omdirigerar trafiken från klientens dator. En liknande metod använde vi för VNC-servern.
Anslutning till RDP-servern
För att arbeta med skrivbordsmiljön är det bättre att skapa en separat icke-privilegierad användare:
sudo adduser rdpuser 
Vi lägger till användaren i sudo-gruppen så att han kan hantera administrativa uppgifter. Om det inte finns något behov av detta kan detta steg hoppas över:
sudo gpasswd -a rdpuser sudoDu kan ansluta till servern med valfri RDP-klient, inklusive den inbyggda klienten för Windows fjärrskrivbordsservice. Om Xrdp lyssnar på det externa gränssnittet behövs inga ytterligare åtgärder. Det räcker med att ange VPS IP-adress, användarnamn och lösenord i anslutningsinställningarna. Efter anslutning kommer vi att se en skärm som ungefär ser ut så här:

Efter den första konfigurationen av skrivbordsmiljön kommer vi att få en fullständig skrivbordsupplevelse. Som du ser, använder den inte så mycket resurser, även om det kommer att bero på de använda applikationerna.

Om servern Xrdp endast lyssnar på localhost måste trafiken på klientdatorn paketeras i en SSH-tunnel (sshd måste vara aktiverat på VPS:en). På Windows kan man använda en grafisk SSH-klient (till exempel PuTTY), medan UNIX-system kräver verktyget ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipEfter att tunneln har initierats kommer RDP-klienten att ansluta till den lokala värden istället för den fjärranslutna servern.
Med mobila enheter är det mer komplicerat: klienter som kan upprätta en tunnel via SSH måste köpas, dessutom är bakgrundsarbete för tredjepartsprogram svårt på iOS och iPadOS på grund av alltför bra energihantering. På iPhone och iPad går det inte att upprätta en tunnel i en separat app — en kombinationsapp krävs, som själv kan upprätta en RDP-anslutning via SSH. Till exempel: .
Sessionshanterare och användarsessioner
Möjligheten till fleranvändararbete är inbyggd i Xrdp-servern och kräver ingen ytterligare inställning. Efter att tjänsten har startats via systemd arbetar en process i demonläge, lyssnar på port 3389 och interagerar med sessionshanteraren via localhost.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Sessionshanteraren är vanligtvis osynlig för användarna, eftersom inloggningsnamnet och lösenordet som angetts i klientinställningarna skickas automatiskt till den. Om detta inte har skett eller om ett autentiseringsfel uppstod, visas istället ett interaktivt fönster för inloggning istället för skrivbordet.

Den automatiska starten av sessionshanteraren finns angiven i filen /etc/default/xrdp, och konfigurationen lagras i /etc/xrdp/sesman.ini. Som standard ser den ut ungefär så här:
[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
; När AlwaysGroupCheck=false tillåts åtkomst
; om gruppen TerminalServerUsers inte är definierad.
AlwaysGroupCheck=false
[Sessions]Här kan ingenting ändras, bara inloggning med root-rättigheter (AllowRootLogin=false) bör förbjudas. För varje användare som loggar in i systemet startas en separat xrdp-process: om man kopplar bort utan att avsluta sessionen fortsätter användarprocesserna som standard att köra, och man kan koppla upp sig igen till sessionen. Inställningar kan ändras i filen /etc/xrdp/sesman.ini (sektionen [Sessions]).
Byta tangentbordslayouter
Med tvåvägs urklipp uppstår vanligtvis inga problem, men med den ryska tangentbordslayouten måste vi jobba lite (den ryska lokalversionen måste redan ). Låt oss redigera tangentbordsinställningarna för Xrdp-servern:
sudo nano /etc/xrdp/xrdp_keyboard.iniI slutet av konfigurationsfilen behöver vi lägga till följande rader:
[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,ruDet återstår att spara filen och starta om Xrdp:
sudo systemctl restart xrdpSom ni ser är det inte svårt att starta en RDP-server på en Linux VPS, och i har vi redan gått igenom konfigurationen av VNC. Förutom dessa teknologier finns det en intressant alternativ: ett system X2Go som använder ett modifierat protokoll NX 3. Den kommer vi att utforska i nästa publikation.
Källa: habr.com
