Responder1
Você poderia usar o VNC, veja estas perguntas e respostas:https://softwarerecs.stackexchange.com/questions/20417/same-content-on-several- Different-computers-monitors-administered-remotely/20419#20419.
Um servidor VNC pode ser compartilhado por vários clientes no modo "somente leitura" (ou seja, os clientes não podem controlar o servidor via teclado ou mouse) ou no modo "leitura-gravação" (os clientes podem assumir o controle do servidor via teclado ou mouse, mas pode ser complicado quando vários clientes têm controle de gravação simultaneamente, pois podem interferir uns nos outros).
As distribuições Linux mais recentes têm suporte VNC integrado ao próprio servidor X11, mas pode precisar ser habilitado (verifique a documentação específica da distribuição para obter instruções). Alternativamente, você pode iniciar um servidor manualmente, totalmente independente do servidor X11 "principal" em execução na máquina. Quando iniciado manualmente, um servidor VNC pode suportar simultaneamente clientes "somente leitura" e "leitura-gravação" usando senhas diferentes (não tenho certeza se o suporte interno do servidor X11 faz isso).
O VNC funciona maravilhosamente bem em SSH e os clientes nem precisam de permissões de root para execução.
Responder2
O objetivo era distribuir qualquer imagem/programa selecionado para cerca de 30 desktops Linux, independentemente de o usuário estar logado ou não, o conteúdo deveria substituir o que o usuário estava visualizando (pense no PSA) e as tarefas reais do desktop dos usuários deveriam permanecer inalteradas. Além disso, o utilizador não deve ter a possibilidade de alterar o conteúdo. Eu esperava uma solução básica usando transmissões X e TCP. Isso não evoluiu, em vez disso usei o VNC conforme recomendado por outros.
No lado do cliente, configurei um script expect para iniciar uma Xsession em branco (por exemplo X :1
), mudar para esse terminal virtual (ou seja, chvt 1
quando necessário) e conectar-me ao vncserver.
Nomeadamente:
for num in $(seq 0 30); do expect -f xremote$num.exp; done
onde cada script xremote especifica o 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
e o servidor disponibiliza conteúdo em :1 depois:
vncserver :1 -geometry 1024x768 -depth 16
Depois disso, ficou um pouco complicado fechar as Xsessions nos clientes. Então usei o seguinte script expect para fechar todas as Xsessions [X reinicia automaticamente em :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