В We hebben besproken hoe u een VNC-server op elk type virtuele machine kunt draaien. Deze optie kent veel nadelen, waarvan de belangrijkste de hoge eisen aan de bandbreedte van de gegevensoverdrachtkanalen zijn. Vandaag proberen we verbinding te maken met een grafisch bureaublad op Linux via RDP (Remote Desktop Protocol). Het VNC-systeem is gebaseerd op de transmissie van pixelarrays via het RFB-protocol (Remote Framebuffer), terwijl RDP het verzenden van complexere grafische primitieven en hoogwaardige opdrachten mogelijk maakt. Het wordt meestal gebruikt om Remote Desktop Services op Windows te hosten, maar er zijn ook servers voor Linux beschikbaar.
авление:
Een grafische omgeving installeren
We gebruiken een virtuele machine met Ubuntu Server 18.04 LTS met twee rekenkernen, vier gigabyte RAM en een harde schijf (HDD) van twintig gigabyte. Een zwakkere configuratie is niet zo geschikt voor een grafisch bureaublad, hoewel dit afhankelijk is van de taken die moeten worden uitgevoerd. Vergeet niet de promotiecode Habrahabr10 te gebruiken om 10% korting op uw bestelling te krijgen.

De installatie van de desktopomgeving met alle afhankelijkheden wordt uitgevoerd met de volgende opdracht:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsNet als in het vorige geval hebben we gekozen voor XFCE vanwege de relatief lage computervereisten.
Russificatie van de server- en software-installatie
Vaak worden virtuele machines alleen met Engelse lokalisatie geïmplementeerd. Op het bureaublad heeft u mogelijk Russisch nodig, maar dit is eenvoudig in te stellen. Laten we eerst vertalingen voor systeemprogramma's installeren:
sudo apt-get install language-pack-ruLaten we de lokalisatie instellen:
sudo update-locale LANG=ru_RU.UTF-8U kunt hetzelfde effect bereiken door het bestand /etc/default/locale handmatig te bewerken.
Voor de lokalisatie van GNOME en KDE bevat de repository de pakketten language-pack-gnome-ru en language-pack-kde-ru. Deze hebt u nodig als u programma's uit deze desktopomgevingen wilt gebruiken. In XFCE worden vertalingen samen met applicaties geïnstalleerd. Vervolgens kunt u de woordenboeken installeren:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictBovendien kan het voor sommige toepassingen nodig zijn om vertalingen te installeren:
# Браузер 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-ruHiermee is de voorbereiding van de desktopomgeving voltooid. Het enige dat nog resteert, is het configureren van de RDP-server.
RDP-server installeren en configureren
Er is een gratis verspreide Xrdp-server in de Ubuntu-repositories, die we zullen gebruiken:
sudo apt-get install xrdpAls alles goed is gegaan, zou de server automatisch moeten starten:
sudo systemctl status xrdp 
De Xrdp-server draait met Xrdp-gebruikersrechten en gebruikt standaard het certificaat /etc/ssl/private/ssl-cert-snakeoil.key, dat u kunt vervangen door uw eigen certificaat. Om het bestand te kunnen lezen, moet u de gebruiker toevoegen aan de groep ssl-cert:
sudo adduser xrdp ssl-certDe standaardinstellingen vindt u in het bestand /etc/default/xrdp. Alle andere serverconfiguratiebestanden bevinden zich in de map /etc/xrdp. De belangrijkste parameters staan in het bestand xrdp.ini en hoeven niet te worden gewijzigd. De configuratie is goed gedocumenteerd en het pakket bevat ook de bijbehorende manpagina's:
man xrdp.ini
man xrdpHet enige dat nog rest is het bewerken van het script /etc/xrdp/startwm.sh, dat wordt uitgevoerd wanneer de gebruikersessie wordt geïnitialiseerd. Laten we eerst een back-up maken van het script vanuit de distributie:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shOm de XFCE-desktopomgeving te starten, hebt u een script nodig dat er ongeveer zo uitziet:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Let op: het is beter om het volledige pad naar uitvoerbare bestanden in scripts te schrijven. Dit is een goede gewoonte. Laten we het script uitvoerbaar maken. Hiermee is de Xrdp-serverinstallatie voltooid:
sudo chmod 755 /etc/xrdp/startwm.shStart de server opnieuw:
sudo systemctl restart xrdp
Een firewall instellen
Standaard luistert Xrdp op TCP-poort 3389 op alle interfaces. Afhankelijk van de configuratie van uw virtuele server moet u mogelijk de Netfilter-firewall configureren. In Linux wordt dit meestal gedaan met het hulpprogramma iptables, maar in Ubuntu is het beter om ufw te gebruiken. Als het IP-adres van de client bekend is, wordt de configuratie uitgevoerd met de volgende opdracht:
sudo ufw allow from IP_Address to any port 3389U kunt verbindingen vanaf elk IP-adres toestaan, zoals hieronder:
sudo ufw allow 3389Het RDP-protocol ondersteunt encryptie, maar het is geen goed idee om toegang tot de Xrdp-server te verlenen vanaf openbare netwerken. Als de client geen vast IP-adres heeft, moet de server alleen op localhost luisteren om de beveiliging te verbeteren. Het is beter om de toegang te configureren via een SSH-tunnel, die het verkeer van de clientcomputer veilig omleidt. Wij hanteren een soortgelijke aanpak voor VNC-server.
Verbinding maken met RDP-server
Om met de desktopomgeving te werken, is het beter om een aparte, niet-bevoorrechte gebruiker aan te maken:
sudo adduser rdpuser 
Laten we de gebruiker toevoegen aan de sudo-groep, zodat hij beheertaken kan uitvoeren. Als dit niet nodig is, kunt u deze stap overslaan:
sudo gpasswd -a rdpuser sudoU kunt verbinding maken met de server via elke RDP-client, inclusief de ingebouwde Windows Remote Desktop Services-client. Als Xrdp luistert op de externe interface, zijn er geen extra stappen nodig. Het volstaat om het VPS IP-adres, de gebruikersnaam en het wachtwoord in de verbindingsinstellingen op te geven. Nadat we verbinding hebben gemaakt, zien we zoiets:

