În Am discutat despre lansarea serverului VNC pe o mașină virtuală de orice tip. Această variantă are o mulțime de dezavantaje, dintre care cel mai important este cerințele ridicate de lățime de bandă a canalelor de transmitere a datelor. Astăzi, vom încerca să ne conectăm la desktop-ul grafic pe Linux prin RDP (Remote Desktop Protocol). Sistemul VNC se bazează pe transmiterea de matrice de pixeli prin protocolul RFB (Remote Framebuffer), iar RDP permite trimiterea de primitive grafice mai complexe și comenzi la nivel înalt. De obicei, este utilizat pentru organizarea serviciilor de desktop la distanță în Windows, dar servere pentru Linux sunt de asemenea disponibile.
Cuprins:
Instalarea mediului grafic
Vom lua o mașină virtuală cu Ubuntu Server 18.04 LTS cu două nuclee de procesor, patru gigabytes de memorie RAM și un hard disk (HDD) de douăzeci de gigabytes. O configurație mai slabă nu este potrivită pentru un desktop grafic, deși depinde de sarcinile rezolvate. Nu uitați să folosiți codul promoțional Habrahabr10 pentru a obține o reducere de 10% la comandă.

Instalarea mediului de birou cu toate dependențele se efectuează cu următoarea comandă:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsAșa cum am discutat anterior, am ales XFCE din cauza cerințelor relativ scăzute de resurse de calcul.
Localizarea serverului și instalarea software-ului
Adesea, mașinile virtuale sunt desfășurate doar cu localizare în limba engleză. Pe desktop ar putea fi necesară limba rusă, care nu este dificil de configurat. Mai întâi, vom instala traducerile pentru programele de sistem:
sudo apt-get install language-pack-roSă configurăm localizarea:
sudo update-locale LANG=ro_RO.UTF-8Același efect poate fi obținut editând manual fișierul /etc/default/locale.
Pentru localizarea GNOME și KDE există pachete în repository: language-pack-gnome-ro și language-pack-kde-ro — acestea vor fi necesare dacă veți folosi programe din aceste medii de birou. În XFCE, traducerile se instalează împreună cu aplicațiile. Apoi, putem instala dicționare:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictÎn plus, instalarea traducerilor poate fi necesară pentru unele aplicații:
# Браузер 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-ruAcum, pregătirea mediului desktop este completă, rămâne să configurăm serverul RDP.
Instalarea și configurarea serverului RDP
În repositoare Ubuntu există un server Xrdp distribuit liber, pe care îl vom folosi:
sudo apt-get install xrdpDacă totul a decurs bine, serverul ar trebui să se pornească automat:
sudo systemctl status xrdp 
Serverul Xrdp se pornește cu drepturile utilizatorului xrdp și, implicit, folosește certificatul /etc/ssl/private/ssl-cert-snakeoil.key, care poate fi înlocuit cu unul propriu. Pentru accesul la fișierul necesar citirii, trebuie să adăugați utilizatorul în grupul ssl-cert:
sudo adduser xrdp ssl-certSetările implicite pot fi găsite în fișierul /etc/default/xrdp, iar toate celelalte fișiere de configurație ale serverului se află în directorul /etc/xrdp. Parametrii principali se află în fișierul xrdp.ini, care nu trebuie modificat. Configurația este bine documentată, iar în plus există manpages corespunzătoare:
man xrdp.ini
man xrdpEste doar nevoie să edităm scriptul /etc/xrdp/startwm.sh, care este executat la inițializarea sesiunii utilizatorului. În prealabil, să facem o copie de rezervă a scriptului din distribuție:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shPentru a lansa mediu desktop XFCE, va fi necesar un scenariu cam de acest conținut:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Rețineți: în scripturi este bine să specificați calea completă către executabile — acesta este un obicei bun. Să facem scriptul executabil, iar configurația serverului Xrdp poate fi considerată completă:
sudo chmod 755 /etc/xrdp/startwm.shReporniți serverul:
sudo systemctl restart xrdp
Configurarea firewall-ului
În mod implicit, Xrdp ascultă pe portul TCP 3389 pe toate interfețele. În funcție de configurația serverului virtual, ar putea fi necesară configurarea firewall-ului Netfilter. În Linux, acest lucru se face de obicei cu ajutorul utilitarului iptables, dar în Ubuntu este mai bine să folosiți ufw. Dacă adresa IP a clientului este cunoscută, se face configurarea cu următoarea comandă:
sudo ufw allow from IP_Address to any port 3389Pentru a permite conexiuni din orice IP, se poate face astfel:
sudo ufw allow 3389Protocolul RDP suportă criptarea, dar deschiderea accesului la serverul Xrdp din rețele publice nu este o idee bună. Dacă clientul nu are o adresă IP fixă, pentru a spori securitatea, serverul ar trebui să asculte doar pe localhost. Accesul la el ar trebui să fie configurat printr-un tunel SSH, care redirecționează în siguranță traficul de pe computerul clientului. O abordare similară am pentru serverul VNC.
Conectarea la serverul RDP
Pentru a lucra cu mediu desktop, este mai bine să creați un utilizator neprivilegiat separat:
sudo adduser rdpuser 
Să adăugăm utilizatorul în grupul sudo, astfel încât să poată rezolva sarcinile de administrare. Dacă nu este nevoie, acest pas poate fi sărit:
sudo gpasswd -a rdpuser sudoVă puteți conecta la server folosind orice client RDP, inclusiv clientul încorporat al serviciului Remote Desktop Windows. Dacă Xrdp ascultă pe interfața externă, nu sunt necesare alte acțiuni suplimentare. Este suficient să specificați în setările de conexiune adresa IP a VPS-ului, numele utilizatorului și parola. După conectare, vom vedea o imagine asemănătoare:

