2023/06/18

Aprovechando pantallas obsoletas: la idea

Desde hace rato que la acumulación de netbooks de 2GB y tablets con android 4.x me viene haciendo mal y el demonio interno me dice que aproveche al menos las pantallas, asi que me puse.

Mi contexto histórico relacionado: había incursionados hace muuuuucho tiempo en utilizar dual head mediante el uso de dos placas de video cuando tenían una sola salida. También había investigado, sin éxito, el usar una misma computadora con dos placas de video, dos mouses y dos teclados como si fueran dos.

Luego, intenté nuevamente usar las pantallas peladas, pero como hablan LVDS, quedó fuera de mi alcance.

Luego, con éxito, usar varias máquinas a la vez.

Como siempre, empecé preparando un mensaje con preguntas, en este caso dirigido al chat de cybercirujas, que decía algo así como:

"Tengo un problema, aparte de la cara. El contexto es que querría usar esas notebooks pedorritas de 1 o 2gb RAM por sus pantallas, pero sin ejecutar nada más que linux base + xwindows. Por ejemplo para tener abierto en mi máquina principal un firefox con una cuenta de mail alternativa y visualizarlo en la notebook. Si además funciona el portapales, es un plus."

Como siempre, continué con la técnica de preguntar bien para aprender, escribí un montón de mensajes alternativos y seguí pistas en Internet hasta que comprendí bien el problema y algunas posibles soluciones y esto es a lo que llegué, no voy a contar toda la historia porque la verdad es que no la recuerdo.

Comencemos por la topología y mis requerimientos, habiendo un nodo principal y uno o más secundarios.

 

Topología


Principal ---> Secundarios

La idea es ejecutar en Principal una aplicación y que se visualice en Secundario, esto es porque los secundarios pueden no tener la potencia o carecer del contexto. Es un plus mantener la interacción desde Principal, pues Secundario puede estar lejos del alcance o sin dispositivos de entrada.

Con contexto me refiero a que puedo tener una VM que está conectada a una VPN, puedo mostrar el escritorio de esa VM en Secundario pero no puedo ejecutarlo ahí y menos tener la conexión a la VPN.

 

Una manera de expresar esto es:

 

Interacción -> Ejecución -> Visualización

 

Lo que deseo es:

 

Principal -> Principal -> Secundario

 

Requerimientos

 

  • Van con nombres para luego verlos en una tabla comparativa.

 

Incondicionales

 

  • Render Remoto: Usar la pantalla remota.

 

Negociables

 

  • Input en Principal: que tome el teclado y el mouse de la principal.
  • Ejecución en Principal: el contexto de ejecución debe ser en Principal
  • Visibilidad Permanente: que independientemente de lo que haya en Principal, por ejemplo al cambiar de escritorio, se siga viendo.

 

Adicionales

 

  • Modo Render Aplicación: que se visualice una ventana en particular.
  • No SSH a Principal: que no se ingresen credenciales del principal en el secundario.
  • Modo Render Total: que se muestre todo el desktop. Podría servir como un facilitador de navegación, pero si es el único modo es poco útil.
  • Integración: que haya integración con el display principal como si fuera un monitor más.

 

Transversal

 

Y existe un requerimiento adicional que es un plus:

  • Autónomo: Sin interacción física con el equipo remoto, tal que el dispositivo puede estar en un lugar de incómodo acceso o sin periféricos de entrada.


Recursos disponibles


  • navegador con http: vendría a ser el más portable, pero siempre ocupa una ventana en Principal, se parece conceptualmente a lo que hice con xzoom en el sentido que se toma algo que se está visualizando y se transmite, en el caso de xzoom a una ventana local.
  • xwindows: es el más natural, pero implica que haya xwindows en los Secundarios, cosa que a veces puede ser dificultoso.
  • vnc: permite desde una máquina ver y potencialmente interactuar con otra.
  • ssh: permite acceder de modo remoto y seguro y meter xwindows en un tunel.
  • x2x: permite con teclado y mouse saltar de un escritorio a otro remoto que tenga xwindows.

 

Un poco de análisis


Para cumplir con Principal -> Principal -> Secundario, mi sueño sería que en Principal yo lance algo, aparezca en Secundario y pueda seguir interactuando desde Principal.

 

x2x (Principal -> Secundario -> Secundario)

 

Usar x2x queda descartado pues la aplicación se ejecuta en Secundario y en mi caso en particular, como tengo tres monitores en L, el escritorio remoto sólo se puede recorrer con esa misma forma en L. Recuerdo hace un tiempo haber visto el código fuente de x2x a ver si podía darme cuenta por donde tendría que investigarlo y me superó. Pero anotemos que podría servir para la interacción.

 

VNC (Principal -> Secundario -> Secundario)

 

VNC queda descartado por la misma ejecución en Secundario. También anotemos que podría servir para la interacción.

 

Deskscreen y WEYLUS (Principal -> Principal -> Secundario)


En un video ví estas opciones. Usan el navegador del lado de Secundario.

WEYLUS es la única opción que ofrece Integración, pero sólo con chipset Intel, el cual no tengo.

Tienen como problema sólo mostrar lo que se está viendo, si te pasás a otro desktop, deja de visualizar. Se soluciona con "always on visible workspace", lo que no es ninguna solución pues el objetivo era que no ocupe pantalla en Principal. Si lo que te interesa es mostrar en Secundario, como por ejemplo para compartir con otras personas en una red local, te servirían.

https://deskreen.com/lang-en

https://github.com/H-M-H/Weylus

 

ssh -X (Principal -> Secundario -> Principal)

 

Para esto con conviene usarlo al revés, Secundario -> Principal -> Secundario, con lo cual tenemos la ejecución en Principal y visualización en Secundario, solo nos falta ver el asunto de la interacción. No me gusta porque hace falta que el Secundario se autentique frente al Principal y no es autónomo.

 

La solución

 

Esos "descartado" de antes no eran definitivos y si hacemos unas combinaciones, tenemos algo que aunque un poco complicado de poner en marcha y utilizar, cumple bastante bien.

La combinación es instalar o aprovechar el xwindows del Secundario. Desde Secundario con ssh -X abrir la aplicación y luego con x2x o VNC desde Principal interactuar. Por el bug de x2x, nos quedamos con VNC.

+----------------+        +--------------+
| Principal      +---VNC--> Secundario   |
| +------------+ |        | +----------+ |
| | Aplicación <-- ssh -X --+ Terminal | |
| |            | |        | +----------+ |
| |            | |        |  +--------+  |
| |            +--xwindows---> render |  |
| |            | |        |  +--------+  |
| +------------+ |        |              |
+----------------+        +--------------+

 

Comparativa



DeskscreenWEYLUSx2xvnc + ssh -X
render remotosisisisi
input en principalsisisisi
ejecución principalsisinosi
visibilidad permanentenonosisi
render aplicaciónsinosisi
no ssh a principalsisisino
render totalsisinono
integraciónnopotencialfalla por "L"no


Esto sigue en la implementación