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.