SSH: inicie programas GUI en la pantalla remota, no en la pantalla X

11

El problema

La mayoría de las personas desean conectarse a un servidor a través de ssh con la opción "-X" para ejecutar programas GUI en el host remoto utilizando la pantalla del cliente. Me gustaría ejecutar programas GUI en el monitor físico conectado al servidor. Es posible ? Déjame ser más específico:

Mi situación es la siguiente: tengo una estación de trabajo sin teclado o mouse, pero tiene un monitor conectado. Me gustaría usar SSH con mi computadora portátil y poder iniciar algún programa gráfico, como xeyes o ssvnc y que aparezca en el monitor de la estación de trabajo.

[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0

Editar: información adicional

Quizás debería explicar algunas cosas más claramente:

  • Tengo acceso a sudo en la estación de trabajo, puedo instalar cualquier cosa si es necesario.
  • La estación de trabajo ejecuta la interfaz de usuario de GNOME.
  • Antes de desconectar el teclado y el mouse de la estación de trabajo, inicié sesión en una sesión de GNOME. Por lo tanto, uno puede ver mi escritorio GNOME en el monitor de la estación de trabajo actualmente.
  • No deseo ejecutar programas desde mi computadora portátil en la estación de trabajo. Me gustaría ejecutar programas de estación de trabajo en la estación de trabajo. Los xeyes o cualquier ejecutable se encuentran en el servidor remoto y deben ejecutarse en el monitor del servidor remoto
  • Entiendo que realizar esto me dejará en una situación en la que mi cursor no estará conectado a la interfaz. No puedo hacer clic en las cosas. Está bien.

Cualquier ayuda muy apreciada!

xApple
fuente
¿Ejecutaste xhost +en tu servidor?
karlphillip
Creo que esta también es una pregunta interesante, por ejemplo, si tienes 3 PC ubuntu que ejecutan Synergy para usar el mismo teclado y mouse entre las 3 ... cuando inicias sesión, debes iniciar sesión 3 veces. Sería bueno crear un script que inicie sesión en las otras dos PC, cuando inicie sesión en la PC principal.
Sverre

Respuestas:

5

cualquier aplicación xlib debe conectarse a un servidor x. tienes que decirle a la aplicación la conexión al servidor por:

  • Configuración de la variable de entorno PANTALLA
  • usando una bandera de línea de comando como -display

el primer servidor x generalmente se puede alcanzar mediante la cadena de conexión ': 0'. entonces, intenta esto:

xeyes -display :0

o esto

env DISPLAY=:0 xeyes
akira
fuente
En muchos casos (como cuando lo inicia GDM de GNOME), XAUTHORITYtambién será necesaria la configuración , ya que el servidor X11 utilizará un archivo Xauthority temporal.
user1686
Interesante, después de configurar la variable $ DISPLAY, ahora aparece, además del mensaje "Error: No se puede abrir la pantalla", el mensaje "Sin protocolo especificado" cuando intento iniciar xeyes.
xApple
@grawity Gracias por el consejo. ¿Puedo preguntar cómo establecería mi XAUTHORITY para que mi comando funcione?
xApple
5

¿Esta estación de trabajo ejecuta un servidor X Windows? Sin eso, todo esto es discutible.

Necesita ALGO para procesar los datos en gráficos, píxeles, colores y ubicaciones. Un 'monitor' es inútil sin algún tipo de software para ejecutarlo.

Suponiendo que lo sea. (pero del texto, seguro suena lo contrario)

Dados los nombres de host (y la resolución DNS adecuada a través de / etc / hosts o DNS o lo que sea) de 'estación de trabajo' y 'computadora portátil' ... si no, reemplace los nombres de host de la máquina con las direcciones IP apropiadas.

ssh workstation
xhost +laptop

entonces puede cerrar sesión en la estación de trabajo en este punto, ya que esto establece los permisos en el servidor X de la estación de trabajo para permitir que se conecte la 'computadora portátil'.

si inicia sus programas con el conjunto DISPLAY env adecuadamente, puede hacer que las aplicaciones se muestren en la estación de trabajo, mientras se ejecutan en su computadora portátil.

DISPLAY=workstation:0 xeyes

-o-

export DISPLAY=workstation:0
xeyes

cualquiera de los métodos funcionará, el último hace que todo lo relacionado con X11 se muestre en la estación de trabajo cuando se inicia desde ese shell. (espero que tenga sentido)

La línea 'xhost' es para permitir el permiso de la computadora portátil para conectarse al servidor X de la estación de trabajo. Sin él, se le denegará el permiso, a menos que inicie el servidor X sin permisos, lo cual no se recomienda realmente. La protección 'xhost' todavía es poco convincente, ya que los datos se envían en 'texto plano' entre la computadora portátil y la estación de trabajo y pueden ser rastreados, pero es una solución fácil.

Si desea privacidad, necesitaría configurar algún tipo de túnel encriptado entre su computadora portátil y la estación de trabajo (puerto 6000 para pantalla: 0). Sí, se pone raro en este punto.

Si se encuentra en un entorno controlado, será suficiente usar el comando 'xhost + laptop', si abandona la parte 'laptop' de ese comando 'xhost +', entonces CUALQUIERA puede conectarse al servidor X y mostrar cosas.

Recuerde, su mouse NO está 'conectado' a la estación de trabajo Xserver, y NO podrá manipular ventanas o hacer clic en cosas.

Si desea que el mouse esté conectado, le recomendaría algo como x2x, sinergia, vnc o una aplicación para compartir pantalla basada en X Windows.

lornix
fuente
Gracias por tu respuesta ! Tiene razón, tal vez necesite especificar algunas cosas más: (1) La estación de trabajo ejecuta la interfaz de usuario de GNOME (2) No deseo ejecutar programas desde mi computadora portátil. Xeyes o lo que sea que deba ejecutarse en la estación de trabajo con el monitor de la estación de trabajo (3) Está bien, entiendo que mi cursor no estará conectado.
xApple
Ah, entonces realmente solo necesita ssh a la estación de trabajo, configure la variable DISPLAY en 'localhost: 0' (o simplemente ': 0') e inicie su aplicación. Todavía tendrá que lidiar con los permisos (xhost + localhost probablemente la mejor respuesta) y nohup, o &! (background and disown), o comandos bg / disown del shell para que la aplicación no se cierre al cerrar sesión. (a menos que eso sea lo que quieras, por supuesto)
lornix
Ah, entonces quizás mi problema es solo un problema de permiso. Aunque, si ejecuto "xeyes" como root, el mensaje de error es el mismo. Si publica una respuesta que resuelve los problemas de permisos, ¡puedo marcarla como resuelta!
xApple
¿Alguien ha iniciado sesión en la sesión de X Windows en la estación de trabajo? Sin eso, el código que escucha las conexiones del programa aún no está activo, solo las cosas de inicio de sesión. (¡Estoy simplificando enormemente!) Intente enviar un mensaje a la estación de trabajo, luego 'startx', LUEGO podrá conectarse a la pantalla. Otra forma es usar un servidor X básico, escribiendo 'X: 0 &', configurando la variable DISPLAY y luego realizando 'xhost + laptop' (o simplemente 'xhost +'). Pero eso es un poco bajo para la mayoría. (¡Genial para probar!)
lornix
Sí, inicié sesión en una sesión de GNOME en la estación de trabajo antes de desconectar el teclado y el mouse. Sin embargo, intenté ejecutar el comando "startx" desde mi sesión ssh. El mensaje de error fue el siguiente: "X: usuario no autorizado para ejecutar el servidor X, abortando".
xApple