2
septembre
2021
« Installation du serveur de bureau à distance XRDP sous Linux et résolution des problèmes de connexion »
16:05

« Installation du serveur de bureau à distance XRDP sous Linux et résolution des problèmes de connexion »

2 septembre 2021 16:05

Cet article décrit comment configurer une connexion à Linux via RDP (Remote Desktop Protocol).

RDP est le protocole le plus courant pour le travail à distance (ou l'administration d'un PC), dans lequel l'écran de l'ordinateur est affiché sur un PC distant, contrôlé par la souris et le clavier. RDP peut être utilisé entre des PC dotés de systèmes d'exploitation différents, Windows et Linux.

Le guide suivant a été rédigé sur la base des résultats de l'installation et du lancement réussis d'un serveur RDP sous Linux Runtu (Description : Ubuntu 20.04.3 LTS) et Linux Mint « Uma » Description : Linux Mint 20.2).

Installation et configuration de RDP sous Linux

  1. Si vous n'avez pas réussi à configurer xrdp auparavant, la première étape consiste à supprimer les packages xrdp et xorgrdp ainsi que leurs paramètres pour effectuer une nouvelle installation.

    sudo apt-get purge xrdp xorgxrdp

  2. Vous devez d’abord mettre à jour les versions du package :

    sudo apt-get update & sudo apt-get upgrade & sudo apt-get dist-upgrade

  3. Si le système d'exploitation est Ubuntu Linux 16.04 ou 18.04, ou 20.04 ou 21.04, je vous conseille d'utiliser un script prêt à l'emploi du site pour installer xrdp

    https://c-nergy.be/downloads/xRDP/xrdp-installer-1.4.zip- téléchargez l'archive et extrayez le script.

La documentation du programme "xrdp-installer" se trouve à l'adresse https://c-nergy.be/blog/?p=17810, ainsi que dans le programme lui-même, de brèves informations sur les paramètres possibles pour son appel s'affichent lorsque vous exécutez le fichier sh avec la touche --help :

bash xrdp-installer-1.4.sh --help

Pour commencer, vous n’avez pas besoin de saisir la commande sudo ; si nécessaire, il demandera le mot de passe su. Lancez, par exemple, comme ceci :

chmod +x xrdp-installer-1.4.sh
./xrdp-installer-1.4.sh

Et puis allez dans les sections CONFIGURATION FINALE DU XRDP et "Diagnostic".


Si le système d'exploitation ne fait pas partie de ceux répertoriés, le chemin d'installation est plus long.

sudo apt-get install x-window-system xserver-xorg xserver-xorg-core
sudo apt-get install  xserver-xorg-legacy

Nous reconfigurons le package

sudo apt-get install xserver-xorg-legacy
sudo dpkg-reconfigure xserver-xorg-legacy

fenêtre de configuration du lancement de Xorg :
xserver-xorg-legacy
dans lequel j'ai choisi le dernier élément qui donne les plus grands droits - « N'importe qui ».

Cette commande écrit dans le fichier cat /etc/X11/Xwrapper.config :
allowed_users=anybody


Installation des packages requis pour exécuter xrdp :

sudo apt-get install libx11-dev libxfixes-dev libssl-dev libpam0g-dev libtool libjpeg-dev flex bison gettext autoconf libxml-parser-perl libfuse-dev xsltproc libxrandr-dev python3-libxml2 nasm fuse pkg-config git intltool checkinstall

Installation de deux packages XRDP principaux :

sudo apt-get install xrdp xorgxrdp xserver-xorg-input-all

Vous remarquerez peut-être que le programme d'installation créera une clé RSA.
Pour que le système d'exploitation puisse lire cette clé, vous devez ajouter un utilisateur xrdp в группу ssl-cert:

sudo adduser xrdp ssl-cert

Ensuite, vous devez installer le sous-système graphique MESA complet et les pilotes de la carte vidéo. Pour quoi?
Le fait est qu'il existe une chaîne :Client RDP -> réseau -> serveur Xrdp -> Xsession -> Xorg -> MESA -> Pilote OpenGL -> carte vidéo
S'il n'est pas possible de démarrer le mode graphique, le client RDP « tombera » également immédiatement après la connexion.

sudo apt-get install libgl1-mesa-dri libglew1.5-dev libglew-dev libgles2-mesa-dev libglm-dev mesa-utils-extra mesa-common-dev freeglut3 freeglut3-dev

