В Vi har dækket at køre en VNC-server på enhver type virtuel maskine. Denne mulighed har mange ulemper, den vigtigste er de høje krav til båndbredden af datatransmissionskanaler. I dag vil vi forsøge at oprette forbindelse til et grafisk skrivebord på Linux via RDP (Remote Desktop Protocol). VNC-systemet er baseret på transmission af pixel-arrays via RFB (Remote Framebuffer)-protokollen, mens RDP tillader afsendelse af mere komplekse grafiske primitiver og kommandoer på højt niveau. Det bruges typisk til at hoste Remote Desktop Services på Windows, men servere til Linux er også tilgængelige.
Indholdsfortegnelse:
Installation af det grafiske miljø
Vi tager en virtuel maskine med Ubuntu Server 18.04 LTS med to computerkerner, fire gigabyte RAM og en tyve gigabyte harddisk (HDD). En svagere konfiguration er ikke velegnet til et grafisk skrivebord, selvom dette afhænger af opgaverne, der løses. Glem ikke at bruge kampagnekoden Habrahabr10 for at få 10% rabat på din ordre.

Installation af skrivebordsmiljøet med alle afhængigheder udføres med følgende kommando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsSom i det foregående tilfælde valgte vi XFCE på grund af dets relativt lave computerkrav.
Russificering af serveren og softwareinstallation
Ofte installeres virtuelle maskiner kun med engelsk lokalisering. På skrivebordet skal du muligvis bruge russisk, som er let at sætte op. Lad os først installere oversættelser til systemprogrammer:
sudo apt-get install language-pack-ruLad os konfigurere lokalisering:
sudo update-locale LANG=ru_RU.UTF-8Den samme effekt kan opnås ved manuelt at redigere /etc/default/locale.
Til lokalisering af GNOME og KDE har depotet pakkerne language-pack-gnome-ru og language-pack-kde-ru - du skal bruge dem, hvis du bruger programmer fra disse skrivebordsmiljøer. I XFCE er oversættelser installeret med applikationer. Dernæst kan du installere ordbøgerne:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictDerudover kan installation af oversættelser være påkrævet for nogle applikationsprogrammer:
# Браузер 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-ruDette fuldender forberedelsen af skrivebordsmiljøet, det eneste, der er tilbage, er at konfigurere RDP-serveren.
Installation og konfiguration af RDP-server
Der er en frit distribueret Xrdp-server i Ubuntu-lagrene, som vi vil bruge:
sudo apt-get install xrdpHvis alt gik godt, skulle serveren starte automatisk:
sudo systemctl status xrdp 
Xrdp-serveren kører med xrdp-brugerrettigheder og tager som standard certifikatet /etc/ssl/private/ssl-cert-snakeoil.key, som kan erstattes med dit eget. For at få adgang til filen for at læse, skal du tilføje brugeren til ssl-cert-gruppen:
sudo adduser xrdp ssl-certStandardindstillingerne kan findes i filen /etc/default/xrdp, og alle andre serverkonfigurationsfiler er placeret i mappen /etc/xrdp. Hovedparametrene er i filen xrdp.ini, som ikke skal ændres. Konfigurationen er veldokumenteret, og pakken inkluderer også de tilsvarende manpages:
man xrdp.ini
man xrdpDet eneste, der er tilbage, er at redigere scriptet /etc/xrdp/startwm.sh, som udføres, når brugersessionen initialiseres. Lad os først lave en sikkerhedskopi af scriptet fra distributionen:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shFor at starte XFCE-skrivebordsmiljøet skal du bruge et script, der ser sådan ud:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Bemærk venligst: det er bedre at skrive den fulde sti til eksekverbare filer i scripts - dette er en god vane. Lad os gøre scriptet eksekverbart, og dette fuldender Xrdp-serveropsætningen:
sudo chmod 755 /etc/xrdp/startwm.shGenstart serveren:
sudo systemctl restart xrdp
Opsætning af en firewall
Som standard lytter Xrdp på TCP-port 3389 på alle grænseflader. Afhængigt af din virtuelle serverkonfiguration skal du muligvis konfigurere Netfilter-firewallen. I Linux gøres dette normalt ved hjælp af iptables-værktøjet, men i Ubuntu er det bedre at bruge ufw. Hvis klientens IP-adresse er kendt, udføres konfigurationen med følgende kommando:
sudo ufw allow from IP_Address to any port 3389Du kan tillade forbindelser fra enhver IP som denne:
sudo ufw allow 3389RDP-protokollen understøtter kryptering, men at åbne adgang til Xrdp-serveren fra offentlige netværk er en dårlig idé. Hvis klienten ikke har en fast IP, bør serveren kun lytte på localhost for at forbedre sikkerheden. Det er bedre at konfigurere adgang til det gennem en SSH-tunnel, som sikkert vil omdirigere trafik fra klientcomputeren. Vi har en lignende tilgang til VNC server.
Opretter forbindelse til RDP-server
For at arbejde med skrivebordsmiljøet er det bedre at oprette en separat uprivilegeret bruger:
sudo adduser rdpuser 
Lad os tilføje brugeren til sudo-gruppen, så han kan udføre administrationsrelaterede opgaver. Hvis der ikke er et sådant behov, kan du springe dette trin over:
sudo gpasswd -a rdpuser sudoDu kan oprette forbindelse til serveren ved hjælp af enhver RDP-klient, inklusive den indbyggede Windows Remote Desktop Services-klient. Hvis Xrdp lytter på den eksterne grænseflade, kræves ingen yderligere trin. Det er nok at angive VPS IP-adressen, brugernavnet og adgangskoden i forbindelsesindstillingerne. Efter tilslutning vil vi se noget som dette:

