Nociones básicas sobre displays X11 / Arrancar múltiples escritorios

Las aplicaciones X11 necesitan conocer la dirección del servidor gráfico X11 (la pantalla / display). Las direcciones locales empiezan en :0 y a partir de :10 para las remotas (normalmente SSH). La dirección del “display” local suele encontrase en la variable de entorno DISPLAY.

Para poder arrancar aplicaciones gráficas es necesario tener cierto permiso, todo eso se gestiona con las llamadas “magic cookies”. Estas “credenciales” de visualización X11 se almacenan en archivos de autoridad X, que son una colección de registros con el formato “display:13 cookie 1234”. La ruta al fichero de autoridad X puede estar indicado en la variable de entorno XAUTHORITY, de no ser así se utiliza por defecto las aplicaciones utilizarán ~/.Xauthority.

Arrancar múltiples escritorios sobre servidores X11.

# Ejecutar con sudo o directamente como root un servidor X11
X :1

Como usuario no privilegiado, arrancar un escritorio LXDE en el display :1 desde cualquier terminal / tty.

export DISPLAY=:1
/usr/bin/startlxde

Cntrl + Alt <F8> para utilizar el display :1 y su escritorio LXDE (Puede variar el número de tecla F).

Enumerar los servidores X11 / Displays (escritorios) locales en uso.

cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done
:0
:1
ps aux | grep Xorg
root       656  0.6  1.7 615348 121928 tty7    Ssl+ 18:45   0:54 /usr/lib/xorg-server/Xorg -nolisten tcp vt07 -auth /var/run/slim.auth
root     16587  0.1  0.7 502664 50768 tty3     Ssl+ 20:32   0:03 /usr/lib/xorg-server/Xorg :1
-auth /var/run/slim.auth :2

Enumerar los servidores X11 / Displays remotos en uso (Aplicaciones SSH).

Las pantallas remotas corresponden a puertos TCP abiertos por encima de 6000. Acceder al número de visualización N en la máquina M se realiza conectando al puerto TCP 6000 + N en la máquina M. Desde la propia máquina M, en este caso localhost.

Se detectan dos aplicaciones gráficas abiertas usadas remotamente por SSH.

netstat -lnt | awk '
>   sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
>     print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
>   }'
localhost:10
localhost:11
ip6-localhost:10
ip6-localhost:11

Buscar qué aplicaciones gráficas se están utilizando remotamente.

lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
chromium  2418   pi    8u  IPv6   4654      0t0  TCP [::1]:34908->[::1]:6011 (ESTABLISHED)
pidgin    2456   pi    6u  IPv6   4720      0t0  TCP [::1]:34913->[::1]:6011 (ESTABLISHED)
dbus-laun 2461   pi    3u  IPv6   4742      0t0  TCP [::1]:34914->[::1]:6011 (ESTABLISHED)
dbus-laun 2461   pi    5u  IPv6   5891      0t0  TCP [::1]:34915->[::1]:6011 (ESTABLISHED)

Se podría usar también el comando “w”.

w -oush
pi       pts/1    192.168.178.50          /usr/lib/chromium/chromium --type=renderer --lang=en-US --force-fieldtrials=ConnCountImpact/...

Si se estuviera dejando en background las aplicaciones, se vería que el usuario ejecuta simplemente la bash. Por tanto habría que hacer uso de por ejemplo ps y filtrar por la pts/1

w -oush
pi       pts/0    192.168.178.50          w -oush
pi       pts/1    192.168.178.50    1:28m -bash
 
ps aux | grep -i "pts/1"
pi        2351  1.2  0.2   9716  2304 ?        S    20:46   0:06 sshd: pi@pts/1   
pi        2352  0.1  0.3   8168  3428 pts/1    Ss+  20:46   0:00 -bash
pi        2418  3.3  4.8 324716 43608 pts/1    Sl   20:53   0:03 /usr/lib/chromium/chromium --password-store=detect
pi        2421  0.0  0.5  95308  4580 pts/1    S    20:53   0:00 /usr/lib/chromium/chromium --password-store=detect
pi        2422  0.0  0.0   1824   496 pts/1    S    20:53   0:00 /usr/lib/chromium/chromium-sandbox /usr/lib/chromium/chromium --type=zygote
pi        2423  0.1  1.0  99720  9652 pts/1    S    20:53   0:00 /usr/lib/chromium/chromium --type=zygote
pi        2425  0.0  0.3  99720  2808 pts/1    S    20:53   0:00 /usr/lib/chromium/chromium --type=zygote
pi        2445  1.8  2.7 148160 24884 pts/1    Sl   20:53   0:02 /usr/lib/chromium/chromium --type=renderer --lang=en-US --force-fieldtrials=ConnCountImpact/...
pi        2456  2.6  2.4 111692 22348 pts/1    S    20:54   0:02 pidgin
pi        2461  0.0  0.0   3392   832 pts/1    S    20:54   0:00 dbus-launch --autolaunch d3670ff77a0bb988a953e7f053a3f4e7 --binary-syntax --close-stderr

Enlaces de interés.