Na de eerste installatie van de desktopomgeving krijgen we een volwaardig bureaublad. Zoals u kunt zien, verbruikt het niet veel bronnen, maar verder hangt alles af van de applicaties die u gebruikt.

Als de Xrdp-server alleen naar localhost luistert, moet het verkeer in een SSH-tunnel op de clientcomputer worden verpakt (sshd moet op de VPS draaien). Op Windows kunt u een grafische SSH-client gebruiken (bijvoorbeeld PuTTY), en op UNIX-systemen hebt u het ssh-hulpprogramma nodig:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipNadat de tunnel is geïnitialiseerd, maakt de RDP-client geen verbinding meer met de externe server, maar met de lokale host.
Bij mobiele apparaten is het ingewikkelder: je moet SSH-clients kopen die een tunnel kunnen opzetten. Bovendien is het in iOS en iPadOS lastig om op de achtergrond met applicaties van derden te werken, omdat het energieverbruik te goed is geoptimaliseerd. Op iPhone en iPad kun je geen tunnel opzetten in een aparte applicatie. Je hebt een gecombineerde applicatie nodig die zelf een RDP-verbinding via SSH kan opzetten. Zoals bijvoorbeeld .
Sessiebeheerder en gebruikersessies
De mogelijkheid om met meerdere gebruikers te werken is rechtstreeks in de Xrdp-server geïmplementeerd en vereist geen aanvullende configuratie. Nadat de service via systemd is gestart, draait één proces in daemon-modus, luistert op poort 3389 en communiceert via localhost met de sessiebeheerder.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
De sessiemanager is doorgaans niet zichtbaar voor gebruikers, omdat de in de clientinstellingen opgegeven login en wachtwoord automatisch naar de sessiemanager worden overgebracht. Als dit niet gebeurt of er treedt een authenticatiefout op, verschijnt er een interactief inlogvenster in plaats van het bureaublad.

Het automatisch starten van de sessiemanager wordt gespecificeerd in het bestand /etc/default/xrdp, en de configuratie wordt opgeslagen in /etc/xrdp/sesman.ini. Standaard ziet het er ongeveer zo uit:
[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]U hoeft hier niets te veranderen, u hoeft alleen maar inloggen met root-rechten te verbieden (AllowRootLogin=false). Voor elke gebruiker die op het systeem is aangemeld, wordt een afzonderlijk xrdp-proces gestart. Als u de verbinding verbreekt zonder de sessie te beëindigen, blijven de gebruikersprocessen standaard actief en kunt u opnieuw verbinding maken met de sessie. De instellingen kunnen worden gewijzigd in het bestand /etc/xrdp/sesman.ini (sectie [Sessies]).
Toetsenbordindelingen wijzigen
Er zijn doorgaans geen problemen met het tweerichtingsklembord, maar met de Russische toetsenbordindeling moet u wat magie toepassen (de Russische landinstelling zou al moeten zijn ingesteld). ). Laten we de toetsenbordinstellingen van de Xrdp-server bewerken:
sudo nano /etc/xrdp/xrdp_keyboard.iniDe volgende regels moeten aan het einde van het configuratiebestand worden toegevoegd:
[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,ruHet enige dat nu nog rest is het opslaan van het bestand en het opnieuw opstarten van Xrdp:
sudo systemctl restart xrdpZoals u kunt zien, is het opzetten van een RDP-server op een Linux VPS niet moeilijk en in We hebben de VNC-installatie al besproken. Naast deze technologieën is er nog een interessante optie: het X3Go-systeem, dat gebruikmaakt van een aangepast NX 2-protocol. Wij zullen hier in de volgende publicatie op ingaan.
Bron: www.habr.com