După configurarea inițială a mediu desktop, vom obține un desktop complet funcțional. Așa cum vedeți, acesta consumă destul de puține resurse, deși ulterior totul va depinde de aplicațiile utilizate.

Dacă serverul Xrdp ascultă doar pe localhost, traficul de pe computerul client va trebui să fie ambalat într-un tunel SSH (sshd trebuie să fie activat pe VPS). Pe Windows, se poate folosi un client grafic SSH (de exemplu, PuTTY), iar în sistemele UNIX este necesară utilitarul ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipDupă inițializarea tunelului, clientul RDP se va conecta nu la serverul îndepărtat, ci la gazda locală.
Cu dispozitivele mobile este mai complicat: clienți SSH capabili să stabilească un tunel trebuie achiziționați, plus că în iOS și iPadOS, funcționarea în fundal a aplicațiilor terțe este îngreunată din cauza optimizării excelente a consumului de energie. Pe iPhone și iPad, nu se poate stabili un tunel într-o aplicație separată — este necesară o aplicație combinată, care poate stabili singură conexiunea RDP prin SSH. Un exemplu de astfel de aplicație este .
Manager de sesiuni și sesiuni de utilizatori
Funcția de lucru multi-utilizator este implementată direct în serverul Xrdp și nu necesită configurări suplimentare. După ce serviciul este pornit prin systemd, un proces funcționează în modul demon, ascultând pe portul 3389 și interacționând prin localhost cu managerul de sesiuni.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Managerul de sesiuni nu este vizibil pentru utilizatori, deoarece login-ul și parola specificate în setările clientului sunt transmise automat. Dacă acest lucru nu s-a întâmplat sau a apărut o eroare de autentificare, în locul desktop-ului va apărea o fereastră interactivă pentru conectare.

Autostart-ul managerului de sesiuni este specificat în fișierul /etc/default/xrdp, iar configurația este stocată în /etc/xrdp/sesman.ini. În mod implicit, acesta arată cam așa:
[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
; Când AlwaysGroupCheck=false, accesul va fi permis
; dacă grupul TerminalServerUsers nu este definit.
AlwaysGroupCheck=false
[Sessions]Aici nu este necesar să schimbați nimic, trebuie doar să interziceți conectarea cu drepturi root (AllowRootLogin=false). Pentru fiecare utilizator autorizat în sistem, se pornește un proces xrdp separat: dacă se deconectează fără a încheia sesiunea, procesele utilizatorilor vor continua să funcționeze în mod implicit, iar utilizatorul se va putea reconecta la sesiune. Setările pot fi modificate în fișierul /etc/xrdp/sesman.ini (secțiunea [Sessions]).
Schimbarea layout-ului tastaturii
În general, problemele cu clipboard-ul bidirecțional nu apar, dar va trebui să ajustați puțin setările pentru tastatura în limba rusă (localea rusă ar trebui să fie deja ). Să edităm setările tastaturii serverului Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniLa finalul fișierului de configurare, trebuie să adăugăm următoarele linii:
[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,ruTrebuie să salvăm fișierul și să repornim Xrdp:
sudo systemctl restart xrdpDupă cum vedeți, ridicarea unui server RDP pe un VPS cu Linux nu este complicată, iar în am analizat deja setările VNC. Pe lângă aceste tehnologii, există o altă opțiune interesantă: sistemul X2Go, care folosește un protocol NX 3 modificat. Cu acesta ne vom ocupa în următoarea publicație.
Sursa: habr.com
