Respuesta1
Podrías usar VNC, consulta estas preguntas y respuestas:https://softwarerecs.stackexchange.com/questions/20417/same-content-on-several- Different-computers-monitors-administered-remotely/20419#20419.
Un servidor VNC puede ser compartido por varios clientes en modo "solo lectura" (es decir, los clientes no pueden controlar el servidor mediante el teclado o el mouse) o en modo "lectura-escritura" (los clientes pueden tomar el control del servidor mediante el teclado o el mouse). pero puede resultar complicado cuando varios clientes tienen control de escritura simultáneamente, ya que pueden interferir entre sí).
Las distribuciones de Linux más recientes tienen soporte VNC integrado en el propio servidor X11, pero es posible que sea necesario habilitarlo (consulte la documentación de su distribución específica para obtener instrucciones). Alternativamente, puede iniciar un servidor manualmente, totalmente independiente del servidor X11 "principal" que se ejecuta en la máquina. Cuando se inicia manualmente, un servidor VNC puede admitir simultáneamente clientes de "solo lectura" y de "lectura-escritura" que utilizan contraseñas diferentes (no estoy seguro si el soporte integrado del servidor X11 lo hace).
VNC funciona maravillosamente sobre SSH y los clientes ni siquiera necesitan permisos de root para su ejecución.
Respuesta2
El objetivo era distribuir cualquier imagen/programa seleccionado a ~30 escritorios Linux, independientemente de que el usuario haya iniciado sesión o no, el contenido debería reemplazar lo que el usuario estaba viendo (piense en PSA) y las tareas reales del escritorio de los usuarios deberían permanecer intactas. Además, no se debe dar al usuario la posibilidad de modificar el contenido. Esperaba una solución básica utilizando transmisiones X y TCP. Eso no evolucionó, más bien usé VNC según lo recomendado por otros.
En el lado del cliente, configuro un script de espera para iniciar una sesión X en blanco (p. ej. X :1
), cambiar a esa terminal virtual (es decir, chvt 1
cuando sea necesario) y conectarme al servidor vnc.
A saber:
for num in $(seq 0 30); do expect -f xremote$num.exp; done
donde cada script xremote especifica el host remoto:
set timeout -1
spawn ssh -o ConnectTimeout=10 root@somehost1
match_max 100000
expect "#"
send "X :1 & \r"
expect "#"
send "export DISPLAY=:1 \r"
expect "#"
send "vncviewer -passwd /root/.vnc/passwd -Shared -ViewOnly -FullScreen 192.168.1.1:1& \r"
expect "#"
send "exit\r"
expect eof
exit 0
y el servidor ofrece contenido en :1 después de:
vncserver :1 -geometry 1024x768 -depth 16
Después, se volvió un poco complicado cerrar las Xsessions en los clientes. Así que utilicé el siguiente script de espera para cerrar todas las sesiones X [X se reinicia automáticamente en :0]:
set timeout -1
spawn ssh -o ConnectTimeout=10 root@somehost1
match_max 100000
expect "#"
send "pkill X \r"
expect "#"
send "chvt 1 \r"
expect "#"
send "rm /tmp/.X*lock \r"
send "exit\r"
expect eof
exit 0