Efter den indledende opsætning af skrivebordsmiljøet får vi et fuldgyldigt skrivebord. Som du kan se, bruger det ikke mange ressourcer, selvom alt i fremtiden vil afhænge af de anvendte applikationer.

Hvis Xrdp-serveren kun lytter til localhost, skal trafikken pakkes ind i en SSH-tunnel på klientcomputeren (sshd skal køre på VPS). På Windows kan du bruge en grafisk SSH-klient (for eksempel PuTTY), og på UNIX-systemer skal du bruge ssh-værktøjet:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipEfter at tunnelen er initialiseret, vil RDP-klienten ikke længere oprette forbindelse til fjernserveren, men til den lokale vært.
Det er mere kompliceret med mobile enheder: du bliver nødt til at købe SSH-klienter, der er i stand til at oprette en tunnel, og i iOS og iPadOS er baggrundsarbejde med tredjepartsapplikationer vanskeligt på grund af alt for god energiforbrugsoptimering. På iPhone og iPad vil du ikke være i stand til at oprette en tunnel i en separat applikation - du skal bruge en mejetærsker, der selv kan etablere en RDP-forbindelse via SSH. Som f.eks. .
Session Manager og brugersessioner
Muligheden for at arbejde med flere brugere er implementeret direkte i Xrdp-serveren og kræver ikke yderligere konfiguration. Efter at have startet tjenesten via systemd, kører en proces i dæmontilstand, lytter på port 3389 og kommunikerer via localhost med sessionsmanageren.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Sessionsmanageren er normalt ikke synlig for brugerne, fordi login og adgangskode, der er angivet i klientindstillingerne, overføres automatisk til den. Hvis dette ikke sker, eller der opstår en godkendelsesfejl, vises et interaktivt login-vindue i stedet for skrivebordet.

Automatisk start af sessionsmanageren er angivet i filen /etc/default/xrdp, og konfigurationen er gemt i /etc/xrdp/sesman.ini. Som standard ser det sådan ud:
[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]Du behøver ikke at ændre noget her, du skal blot forbyde login med root-rettigheder (AllowRootLogin=false). For hver bruger, der er logget på systemet, startes en separat xrdp-proces: Hvis du afbryder forbindelsen uden at afslutte sessionen, vil brugerprocesserne fortsætte med at køre som standard, og du kan genoprette forbindelsen til sessionen. Indstillingerne kan ændres i filen /etc/xrdp/sesman.ini (afsnit [Sessioner]).
Skift tastaturlayout
Der er normalt ingen problemer med to-vejs udklipsholderen, men med det russiske tastaturlayout bliver du nødt til at gøre noget magi (det russiske sprog burde allerede være ). Lad os redigere tastaturindstillingerne på Xrdp-serveren:
sudo nano /etc/xrdp/xrdp_keyboard.iniFølgende linjer skal tilføjes til slutningen af konfigurationsfilen:
[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 eneste, der er tilbage, er at gemme filen og genstarte Xrdp:
sudo systemctl restart xrdpSom du kan se, er det ikke svært at konfigurere en RDP-server på en Linux VPS, og i Vi har allerede dækket VNC-opsætning. Ud over disse teknologier er der en anden interessant mulighed: X3Go-systemet, som bruger en modificeret NX 2-protokol. Vi vil behandle det i næste publikation.
Kilde: www.habr.com