Enfin, la carte vidéo doit prendre en charge OpenGL version 2.1 ou supérieure et disposer d'un pilote Linux installé.

  1. Si l'ancien ordinateur est basé sur des chipsets Interl 945 (sous le nom général i915), vous devez installer un pilote tiers modifié, car Sur les pilotes standard, le mode OpenGL 1.4 est activé par défaut, tandis que 2.1 est requis. Sinon il y aura des erreurs (voir la section "Erreurs" ci-dessous)

Si la commande suivante indique qu'OpenGL est une version haute, vous n'avez rien à faire :

glxinfo | grep OpenGL

Un exemple de bonne version de pilote est la 2.1 (faites attention à la chaîne de version OpenGL :
OpenGL vendor string: Mesa Project

OpenGL renderer string: i915 (chipset: 945G)

Chaîne de version OpenGL : 2.1 Mesa 21.3.0-devel (git-dfef775 2021-09-02 focal-oibaf-ppa)

OpenGL shading language version string: 1.20

OpenGL extensions:

OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.3.0-devel (git-dfef775 2021-09-02 focal-oibaf-ppa)

OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

OpenGL ES profile extensions:

Si la version 1.4 est ancienne, ce qui n'est pas adapté à XRDP, le résultat de la commande glxinfo suivant :
OpenGL vendor string: Intel Open Source Technology Center

OpenGL renderer string: Mesa DRI Intel(R) 945G

Chaîne de version OpenGL : 1.4 Mesa 21.0.3
OpenGL extensions:

OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.0.3

OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

OpenGL ES profile extensions:

Ancienne version du pilote avec prise en charge d'OpenGL 1.4 (installé par défaut à partir du package "xserver-xorg-video-intel"). Cette version d'OpenGL 1.4 n'est pas adaptée.

Installez une nouvelle version du pilote (UNIQUEMENT POUR LES ANCIENS CHIPSETS GRAPHIQUES intégrés i915 - i925 - i945)

sudo add-apt-repository ppa:oibaf/graphics-drivers && sudo apt-get update && sudo apt-get update && sudo apt-get dist-upgrade && sudo reboot

Cette commande mettra à jour les packages de pilotes graphiques pour les graphiques Intel intégrés et reboot.

P.S. Si vous devez supprimer le référentiel PPA à l'avenir, par exemple après avoir installé une nouvelle carte vidéo, la commande pour le supprimer est : sudo ppa-purge ppa:oibaf/graphics-drivers.

  1. Autorisation de se connecter au serveur X "pour tout le monde" - donnée précédemment par la commande sudo dpkg-reconfigure xserver-xorg-legacy
    La configuration est écrite dans un fichier

    sudo ls -l /etc/X11/Xwrapper.config

Si nécessaire, vous pouvez visualiser son contenu ou le modifier

sudo nano /etc/X11/Xwrapper.config

*Remarque sur la console - Xorg n'est accessible qu'aux utilisateurs de la console, tout le monde est accessible à tout le monde. La valeur par défaut est la console.
Pour plus de détails, voir la commande man Xwrapper.config.

  1. Configuration des graphiques OpenGL (requis uniquement pour les PC équipés de chipsets plus anciens avec graphiques i915 intégrés) :

Affichage du modèle de carte graphique :

lspci | grep VGA

Si l'adaptateur graphique est un chipset graphique Intel 915 ou 82945G intégré, accédez au répertoire

cd /usr/share/X11/xorg.conf.d/

créer un fichier 20-intel.conf

Le fichier 20-intel.conf n'est nécessaire que pour Ubuntu <= 20.04 et les graphiques Intel intégrés, et dans Ubuntu >=22.04 et Linux Mint >=21, ce fichier n'a plus besoin d'être créé.

sudo nano 20-intel.conf

et ajoutez-y le texte :

Section "Device"

        Identifier "Intel Graphics"

        Driver "intel"

        Option "TearFree" "true"

        Option "AccelMethod" "SNA"

        Option "BackingStore" "true"

        Option "DRI" "3"

EndSection

Option pour les PC plus anciens : dans la ligne "AccelMethod", au lieu de la méthode d'accélération graphique standard "SNA", précisez "Uxa".

ЛучIl est préférable d'utiliser "SNA" - une méthode plus moderne pour les graphiques intégrés x86. Où Uxa- l'architecture antérieure.

Enregistrez et quittez Ctrl+O, Ctrl+X.

  1. Modification du fichier de configuration XRDP :

sudo nano /etc/xrdp/xrdp.ini

au milieu du fichier après la ligne "background", ajoutez l'adresse par défaut pour XRDP.
address=address=0.0.0.0
nastrojka_xrdp

Redémarrage du serveur :

sudo /etc/init.d/xrdp stop
sudo /etc/init.d/xrdp start

CONFIGURATION FINALE DU XRDP

  1. Ajoutez l'utilisateur xrdp au groupe tty et donnez les droits sur le port série (pour résoudre le problème de démarrage d'une session Xorg, cet 'accès tty0 refusé')

    sudo usermod -a -G tty xrdp
    sudo chmod g+r /dev/tty0

  2. Autoriser le démarrage du service "xrdp"

    sudo systemctl start xrdp
    sudo systemctl enable xrdp

  3. IMPORTANT : Copiez le fichier script pour démarrer la session et corrigez-le

    cp /etc/X11/xinit/xinitrc ~/.xinitrc

