SSH: iniciar programas da GUI na tela remota, não no X

11

O problema

A maioria das pessoas deseja se conectar a um servidor via ssh com a opção "-X" para executar programas da GUI no host remoto usando a exibição do cliente. Eu gostaria de executar programas da GUI no monitor físico conectado ao servidor. Isso é possível ? Deixe-me ser mais específico:

Minha situação é a seguinte: Tenho uma estação de trabalho sem teclado ou mouse, mas possui um monitor conectado a ela. Gostaria de fazer o SSH com o meu laptop e poder iniciar algum programa gráfico, como xeyes ou ssvnc, e fazer com que ele apareça no monitor da estação de trabalho.

[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: informações extras

Talvez eu devesse explicar algumas coisas mais claramente:

  • Tenho acesso ao sudo na estação de trabalho, posso instalar qualquer coisa, se necessário.
  • A estação de trabalho está executando a interface do usuário GNOME.
  • Antes de desconectar o teclado e o mouse da estação de trabalho, entrei em uma sessão do GNOME. Podemos ver minha área de trabalho GNOME no monitor da estação de trabalho atualmente.
  • Não desejo executar programas do meu laptop na estação de trabalho. Eu gostaria de executar programas de estação de trabalho na estação de trabalho. Os xeyes ou qualquer executável é encontrado no servidor remoto e deve ser executado no monitor do servidor remoto
  • Entendo que realizar isso me deixará em uma situação em que meu cursor não será conectado à interface. Não consigo clicar nas coisas. Isso está ok.

Qualquer ajuda muito apreciada!

xApple
fonte
Você executou xhost +no seu servidor?
karlphillip
Eu acho que essa também é uma pergunta interessante, por exemplo, se você tem 3 PCs ubuntu executando o Synergy para usar o mesmo teclado e mouse entre os 3 ... quando você faz o login, é necessário fazer o login 3 vezes. seria bom criar um script que faça o login nos outros dois PCs, quando você fizer login no PC principal.
Sverre 03/10

Respostas:

5

qualquer aplicativo xlib deve se conectar a um xserver. você precisa informar ao aplicativo a conexão com o servidor:

  • configurando a variável de ambiente DISPLAY
  • usando um sinalizador de linha de comando como -display

o primeiro xserver geralmente pode ser alcançado pela cadeia de conexão ': 0'. então, tente o seguinte:

xeyes -display :0

ou isto

env DISPLAY=:0 xeyes
akira
fonte
Em muitos casos (como quando iniciado pelo GDM do GNOME), as configurações XAUTHORITYtambém serão necessárias, pois o servidor X11 usará um arquivo Xauthority temporário.
user1686
Interessante, depois de definir a variável $ DISPLAY, agora recebo, além da mensagem "Erro: Não é possível abrir a tela", a mensagem "Nenhum protocolo especificado" ao tentar iniciar xeyes.
xApple
@ grrawity Obrigado pelo conselho. Posso perguntar como definiria minha XAUTHORITY para que meu comando funcionasse?
xApple
5

Esta estação de trabalho está executando um servidor X Windows? Sem isso, tudo isso é discutível.

Você precisa de ALGO para processar os dados em gráficos, pixels, cores e locais. Um 'monitor' é inútil sem algum tipo de software para executá-lo.

Supondo que seja. (mas a partir do texto, com certeza soa o contrário)

Dados os nomes de host (e a resolução DNS apropriada por meio de / etc / hosts ou DNS ou o que for) de 'estação de trabalho' e 'laptop' ... se não, substitua os nomes de host da máquina por endereços IP apropriados.

ssh workstation
xhost +laptop

você pode sair da estação de trabalho nesse momento, pois isso define as permissões no Xserver da estação de trabalho para permitir a conexão do 'laptop'.

se você iniciar seus programas com o conjunto de variáveis ​​DISPLAY adequado, poderá fazer com que os aplicativos sejam exibidos na estação de trabalho enquanto estiver executando no seu laptop.

DISPLAY=workstation:0 xeyes

-ou-

export DISPLAY=workstation:0
xeyes

qualquer um dos métodos funcionará, o último fará com que qualquer coisa relacionada ao X11 seja exibida na estação de trabalho quando iniciada a partir desse shell. (espero que isso faça sentido)

A linha 'xhost' é permitir permissão para o laptop se conectar ao Xserver da estação de trabalho. Sem ele, você terá permissão negada, a menos que inicie o servidor X sem permissões, o que não é realmente recomendado. A proteção do 'xhost' ainda é esfarrapada, pois os dados são enviados em 'texto sem formatação' entre o laptop e a estação de trabalho e podem ser detectados, mas é uma solução fácil.

Se você deseja privacidade, precisará configurar algum tipo de túnel criptografado entre o laptop e a estação de trabalho (porta 6000 para exibição: 0). Sim, fica estranho neste momento.

Se você estiver em um ambiente controlado, o uso do comando 'xhost + laptop' será suficiente; se você deixar a parte 'laptop' desse comando 'xhost +', QUALQUER PESSOA poderá se conectar ao Xserver e exibir as coisas.

Lembre-se de que o mouse NÃO está 'conectado' à estação de trabalho Xserver e você NÃO poderá manipular janelas ou clicar nas coisas.

Se você deseja que o mouse seja conectado, recomendo algo como x2x, synergy, vnc ou um aplicativo de compartilhamento de tela baseado no X Windows.

lornix
fonte
Obrigado pela sua resposta! Você está certo, talvez eu precise especificar mais algumas coisas: (1) A estação de trabalho está executando a interface de usuário do GNOME (2) Não desejo executar programas do meu laptop. Xeyes ou qualquer outra coisa que deve ser executada na estação de trabalho com o monitor da estação de trabalho (3) Tudo bem, entendo que meu cursor não estará conectado.
xApple
Ah, então você realmente só precisa ssh na estação de trabalho, defina a variável DISPLAY como 'localhost: 0' (ou apenas ': 0') e inicie o aplicativo. Você ainda precisará lidar com permissões (xhost + localhost provavelmente é a melhor resposta) e nohup ou &! (background e disown) ou comandos bg / disown do shell para que o aplicativo não saia quando você se desconecta. (a menos que isso é o que você quiser, é claro)
lornix
Ah, talvez meu problema seja apenas um problema de permissão. Embora, se eu executar "xeyes" como raiz, a mensagem de erro seja a mesma. Se você postar uma resposta que resolve os problemas de permissão, posso marcá-la como resolvida!
xApple
Alguém está logado na sessão do X windows na estação de trabalho? Sem isso, o código que escuta as conexões do programa ainda não está ativo, apenas o material de login. (Estou simplificando bastante!) Tente ssh'ing na estação de trabalho e, em seguida, 'startx', então você poderá se conectar ao monitor. Outra maneira é usar um servidor X bare bones, digitando 'X: 0', definindo a variável DISPLAY e executando 'xhost + laptop' (ou apenas 'xhost +'). Mas isso está ficando um pouco mais baixo para a maioria. (Ótimo para testar!)
lornix
Sim, entrei em uma sessão do GNOME na estação de trabalho antes de desconectar o teclado e o mouse. No entanto, tentei executar o comando "startx" da minha sessão ssh. A mensagem de erro era a seguinte: "X: usuário não autorizado a executar o servidor X, interrompendo".
xApple 28/09