В Wir haben bereits die Einrichtung eines VNC-Servers auf beliebigen virtuellen Maschinen behandelt. Diese Option hat viele Nachteile, der wichtigste ist der hohe Bandbreitenbedarf für die Datenübertragung. Heute versuchen wir, eine Verbindung zu einem grafischen Desktop herzustellen. Linux via RDP (Remote Desktop Protocol). Das VNC-System basiert auf der Übertragung von Pixelarrays über das RFB-Protokoll (Remote Framebuffer), während RDP die Übertragung komplexerer grafischer Elemente und Befehle höherer Ebene ermöglicht. Es wird typischerweise zur Organisation von Remote-Desktop-Diensten verwendet. Windows, aber die Server für Linux auch verfügbar.
Table of Contents:
Installieren der grafischen Umgebung
Wir werden eine virtuelle Maschine verwenden mit Ubuntu Server 18.04 LTS mit zwei Prozessorkernen, vier Gigabyte RAM und einer 20-Gigabyte-Festplatte (HDD). Eine schwächere Konfiguration ist für einen grafikintensiven Desktop-PC nicht geeignet, dies hängt jedoch von der jeweiligen Anwendung ab. Vergessen Sie nicht, den Aktionscode Habrahabr10 für 10 % Rabatt auf Ihre Bestellung zu verwenden.

Die Installation der Desktop-Umgebung mit allen Abhängigkeiten erfolgt mit dem folgenden Befehl:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsWie im vorherigen Fall haben wir uns aufgrund des relativ geringen Bedarfs an Rechenressourcen für XFCE entschieden.
Russifizierung der Server- und Softwareinstallation
Häufig werden virtuelle Maschinen nur mit englischer Lokalisierung bereitgestellt. Auf dem Desktop benötigen Sie möglicherweise Russisch, was einfach einzurichten ist. Lassen Sie uns zunächst Übersetzungen für Systemprogramme installieren:
sudo apt-get install language-pack-ruLassen Sie uns die Lokalisierung einrichten:
sudo update-locale LANG=ru_RU.UTF-8Der gleiche Effekt kann durch manuelles Bearbeiten von /etc/default/locale erzielt werden.
Für die Lokalisierung von GNOME und KDE verfügt das Repository über die Pakete language-pack-gnome-ru und language-pack-kde-ru – Sie benötigen diese, wenn Sie Programme aus diesen Desktop-Umgebungen verwenden. In XFCE werden Übersetzungen mit Anwendungen installiert. Als nächstes können Sie die Wörterbücher installieren:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictDarüber hinaus kann für einige Anwendungsprogramme die Installation von Übersetzungen erforderlich sein:
# Браузер 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-ruDamit ist die Vorbereitung der Desktop-Umgebung abgeschlossen, es bleibt nur noch die Konfiguration des RDP-Servers.
Installieren und Konfigurieren eines RDP-Servers
In Repositories Ubuntu Es gibt einen frei verfügbaren Xrdp-Server, den wir verwenden werden:
sudo apt-get install xrdpWenn alles gut gelaufen ist, sollte der Server automatisch starten:
sudo systemctl status xrdp 
Der Xrdp-Server läuft mit xrdp-Benutzerrechten und verwendet standardmäßig das Zertifikat /etc/ssl/private/ssl-cert-snakeoil.key, das durch Ihr eigenes ersetzt werden kann. Um Zugriff zum Lesen der Datei zu haben, müssen Sie den Benutzer zur Gruppe ssl-cert hinzufügen:
sudo adduser xrdp ssl-certDie Standardeinstellungen finden Sie in der Datei /etc/default/xrdp und alle anderen Serverkonfigurationsdateien befinden sich im Verzeichnis /etc/xrdp. Die Hauptparameter befinden sich in der Datei xrdp.ini, die nicht geändert werden muss. Die Konfiguration ist gut dokumentiert und die entsprechenden Manpages sind enthalten:
man xrdp.ini
man xrdpEs bleibt nur noch die Bearbeitung des Skripts /etc/xrdp/startwm.sh, das bei der Initialisierung der Benutzersitzung ausgeführt wird. Erstellen wir zunächst eine Sicherungskopie des Skripts aus der Distribution:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shUm die XFCE-Desktopumgebung zu starten, benötigen Sie ein Skript wie dieses:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Bitte beachten Sie: In Skripten ist es besser, den vollständigen Pfad zu den ausführbaren Dateien zu schreiben – das ist eine gute Angewohnheit. Machen wir das Skript ausführbar und an diesem Punkt kann die Einrichtung des Xrdp-Servers als abgeschlossen betrachtet werden:
sudo chmod 755 /etc/xrdp/startwm.shStarten Sie den Server neu:
sudo systemctl restart xrdp
Einrichten einer Firewall
Standardmäßig lauscht Xrdp auf TCP-Port 3389 auf allen Schnittstellen. Je nach Konfiguration des virtuellen Servers müssen Sie möglicherweise die Netfilter-Firewall konfigurieren. Linux Dies geschieht üblicherweise mithilfe des iptables-Dienstprogramms, aber in Ubuntu Es ist besser, ufw zu verwenden. Wenn die IP-Adresse des Clients bekannt ist, kann der folgende Befehl zur Konfiguration verwendet werden:
sudo ufw allow from IP_Address to any port 3389Sie können Verbindungen von jeder IP wie folgt zulassen:
sudo ufw allow 3389Das RDP-Protokoll unterstützt die Verschlüsselung, aber es ist keine gute Idee, den Xrdp-Server öffentlichen Netzwerken zugänglich zu machen. Wenn der Client keine feste IP hat, sollte der Server zur Erhöhung der Sicherheit nur auf localhost lauschen. Der Zugriff erfolgt am besten über einen SSH-Tunnel, der den Datenverkehr vom Client-Computer sicher umleitet. Wir haben einen ähnlichen Ansatz für VNC-Server.
Verbindung zu einem RDP-Server herstellen
Um mit der Desktop-Umgebung zu arbeiten, ist es besser, einen separaten unprivilegierten Benutzer zu erstellen:
sudo adduser rdpuser 
Fügen wir den Benutzer zur Sudo-Gruppe hinzu, damit er verwaltungsbezogene Aufgaben ausführen kann. Wenn kein Bedarf besteht, können Sie diesen Schritt überspringen:
sudo gpasswd -a rdpuser sudoSie können sich mit jedem RDP-Client mit dem Server verbinden, einschließlich des integrierten Remotedesktopdienste-Clients. WindowsWenn Xrdp auf der externen Schnittstelle lauscht, sind keine weiteren Maßnahmen erforderlich. Geben Sie einfach die IP-Adresse, den Benutzernamen und das Passwort des VPS in den Verbindungseinstellungen ein. Nach erfolgreicher Verbindung wird Ihnen etwa Folgendes angezeigt:

