GNU/Linux >> Tutoriales Linux >  >> Linux

Ssh:abre una ventana en una pantalla X remota (¿por qué "no se puede abrir la pantalla")?

Érase una vez,

DISPLAY=:0.0 totem /path/to/movie.avi

después de ingresar a mi escritorio desde mi computadora portátil, Totem reproduciría movie.avi en mi escritorio.

Ahora da el error:

No protocol specified
Cannot open display:

Reinstalé Debian squeeze cuando se estabilizó en ambas computadoras y supongo que rompí la configuración.

Busqué en Google sobre esto, y por mi vida no puedo averiguar qué se supone que debo hacer.

(VLC tiene una interfaz HTTP que funciona, pero no es tan conveniente como ssh).

El mismo problema surge cuando trato de ejecutar esto desde un trabajo cron.

Respuesta aceptada:

(Adaptado de Linux:wmctrl no puede abrir la pantalla cuando la sesión se inicia a través de ssh+screen)

PANTALLA y AUTORIDAD

Un programa X necesita dos piezas de información para conectarse a una pantalla X.

  • Necesita la dirección de la pantalla, que normalmente es :0 cuando está conectado localmente o :10 , :11 , etc. cuando inicia sesión de forma remota (pero el número puede cambiar dependiendo de cuántas conexiones X estén activas). La dirección de la pantalla normalmente se indica en el DISPLAY variable de entorno.

  • Necesita la contraseña para la pantalla. Las contraseñas de pantalla X se denominan cookies mágicas . Las cookies mágicas no se especifican directamente:siempre se almacenan en archivos de autoridad X, que son una colección de registros de la forma "display :42 tiene cookie 123456 ”. El archivo de autoridad X normalmente se indica en el XAUTHORITY Variable ambiental. Si $XAUTHORITY no está configurado, los programas usan ~/.Xauthority .

Está intentando actuar sobre las ventanas que se muestran en su escritorio. Si es la única persona que usa su máquina de escritorio, es muy probable que el nombre para mostrar sea :0 . Encontrar la ubicación del archivo de autoridad X es más difícil, porque con gdm configurado en Debian squeeze o Ubuntu 10.04, está en un archivo con un nombre generado aleatoriamente. (No tuvo ningún problema antes porque las versiones anteriores de gdm usaban la configuración predeterminada, es decir, cookies almacenadas en ~/.Xauthority .)

Obteniendo los valores de las variables

Aquí hay algunas formas de obtener los valores de DISPLAY y XAUTHORITY :

  • Puede iniciar sistemáticamente una sesión de pantalla desde su escritorio, quizás automáticamente en sus scripts de inicio de sesión (desde ~/.profile; pero hazlo solo si inicias sesión con X:prueba si DISPLAY se establece en un valor que comienza con : (que debería cubrir todos los casos que es probable que encuentre)). En ~/.profile :

    case $DISPLAY in
      :*) screen -S local -d -m;;
    esac
    

    Luego, en la sesión ssh:

    screen -d -r local
    
  • También puede guardar los valores de DISPLAY y XAUTHORITY en un archivo y recuperar los valores. En ~/.profile :

    case $DISPLAY in
      :*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
    esac
    

    En la sesión ssh:

    . ~/.local-display-setup.sh
    screen
    
  • Podrías detectar los valores de DISPLAY y XAUTHORITY de un proceso en ejecución. Esto es más difícil de automatizar. Debe averiguar el PID de un proceso que está conectado a la pantalla en la que desea trabajar, luego obtenga las variables de entorno de /proc/$pid/environ (eval export $(</proc/$pid/environ tr \0 \n | grep -E '^(DISPLAY|XAUTHORITY)=') ¹).

Relacionado:¿Hay frecuencias de radio abiertas/sin restricciones que sean gratuitas para cualquier uso?

Copiar las cookies

Otro enfoque (siguiendo una sugerencia de Arrowmaster) es no intentar obtener el valor de $XAUTHORITY en la sesión ssh, pero en lugar de hacer que la sesión X copie sus cookies en ~/.Xauthority . Dado que las cookies se generan cada vez que inicia sesión, no hay problema si mantiene valores obsoletos en ~/.Xauthority .

Puede haber un problema de seguridad si se puede acceder a su directorio de inicio a través de NFS u otro sistema de archivos de red que permita a los administradores remotos ver su contenido. Todavía necesitarían conectarse a su máquina de alguna manera, a menos que haya habilitado las conexiones X TCP (Debian las tiene desactivadas de manera predeterminada). Entonces, para la mayoría de las personas, esto no se aplica (sin NFS) o no es un problema (sin conexiones X TCP).

Para copiar cookies cuando inicie sesión en su sesión de escritorio X, agregue las siguientes líneas a ~/.xprofile o ~/.profile (o alguna otra secuencia de comandos que se lee cuando inicia sesión):

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

¹ En principio, esto carece de las comillas adecuadas, pero en este caso específico $DISPLAY y $XAUTHORITY no contendrá ningún metacarácter de shell.


Linux
  1. Ssh - ¿Por qué Firefox es tan lento sobre Ssh?

  2. Ctrl-c Manejo en sesión Ssh?

  3. ¿Permitir acceso Ssh remoto?

  4. Túnel vpn de acceso remoto SSH

  5. Conexión SSH a través de un túnel SSH inverso (remoto)

Ejecutar comandos en sistemas Linux remotos a través de SSH

SSHFS:Montaje de un sistema de archivos remoto a través de SSH

Cómo abrir una ventana de terminal de Linux

Cómo usar SSH para conectarse a un servidor remoto

Cómo:Administración remota de FreeBSD

¿Por qué está abierto el puerto 1111 y es seguro estarlo?