Cuando SSH se localiza en mi computadora (no pregunte, es una solución alternativa), no puedo iniciar aplicaciones gráficas sin ejecutar:
export DISPLAY=:0.0
Si ejecuto esto primero y luego ejecuto una aplicación gráfica, todo funciona. Si no, no funciona, no hay pantalla para adjuntar.
¿Existe un comando para enumerar todas las pantallas disponibles (es decir, todos los valores posibles) en una máquina?
( DISPLAY=:0 yourapp & )
.w
. Más información: ¿ enumerar los nombres para mostrar X existentes?Respuestas:
Si desea que la conexión X se reenvíe por SSH, debe habilitarla tanto en el lado del servidor como en el lado del cliente. (Dependiendo de la distribución, puede habilitarse o deshabilitarse de manera predeterminada). En el lado del servidor, asegúrese de tener
X11Forwarding yes
dentro/etc/sshd_config
(/etc/ssh/sshd_config
o donde esté el archivo de configuración). En el lado del cliente, pase la-X
opción alssh
comando o ingreseForwardX11
su~/.ssh/config
.Si corres
ssh -X localhost
, deberías ver que$DISPLAY
es (probablemente)localhost:10.0
. Contraste con:0.0
, que es el valor cuando no está conectado a través de SSH. (La.0
parte se puede omitir; es un número de pantalla, pero rara vez se usan varias pantallas). Hay dos formas de pantallas X que probablemente encontrará::
.:
.Con
ssh -X localhost
, puede acceder al servidor X a través de ambas pantallas, pero las aplicaciones utilizarán un método diferente::NUMBER
accede al servidor a través de sockets locales y memoria compartida, mientras queHOSTNAME:NUMBER
accede al servidor a través de TCP, que es más lento y desactiva algunas extensiones.Tenga en cuenta que necesita una forma de autorización para acceder a un servidor X, llamada cookie y que normalmente se almacena detrás de escena en el archivo
~/.Xauthority
. Si está utilizando ssh para acceder a una cuenta de usuario diferente, o si su distribución coloca las cookies en un archivo diferente, es posible queDISPLAY=:0
no funcione dentro de la sesión SSH (pero lossh -X
hará, si está habilitado en el servidor; nunca Necesito meterse conXAUTHORITY
al hacerssh -X
). Si eso es un problema, debe configurar laXAUTHORITY
variable de entorno u obtener las cookies del otro usuario .Para responder a su pregunta real:
Las pantallas locales corresponden a un zócalo
/tmp/.X11-unix
.Las pantallas remotas corresponden a puertos TCP abiertos superiores a 6000; El acceso al número de pantalla N en la máquina M se realiza mediante la conexión al puerto TCP 6000 + N en la máquina M. Desde la máquina M:
(El resto de este punto es de interés académico únicamente).
Desde otra máquina, puede usar
nmap -p 6000-6099 host_name
para sondear puertos TCP abiertos en el rango habitual. Es raro hoy en día tener servidores X escuchando en un socket TCP, especialmente fuera de la interfaz de bucle invertido.Estrictamente hablando, otra aplicación podría estar usando un puerto en el rango generalmente utilizado por los servidores X. Puede saber si un servidor X está escuchando comprobando qué programa tiene abierto el puerto.
Si eso muestra algo ambiguo
sshd
, no hay forma de saber con certeza si es un servidor X o una coincidencia.fuente
La pantalla es el primer argumento para
Xorg
.ps
Entonces puedes explotarXorg
.Luego puede
awk
hacerlo en cualquier formato que necesite.fuente
ps aux |grep X
funcionó mejor para míw
muestra a todos los que han iniciado sesión y su pantalla.DISPLAY=:0 netsurf "https://medium.com/"
... o useexport DISPLAY=:0
para compartir el var con el proceso, no solo el shell[Editar: ejecuté una instancia de Xnest para ver si esto podría atraparlo, no lo hace; solo captura shells de inicio de sesión ('w' es la abreviatura de 'who'). De vuelta al tablero de dibujo para mí.] [Editar: Lo encontré:
]
fuente
ps xeww | grep DISPLAY=:1024
ahora eso es extraño. También estoy ejecutando chrome-remote-desktop en la pantalla 20.w
no funciona si no se está ejecutando ninguna aplicación en el servidor x (incluido el administrador de ventanas y el escritorio) Perols /tmp/.X11-unix
funciona.hará el trabajo enumerando todas las PANTALLAS actuales. También puede ver las pantallas asignadas para un usuario específico ($ usr) con:
fuente
ps e -u $USER | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u
?En la
/tmp
carpeta también puede haber.X??-lock
archivos que??
indiquen los números de sesión.Debe eliminarlos si desea reutilizar un número de sesión.
Puede verlos usando
ls -a
normalmente los archivos que comienzan con a.
están ocultos.fuente