Nach der Ersteinrichtung der Desktop-Umgebung erhalten wir einen vollwertigen Desktop. Wie Sie sehen, verbraucht es nicht viele Ressourcen, obwohl alles von den verwendeten Anwendungen abhängt.

Wenn der Xrdp-Server nur auf localhost lauscht, muss der Datenverkehr auf dem Client-Computer in einen SSH-Tunnel gepackt werden (sshd muss auf dem VPS laufen). Windows Sie können einen grafischen SSH-Client (z. B. PuTTY) verwenden, aber auf UNIX-Systemen benötigen Sie das ssh-Dienstprogramm:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipNachdem der Tunnel initialisiert wurde, verbindet sich der RDP-Client nicht mehr mit dem Remote-Server, sondern mit dem lokalen Host.
Bei Mobilgeräten ist die Sache komplizierter: SSH-Clients, die einen Tunnel aufbauen können, müssen erworben werden, und unter iOS und iPadOS wird der Hintergrundbetrieb von Drittanbieteranwendungen durch eine übermäßig gute Energieoptimierung beeinträchtigt. iPhone Sie können auf einem iPad keinen Tunnel mit einer separaten App einrichten – Sie benötigen eine kombinierte App, die eine RDP-Verbindung über SSH herstellen kann. Zum Beispiel: .
Sitzungsmanager und Benutzersitzungen
Die Fähigkeit zum Mehrbenutzer-Arbeiten ist direkt im Xrdp-Server implementiert und erfordert keine zusätzliche Konfiguration. Nach dem Starten des Dienstes über systemd läuft ein Prozess im Daemon-Modus, lauscht auf Port 3389 und kommuniziert über localhost mit dem Sitzungsmanager.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Der Sitzungsmanager ist für Benutzer normalerweise nicht sichtbar, da der in den Client-Einstellungen angegebene Benutzername und das Kennwort automatisch an ihn übertragen werden. Geschieht dies nicht oder kommt es zu einem Fehler bei der Authentifizierung, erscheint anstelle des Desktops ein interaktives Anmeldefenster.

Der automatische Start des Sitzungsmanagers ist in der Datei /etc/default/xrdp angegeben und die Konfiguration ist in /etc/xrdp/sesman.ini gespeichert. Standardmäßig sieht es etwa so aus:
[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]Hier müssen Sie nichts ändern, Sie müssen lediglich die Anmeldung mit Root-Rechten deaktivieren (AllowRootLogin=false). Für jeden im System berechtigten Benutzer wird ein separater xrdp-Prozess gestartet: Wenn Sie die Verbindung trennen, ohne die Sitzung zu beenden, werden Benutzerprozesse standardmäßig weiterhin ausgeführt und Sie können sich erneut mit der Sitzung verbinden. Einstellungen können in der Datei /etc/xrdp/sesman.ini (Abschnitt [Sitzungen]) geändert werden.
Tastaturlayout wechseln
Normalerweise gibt es mit einer Zwei-Wege-Zwischenablage keine Probleme, aber mit dem russischen Tastaturlayout müssen Sie ein wenig herumspielen (das russische Gebietsschema sollte bereits vorhanden sein). ). Bearbeiten wir die Tastatureinstellungen des Xrdp-Servers:
sudo nano /etc/xrdp/xrdp_keyboard.iniSie müssen die folgenden Zeilen am Ende der Konfigurationsdatei hinzufügen:
[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,ruJetzt müssen Sie nur noch die Datei speichern und Xrdp neu starten:
sudo systemctl restart xrdpWie Sie sehen, ist es nicht schwierig, einen RDP-Server auf einem Linux-VPS einzurichten, aber Das VNC-Setup haben wir bereits besprochen. Zusätzlich zu diesen Technologien gibt es eine weitere interessante Option: das X3Go-System, das ein modifiziertes NX 2-Protokoll verwendet. Wir werden uns in der nächsten Veröffentlichung damit befassen.
Source: habr.com