Découvrez le type de shell de bureau installé :

echo $XDG_CURRENT_DESKTOP

Si la sortie de la commande est vide, essayez

cat /etc/X11/default-display-manager

Modification du fichier ~/.xinitrc pour démarrer une session (session):

nano ~/.xinitrc

commenter ou supprimer la ligne /etc/X11/Xsession, à la place nous écrivons :

exec startlxde

ou

exécuter une session openbox

  • pour le système d'exploitation Runtu

ou

exec startxfce4

pour Linux Mint avec shell de bureau XFCE

ou

exec startlxqt

pour Lubuntu ou Linux Mint avec shell de bureau LXQT(si c'est le résultat de la commande

écho $XDG_CURRENT_DESKTOP).


Donc le fichier .xinitrc dans le répertoire personnel de l'utilisateur, lancé lors du démarrage de la session XRDP, prenait la forme compacte suivante :

#!/bin/sh

exec startlxqt

Note du 09/09/2021 : Vous pouvez ajouter à ce fichier le lancement de tous les programmes nécessaires, par exemple le lancement du serveur de son pulseaudio et le chargement et le changement de la disposition du clavier national. Puis le fichier .xinitrc prendra la forme :

#!/bin/sh
pulseaudio &
setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle,grp_led:scroll' &
exec startlxqt

Note du 10/07/2021 : ces commandes doivent être ajoutées au fichier ~/.xinitrc utilisateur qui se connectera via RDP.

Contenu du fichier ~/.xinitrc si le système d'exploitation du serveur est Linux Mint avec le shell XFCE :

#!/bin/sh
audio pulsé et
setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle,grp_led:scroll' &
exécuter startxfce4

Lorsque le bureau du serveur est LXQT, mon fichier ~/.xinitrc est le suivant :
#!/bin/sh
audio pulsé et
setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle,grp_led:scroll' &
exécutable startlxqt

Et pour OpenBox (Runtu Linux), la version de travail du fichier ~/.xinitrc est la suivante :
#!/bin/sh
audio pulsé et
setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle,grp_led:scroll' &

exécuter une session openbox

exec startlxde

Un fichier ~/.xinitrc universel pour n'importe quel bureau peut être trouvé sur stackoverflow (installation simplifiée requise).

Si nous voulons nous connecter sous un utilisateur arbitraire « user » - et non sous l'enregistrement « xrdp »

L'édition de ~/.xinitrc n'est pas pratique s'il y a plusieurs utilisateurs et la tâche consiste à se connecter via xrdp sous n'importe quel utilisateur.

