GNU/Linux >> Tutoriels Linux >  >> Linux

Comment trouver des sessions xrdp déconnectées ?

Solution 1 :

Voici un moyen d'obtenir une liste des sessions xrdp déconnectées. Il repose sur le fait que le xrdp le serveur est, dans l'utilisation normale du gestionnaire de session X, le seul client qui établit une connexion TCP au Xvnc Serveur d'affichage du système X Window. Lorsqu'une session xrdp est active, le serveur d'affichage Xvnc associé dispose de deux connexions TCP, l'une à l'état ESTABLISHED et l'autre à l'état LISTEN. Cela ressemble à ceci en utilisant le lsof(1) programme.

$ sudo lsof  -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999 
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Xvnc    1625 guest    1u  IPv4 252910      0t0  TCP 127.0.0.1:5910 (LISTEN)
Xvnc    1625 guest    9u  IPv4 261226      0t0  TCP 127.0.0.1:5910->127.0.0.1:35242 (ESTABLISHED)

Si l'utilisateur de la session distante l'abandonne en fermant la connexion RDP (ou, dans le cas d'une session Apache Guacamole RDP, en fermant la fenêtre du navigateur), cela ressemble à ceci :

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Xvnc    1625 guest    1u  IPv4 252910      0t0  TCP 127.0.0.1:5910 (LISTEN)

Notez qu'il n'y a pas de connexion ESTABLISHED sur ce processus de serveur d'affichage Xvnc déconnecté. Ainsi, tout processus Xvnc qui ne fait qu'écouter est une session déconnectée.

Voici un script shell (nommé lsdisconnected ) qui affiche le PID et l'UTILISATEUR pour chaque session distante déconnectée. Il utilise lsof(1) et regarder(1) pour implémenter la logique de connexion.

#!/bin/bash
sudo lsof -FRgpLT -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999  |
gawk '
      match($0,/^p([0-9]+)/,       p) {pid = p[1]; pids[pid]=0; } ;
      match($0,/^L([A-Za-z0-9]+)/, p) {user[pid] = p[1]; } ;
      /TST=LISTEN/ {pids[pid] = pids[pid] - 1 ;};
      /TST=ESTABLISHED/{pids[pid] = pids[pid] + 1};
      END {
          for (pid in pids){
              if (pids[pid] < 0) {
                  print pid, user[pid];
              }
          }};
     '

C'est un moyen pratique de trouver des sessions de bureau à distance déconnectées. il fonctionne immédiatement après la déconnexion, sans avoir besoin d'utiliser un temps d'inactivité.

Pour ceux qui ne connaissent peut-être pas lsof(1) voici une explication des paramètres de ligne de commande dans cet exemple.

  • -b -w évite les attentes du noyau lsof. Ils ne sont pas nécessaires ici.
  • -n évite les recherches DNS pour les noms d'hôte.
  • -c /^Xvnc$/b recherche les processus avec le nom de commande exact Xvnc, en utilisant une expression régulière.
  • -a indique à lsof d'utiliser AND, et non OR, lors du filtrage.
  • -iTCP:5900-5999 filtres par ports TCP numérotés de 5900 à 5999, ceux utilisés pour les connexions d'affichage X.)

Solution 2 :

J'ai finalement trouvé une solution à cela.
Tout d'abord, j'ai dû installer un petit programme appelé xprintidle :

sudo apt-get install xprintidle

Après cela, j'ai écrit un petit script bash qui récupère d'abord tous les affichages utilisés par Xvnc et xrdp, puis vérifie ces sessions d'affichage si elles sont inactives depuis plus d'un certain nombre de minutes :

#!/bin/bash

displays=`ps aux | grep Xvnc | grep -v 'grep\|sed' | sed -r 's|.*(Xvnc :[0-9]*).*|\1|' | cut -d' ' -f 2`
limit=180


date
echo "Checking for inactive sessions!"
while read -r d; do
    export DISPLAY=$d
    idle=`xprintidle`
    idleMins=$(($idle/1000/60))
    if [[ $idleMins -gt $limit ]]; then
        echo "WARN Display $d is logged in for longer than ${limit}min (${idleMins}m)"
    else
        echo "INFO Display $d is still ok (${idleMins}m)"
    fi  
done <<< "$displays"

Linux
  1. Comment utiliser FIND sous Linux

  2. Comment intégrer la commande Mv après la commande Find ?

  3. Comment condenser les sous-répertoires ?

  4. Comment trouver l'adresse IP de la passerelle par défaut sous Linux

  5. Comment exclure un répertoire dans find . commande

Comment configurer Xrdp sur Xorg sous Linux avec plusieurs sessions

Comment trouver la version d'openSUSE

Comment trouver la version d'Ubuntu

Comment installer Xrdp sur Ubuntu 20.04

Comment trouver la dernière connexion sous Linux

Comment trouver des fichiers dans Debian