¿Cómo ejecuto aplicaciones X11 de forma remota?

6

¿Cómo puedo ejecutar aplicaciones X11 alojadas en un servidor remoto, teniendo en cuenta los siguientes objetivos:

  • Ejecute cualquier cosa que se ejecute localmente en el servidor. Esto incluye las aplicaciones OpenGL que usan GLX.
  • Parece integración con el escritorio local, es decir, las aplicaciones parecen ejecutarse localmente, sin un área de escritorio separada. Por lo tanto, necesito una solución X11, no un protocolo de envoltura.
  • Preferiblemente permite que las aplicaciones continúen ejecutándose si me desconecto; entonces, puedo volver a abrir las aplicaciones en ejecución más tarde cuando me vuelva a conectar.

He visto muchos consejos flotando por aquí en el superusuario, pero gran parte es una solución parcial o simplemente mala.

  • ssh simple X11-Forwardingestá fuera: no puede ejecutar ciertas aplicaciones, especialmente aquellas que dependen de la extensión GLX.
  • La configuración LIBGL_ALWAYS_INDIRECT=1 no funciona para mí.
  • XephyrTambién está fuera. Actualmente no es compatible con GLX, aunque he visto algunos trabajos de GLX en el árbol de desarrollo. Quizás en el futuro, esa será la forma más limpia.
  • xmoveTambién está fuera. Es demasiado viejo para considerarlo más a fondo.
  • VNC está fuera. Reenvía todo el escritorio y no puede asimilar el protocolo X.

EDITAR: luché durante un fin de semana para hacer que varias sugerencias funcionen, y xpraes lo que funciona mejor. Describí mi configuración en una respuesta a continuación, y espero que ayude a alguien más.

jpaugh
fuente

Respuestas:

9

Xpra (como se menciona aquí ) hace lo que quiero. Permite ejecutar aplicaciones X arbitrarias, que pueden reenviarse a varios clientes, ya sea en la misma computadora o en otra máquina. También admite la ejecución de aplicaciones OpenGL y permite que sus aplicaciones continúen ejecutándose incluso después de que se desconecte el último cliente, lo que le brinda la oportunidad de volver a conectarse más tarde.

xpraviene en dos partes: un cliente y un servidor. Para iniciar el servidor, ejecute lo siguiente en la máquina remota:

$ xpra start :100

Esto se inicia xpraen una nueva pantalla X. (Hay una solución alternativa para usar con un proxy).

Para controlar una aplicación xpra, ejecútela en la misma pantalla que el xpraservidor, así:

$ export DISPLAY=:100
$ firefox&
$ blender&
...

Todo esto se puede hacer a través de una conexión ssh (con o sin reenvío X11) sin problemas.

Para iniciar un cliente, realice una de las siguientes acciones:

$ ssh -X user@remotehost
<gain remote connection>
$ xpra attach :100

o

$ xpra attach ssh:user@remotehost:100

Tenga en cuenta que este último requiere que el xpracliente esté instalado en su máquina local; el primero no.

El xpracliente colocará un icono en la barra / panel de tareas de su administrador de ventanas que le permitirá desconectar al cliente. (O bien, puede simplemente matarlo, siempre y cuando tenga cuidado de no matar el servidor). Luego puede volver a conectarlo más tarde, siempre que el xpraservidor siga ejecutándose. Si tiene un solo xpraservidor ejecutándose en el host, también puede simplemente omitir el número de pantalla y xpra attachlo resolverá.

Una característica muy agradable xpraes que le permite iniciar un servidor en una pantalla preexistente. Esto le permite recuperar una sesión si el xpraservidor falla (siempre y cuando el servidor X en esa pantalla todavía se esté ejecutando). Para hacer esto, ejecuta

$ xpra start --use-display :100

Advertencias:

  • xprase ejecuta como un administrador de ventanas. Aunque juega bastante bien con la incorporación en otros administradores de ventanas, no funciona tan bien con las aplicaciones X en sí mismas: no permite, por ejemplo, rxvt-unicodeeliminar su barra de título; tampoco les dice a las ventanas cuánto espacio tienen para trabajar en la pantalla, por ejemplo, los cuadros desplegables y los menús caen fuera de la pantalla. Sin embargo, creo que el último problema es una cuestión de arreglar mi configuración.

  • Las llaves se repiten. Frecuentemente. Esto se puede resolver mediante el uso xpra attach --no-keyboard-sync, pero la página de manual advierte que esto no funciona bien con ciertos juegos. Mantengo los dedos cruzados para no anhelarme usar uno de estos juegos.

Por estas razones, Xephyrpuede ser una mejor solución (una vez que sea compatible con GLX), ya que se ejecuta como un servidor X, no como un administrador de ventanas. Sin embargo, no he investigado si es compatible con la reanudación de sesiones desconectadas anteriormente.

jpaugh
fuente
Podrías editar tu publicación principal en lugar de hacerlo como respuesta.
Kruug
Me gustaría algunas respuestas competitivas. Idealmente, alguien publicará algo mejor.
jpaugh
1
Claro, pero luego los espera ... también, eche un vistazo a Xming ... sourceforge.net/projects/xming
Kruug
1
Buena, gracias. También tuve que agregar un argumento en el servidor, haciéndolo xpra start :100 --start-via-proxy=no, el error fue Warning: cannot use the system proxy for 'start' subcommand, failed to connect to '/run/xpra/system': [Errno 2] No such file or directory.
HankCa
1
@frank IIRC, xpra reenvía una o más aplicaciones individuales desde un escritorio remoto a su escritorio local. No reenvía un entorno de escritorio completo. SSH también hace eso, pero xpra adicionalmente le permitirá cerrar la conexión sin bloquear la aplicación y perder su lugar. Sin embargo, no lo he usado en años. YMMV.
jpaugh