Il est beaucoup plus facile de corriger le script global (au sein du système d'exploitation) pour la configuration de la session xrdp -
/etc/xrdp/startwm.sh, dans lequel, au lieu des 2 dernières lignes, vous pouvez écrire - dans l'exemple pour runtu LITE - après le mot exec, appeler la session correspondante :

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
exécuter la session openbox

Diagnostic

Nous redémarrons le PC qui fait office de serveur.

On en vérifie que le serveur Xorg démarre sans erreur :

sudo Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp

L'écran peut devenir vide à ce stade si vous testez XRDP à partir du même PC qui exécute la session Xorg initiale. Il faut cliquer Ctrl+Alt+F1 entrez votre nom d'utilisateur et votre mot de passe à l'aide de la commande ps -aux | grep xrdp найти номер процесса "sudo xrdp" и завершить его командой "sudo kill <номер процесса>".

La sortie texte de cette commande contiendra la raison de l'erreur.

Si le message "(EE) Impossible d'établir des sockets d'écoute - Assurez-vous qu'un serveur X n'est pas déjà en cours d'exécution (EE)",
vous devez redémarrer le PC et répéter les diagnostics.

La deuxième option de test est qu'avant de nous connecter au serveur XRDP pour la première fois, nous terminons la session en cours « Démarrer » - « Se déconnecter » - « Se déconnecter du système ». Puisque le client RDP ne pourra pas créer une deuxième session du même utilisateur (avec une erreur dans le fichier ~/.xorgxrdp.10.log : "(EE) Caught signal 11 (Segmentation default). Server abandoning").

Ou bien, vous devez créer un deuxième utilisateur pour tester la connexion à xRDP, que nous utiliserons pour nous connecter via le protocole RDP :

sudo useradd -m ivanov-rdp
mot de passe ivanov-rdp

Erreurs du serveur xRDP sous Linux et leurs solutions

Mise en place d'un pare-feu

Si vous ne parvenez pas à vous connecter via RDP au serveur, vérifiez tout d'abord que le port est ouvert sur le FireWall du serveur :

sudo apt install nmap
sudo nmap -Pn 192.168.55.100 -p 3389

où au lieu de 192.168.55.100 précisez l'adresse IP du serveur sur le réseau local
N'oubliez pas d'ouvrir le port local 3389 dans le pare-feu :

sudo ufw allow 3389

La conclusion devrait être la suivante. Si le port est ouvert, tout va bien.
SERVICE DE L'ÉTAT DU PORT
3389/tcp ouvre le serveur ms-wbt

(Si le port RDP 3389 sur le serveur a l'état "ouvert", et depuis le client il est visible comme "filtré", voir la fin de l'article - "Si remmina ne peut pas se connecter au serveur").

Problème "Lors de la connexion depuis un client via RDP, un écran noir et vide est visible"

Le package n'est pas installé sur le serveur xorgxrdp- une « couche » logicielle entre xorg et le serveur rdp qui affiche des graphiques - Bureau, pointeur de la souris et icônes.

La solution est d'installer le package sur le serveur xorgxrdp:

sudo apt-get install xorgxrdp
redémarrage du service sudo xrdp

La session xRDP devrait maintenant fonctionner. Essayons de nous connecter !

Remarque: Le paquet "xorgxrdp - Modules Remote Desktop Protocol (RDP) pour X.org" est inclus dans la plupart des distributions Debian, ainsi que Ubuntu 18.04 "bionic", 20.04 LTS "focal", 21.04 "hirsute", 21.10 "impish", 22.04 LTS "jammy" (publié 21/04/2022), et les dérivés du système d'exploitation basés sur la base de packages Ubuntu DEB (tels que Runtu, Lubuntu, Xubuntu, Kubuntu, etc.), ainsi que les distributions basées sur RPM : Fedora, Arch, etc. Par conséquent, ces instructions devraient fonctionner avec de nombreuses versions de Linux.

Problème lors de la connexion via RDP, le bureau est différent de l'habituel - l'environnement Gnome est utilisé

Ajout du 17/11/2023 :

Pour que l'utilisateur actuel puisse se connecter à l'environnement familier, et non à Gnome, créez un fichier ~/.xsessionrc avec contenu :

export GNOME_SHELL_SESSION_MODE=ubuntu
exporter XDG_CURRENT_DESKTOP=ubuntu:GNOME
exporter XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg

A la fin du dossier /etc/xrdp/startwm.sh или ~/.xinitrc, ce qui suit doit être écrit (en utilisant runtu LITE comme exemple) :

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
exécuter la session openbox


Client Remmina RDP - connexion au serveur

sudo apt-get install remmina remmina-plugin-rdp remmina-plugin-secret
sudo reboot
remmina

Ajouter une connexion - type RDP.
remmina

Si le VPN n'est pas utilisé, entrez l'adresse IP « blanche » de votre routeur domestique dans l'adresse IP.
Lorsque vous travaillez via un VPN, l'adresse IP fait référence au réseau interne (local, domestique).
Le nom et le mot de passe sont les mêmes que lors de la connexion « depuis le clavier » sur le serveur.

Les boutons inférieurs de la fenêtre Remmina sur les netbooks avec une résolution d'écran de 1024 x 600 pixels peuvent être coupés et partiellement visibles.
"Annuler" - "Enregistrer par défaut" - "Enregistrer" - "Connecter" - "Enregistrer et connecter"

Appuyez sur le bouton le plus à droite "Enregistrer et connecter".

Impossible de se connecter au serveur RDP distant à l'aide de Remmina après la mise à jour

En mai 2024, après une longue pause, le client Remmina a cessé de se connecter depuis Linux, alors que le programme standard mstsc.exe fonctionnait sous Windows, où RDP fonctionnait. Symptômes : le port 3389 sur le serveur est ouvert, mais depuis le client il est visible comme filtré. Cela peut être vu avec la commande nmap server_ip_address.

Explication : Le port RDP est à moitié ouvert (filtré) si le client a stocké un certificat de serveur incorrect.

Solution : sur le client, ouvrez le fichier pour le modifier ~/.config/freerdp/known_hosts2 и удалить из него строчку с IP-адресом сервера RDP. Либо можно полностью удалить данный файл ~/.config/freerdp/known_hosts2.

Divers problèmes et leur débogage

Journaux d'erreurs dans le répertoire système /var/log/:

*xrdp.log

  • xrdp-sesman.log
  • Xorg.0.log, Xorg.10.log

Journaux d'erreurs dans le répertoire des utilisateurs ~:

  • ~/.xorgxrdp.10.log

Vous pouvez les visualiser avec les commandes :

sudo cat /var/log/xrdp.log
sudo cat /var/log/xrdp-sesman.log
sudo cat /var/log/Xorg.0.log
sudo cat /var/log/Xorg.10.log
sudo cat ~/.xorgxrdp.log

Si vous vous connectez d'un PC Windows à un PC Linux après avoir saisi votre nom d'utilisateur et votre mot de passe, vous voyez un fond bleu-vert uni sans texte ni icônes,
ou il y a de nombreuses erreurs dans le fichier XRDP.LOG, ce qui signifie que la connexion a été établie, mais que les graphiques Xorg n'ont pas démarré - probablement à cause d'une ancienne version d'OpenGL ou de droits, voir ci-dessus.

Un exemple d'erreur côté client lors de la tentative de connexion à l'aide du programme MSTSC.EXE :
bleu

Messages d'erreur dans le journal XRDP.LOG côté serveur :
erreur19
ou similaire [DEBUG] Socket fermé 17 (AF_UNIX)

La solution est le diagnostic à l'aide de la commande depuis le bureau de la machine serveur :

sudo Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp

Vous devez vous assurer qu'il n'y a pas d'erreurs Xorg dans le fichier /var/log/Xorg.10.log.

Si, lors de la connexion depuis un PC sous Windows, vous voyez un écran noir pendant un instant, qui se ferme immédiatement, l'une des options est :
*nom d'utilisateur/mot de passe invalide

  • Script ~/.xinitrc incorrect (la session de bureau n'a pas démarré). Vérifiez votre fichier ~/.xinitrc ou /etc/xrdp/startwm.sh pour la présence d'une équipe exec .
  • l'utilisateur que vous connectez au PC à distance dispose d'une session ouverte dans le système d'exploitation localement (il utilise actuellement l'ordinateur).

Sécurité

Désormais, n'importe quel PC du réseau local pourra se connecter à votre ordinateur en utilisant le protocole RDP. Doit être défini pour le compte utilisateur mot de passe complexe. Si vous vous connectez à votre PC depuis Internet, vous pouvez également utiliser un VPN avec cryptage du trafic.

Ajout à partir du 30/05/2024 :

Si vous n'utilisez pas de clients plus anciens, vous pouvez mettre à niveau la version du protocole SSL utilisé par la négociation RDP :

sudo nano  /etc/xrdp/xrdp.ini

Corrigez la ligne

ssl_protocols=TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

sur

ssl_protocols=TLSv1.2, TLSv1.3

et redémarrez le service en relisant le fichier de configuration :

sudo service xrdp reload

Utiliser un client FreeRDP alternatif au lieu de Remmina

Installation du programme Bureau à distance RDP gratuit:

sudo flatpak install com.freerdp.FreeRDP

Lancement du client FreeRDP pour se connecter au serveur (par exemple, 192.168.1.100) :

flatpak run com.freerdp.FreeRDP /u:username /p:P!@##mot /w:1200 /h:700 /v:192.168.1.100

Avantages RDP gratuit- la possibilité d'appeler depuis la ligne de commande ou un fichier batch, le programme se développe activement. Site web:https://www.freerdp.com/.


Date de la dernière modification 30/05/2024



Publications connexes