Reenvío X11 sobre la pantalla Gnu, ¿es posible?


32

Yo uso la pantalla GNU constantemente. Pero, he estado tratando de averiguar si hay alguna manera de hacer que las aplicaciones X11 se reenvíen por la pantalla cuando estoy enviando mensajes (¿Es una palabra?). Actualmente, si intento ejecutar 'gedit' a través de la pantalla, se abre en mi computadora 'servidor' y no en mi cliente. Si hago lo mismo fuera de la pantalla, entonces todo está bien. ¡Pero quiero que todo esté bien cuando uso la pantalla también!

¡Gracias!

PD: He buscado en Google el problema y veo mención de xmove, pero parece que no puedo encontrar el paquete que contiene xmove en mi ubuntu. (Ubuntu 10.10)


No tengo tiempo para encontrar una respuesta completa ahora, pero necesita algunas variables de entorno para configurarlas correctamente. Probablemente pueda averiguar cuáles mirar su entorno fuera de la pantalla.
JanC

Respuestas:


32

Para hacer esto manualmente, una vez que haya ingresado SSH, pero antes de volver a conectarlo a la pantalla, verifique la variable de entorno DISPLAY:

echo $DISPLAY

Una vez que haya vuelto a adjuntar a la pantalla, configure explícitamente la variable de entorno:

export DISPLAY=:N.0

donde : N.0 es lo que se echomostró antes del adjunto. Esto no será perfecto, ya que algunas aplicaciones pueden esperar hablar con el Session D-Bus, que es un poco más complejo para enviar a través de la conexión SSH.


1
¡Increíble! Esto parece funcionar para la mayoría de las aplicaciones. Estoy tratando de subir mi pantalla 'fu'. ¿Tiene alguna idea o puede al menos señalarme en la dirección general de cómo puedo automatizar esto? ¡Gracias!
Sandro

He hecho cosas raras como escribir algo como: echo $DISPLAY > $HOME/.display.txt; screen -x -dy luego otro en la pantalla para ejecutar que sí lo haceexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

eso es exactamente lo que he estado tratando de lograr. Pero hasta ahora no hubo suerte. Intentar conseguir que se realice esa exportación es un gran obstáculo ya que ejecutarlo en un script no es bueno, necesito de alguna manera obtenerlo ... y setenv tampoco parece tener el toque mágico tampoco.
Sandro

Para obtener el tipo de script . /path/to/scriptdonde scriptestáexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook,

Esto supone que no tiene inicio automático de pantalla al iniciar sesión (a la byobu)
Un estudiante en una universidad

11

hay un programa llamado xpra en los repositorios, es como la pantalla gnu para x11. No es muy difícil trabajar con:

X aplicaciones remotas persistentes

Xpra le brinda la funcionalidad de GNU Screen para aplicaciones X.

Permite al usuario ver aplicaciones X remotas en su máquina local y desconectarse y volver a conectarse desde la máquina remota sin perder el estado de las aplicaciones en ejecución.


2
He escrito sobre cómo integrar realmente xpra con Screen para lograr la persistencia de la consola y la aplicación X11: krlmlr.github.io/integrating-xpra-with-screen . Funciona para mi.
krlmlr

7

Byobu vuelve a conectar automáticamente los agentes ssh y gpg. Podría hacer que vuelva a conectar la variable de visualización, si eso es útil para usted ...


Parece que ni siquiera pasa la variable de visualización en NUEVAS sesiones creadas en una sesión ssh con reenvío X11. Sería maravilloso si lo hiciera ... He dejado de usarlo debido al dolor de cabeza de tener que deshabilitar el inicio automático byobu para que uno pueda usar el reenvío X11.
Un estudiante en una universidad

2

Así es como lo hice funcionar cuando ejecuto byobu

Agregue esta línea en .bash_login antes de la línea "_byobu_source ..":

echo $DISPLAY > $HOME/.display.env

Y luego agregue esta línea a .bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

Parece que el problema es que la variable de entorno XAUTHORITY no se conserva en la sesión de pantalla. Resolví esto agregando lo siguiente a mi .bashrc. No pensé que esto fuera necesario, pero supongo que debes hacer lo que debes:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

No espero que esta sea la mejor solución, o la más concisa, pero funciona.



0

Basado en la sugerencia de @harre, encontré que esta es la mejor solución de trabajo, al menos para RHEL a través de Putty. Sé que hay una mejor manera que crear un archivo que contenga la var, pero esto funciona desde el principio X11para tener acceso al DISPLAYcuando se carga a través de gnu screen.

Solución automatizada

Agregar a .bashrc(o .bash_profile, según su caso de uso)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

Luego agregue el siguiente archivo (o su elección de ruta)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.