GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich getrennte XRDP-Sitzungen?

Lösung 1:

Hier ist eine Möglichkeit, eine Liste der getrennten xrdp-Sitzungen zu erhalten. Es beruht auf der Tatsache, dass die xrdp Server ist bei normaler Verwendung des X-Session-Managers der einzige Client, der eine TCP-Verbindung zum Xvnc aufbaut X Window System-Anzeigeserver. Wenn eine xrdp-Sitzung aktiv ist, hat der zugeordnete Xvnc-Anzeigeserver zwei TCP-Verbindungen, eine im ESTABLISHED-Zustand und die andere im LISTEN-Zustand. Das sieht mit lsof(1) etwa so aus Programm.

$ 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)

Wenn der Benutzer der Remote-Sitzung diese durch Schließen der RDP-Verbindung (oder im Fall einer Apache Guacamole RDP-Sitzung durch Schließen des Browserfensters) abbricht, sieht das ungefähr so ​​aus:

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

Beachten Sie, dass auf diesem getrennten Xvnc-Anzeigeserverprozess keine ESTABLISHED-Verbindung besteht. Jeder Xvnc-Prozess, der nur zuhört, ist also eine getrennte Sitzung.

Hier ist ein Shell-Skript (mit dem Namen lsdisconnected ), die die PID und den BENUTZER für jede getrennte Remotesitzung anzeigt. Es verwendet lsof(1) und gawk(1) um die Verbindungslogik zu implementieren.

#!/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];
              }
          }};
     '

Dies ist eine praktische Methode, um getrennte Remote-Desktop-Sitzungen zu finden. Es funktioniert sofort nach der Trennung, ohne dass eine Leerlaufzeit verwendet werden muss.

Für diejenigen, die mit lsof(1) nicht vertraut sind Hier ist eine Erklärung der Kommandozeilenparameter in diesem Beispiel.

  • -b -w vermeidet lsof-Kernelwartezeiten. Sie werden hier nicht benötigt.
  • -n vermeidet DNS-Lookups für Hostnamen.
  • -c /^Xvnc$/b sucht mithilfe einer Regex nach Prozessen mit dem genauen Befehlsnamen Xvnc.
  • -a weist lsof an, beim Filtern UND und nicht ODER zu verwenden.
  • -iTCP:5900-5999 filtert nach TCP-Ports mit den Nummern 5900 - 5999, die für X-Anzeigeverbindungen verwendet werden.)

Lösung 2:

Ich habe endlich eine Lösung dafür gefunden.
Zuerst musste ich ein kleines Programm namens xprintidle installieren :

sudo apt-get install xprintidle

Danach habe ich ein kleines Bash-Skript geschrieben, das zuerst alle von Xvnc und xrdp verwendeten Displays abruft und dann diese Display-Sessions überprüft, ob sie länger als eine Anzahl von Minuten inaktiv waren:

#!/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. So verwenden Sie FIND unter Linux

  2. So installieren Sie XRDP unter CentOS 7

  3. So schließen Sie ein Verzeichnis in find aus. Befehl

  4. Wie finde ich die Geschwindigkeit der WLAN-Schnittstelle?

  5. Wie finde ich den Status von wlan0?

So richten Sie Xrdp über Xorg in Linux mit mehreren Sitzungen ein

So finden Sie die openSUSE-Version

So finden Sie die Ubuntu-Version

So installieren Sie Xrdp unter Ubuntu 20.04

So finden Sie die letzte Anmeldung unter Linux

So finden Sie Dateien in Debian