Como posso alcançar o efeito do MS Remote Desktop no Linux?

5

Em máquinas Windows, se uma máquina A executa o serviço de área de trabalho remota e outra máquina B (que na verdade não precisa ser o Windows) executa um cliente de área de trabalho remota - então o usuário em B pode 'roubar' o controle de a sessão em A, veja as janelas do aplicativo que foram abertas lá e interaja com elas. Note que o RDP também permite que você abra uma nova sessão, se não houver nenhuma, mas não é sobre isso que se trata.

Minha pergunta: Como posso conseguir o mesmo com A sendo uma máquina Linux, executando um servidor X com uma sessão X em andamento.

Notas:

  • Uma solução não precisa ser baseada no próprio MSRDP, pode ser NX, ou VNC, ou qualquer outra coisa que você goste.
  • Estou disposto a instalar o software em A e B, incluindo a instalação como o usuário root.
  • As soluções comerciais são relevantes, embora eu prefira não recorrer a elas.
  • A solução pode envolver a abertura de portas adicionais em A (além de, digamos, a porta 22 para SSH).
  • Suponha que as distribuições são baseadas no Debian e relativamente recentes.
  • Essa pergunta é semelhante a esse , mas não é o mesmo, já que: 1. Estou disposto a executar outros serviços além de X e 2. Nessa pergunta, o OP parece mais interessado em obter janelas específicas, enquanto para mim é importante para ver a coisa toda.
  • Soluções em que os usuários em A e B podem interagir com a mesma sessão também são relevantes.
por einpoklum 29.01.2016 / 19:33

1 resposta

5

Para assumir o controle de uma sessão X em execução, você precisará configurar seu servidor VNC para se conectar ao mesmo monitor que o X. Geralmente, X será conectado ao primeiro monitor - :0 .

Você também precisará da Autoridade X para essa sessão X. Isso pode ser encontrado acessando o arquivo X Authority que o Gerenciador de Vídeo remoto está usando. Isso depende do seu Gerenciador de Exibição e pode ser encontrado usando ps aux e grep . Por exemplo: psaux | grep Xorg fornece algo semelhante a:

/usr/libexec/Xorg -background none :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt1 -noswitch

Observe a opção -auth , pois você precisará dela com o VNC. Em seguida, você precisa executar algo como o seguinte como root no computador remoto após a instalação do x11vnc :

/usr/bin/x11vnc -norc -forever -shared -bg -autoport 5900 -auth /var/run/lightdm/root/:0

A maneira mais fácil seria criar um serviço que executa isso para você na inicialização. Em distros que usam systemd , crie um arquivo /etc/systemd/system/x11vnc.service semelhante ao seguinte:

[Unit]
Description=VNC Server for X11
Requires=display-manager.service
After=display-manager.service

[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -norc -forever -shared -bg \
        -autoport 5900 \
        -rfbauth /etc/x11vnc.pass \
        -o /var/log/x11vnc.log \
        -auth /var/run/lightdm/root/:0

[Install]
WantedBy=graphical.target

Observe a opção -rfbauth . Você precisará criar o arquivo de senha com antecedência usando:

$ sudo x11vnc -storepasswd /etc/x11vnc.pass

Como alternativa, se você achar que não precisa de sessões VNC protegidas por senha, simplesmente remova a linha -rfbauth .

Ativar na inicialização com:

$ sudo systemctl enable x11vnc.service

Inicie manualmente com:

$ sudo systemctl start x11vnc.service

Agora você pode se conectar ao computador remoto com seu cliente VNC e assumir a sessão.

    
por 29.01.2016 / 19:57