Como iniciar o aplicativo X a partir do SSH [duplicado]

12

Eu tentei pesquisar este tópico no google, mas sem resultados significativos.

Eu preciso começar algum aplicativo GUI do terminal, mas não me importo com o que este aplicativo está me mostrando. Além disso, preciso iniciar algumas instâncias desse aplicativo em sessões diferentes. Ele está conectado com alguns testes automatizados de GUI, então eu sei o que quero e estou procurando uma resposta:).

Acho que os passos adequados devem ser:

  1. Iniciar nova sessão da janela X
  2. Obter meu novo id de sessão
  3. exporte-a para a variável env (export DISPLAY: 13.0)
  4. executar meu aplicativo

mas estou preso no primeiro passo. Alguém aqui teve problema semelhante?

--- EDITAR: 1) Eu não me importo com a saída da GUI - eu preciso apenas stdout e stderr do meu aplicativo. - é por isso que esta questão não é duplicada - conheça bem o google :). Eu não quero redirecionar a saída para minha própria GUI.

    
por Paweł Wojtal 08.06.2015 / 15:30

3 respostas

17

Se você não se importa em ver o que o aplicativo está fazendo, você pode fornecer um servidor x "virtual" com xvfb:

  

O Xvfb fornece um servidor X que pode ser executado em máquinas sem exibição   hardware e sem dispositivos de entrada física. Ele emula um burro   framebuffer usando memória virtual. O uso primário deste servidor foi   pretende ser o teste do servidor, mas outros usos novos para ele foram   encontrado, incluindo testes de clientes em relação a profundidades e   configurações, fazendo o processamento em lote com Xvfb como pano de fundo   motor de renderização, teste de carga, como uma ajuda para portar o servidor X para   uma nova plataforma e fornecer uma maneira discreta de executar aplicativos   que realmente não precisam de um servidor X, mas insistem em ter um assim mesmo.

Após instalá-lo, você pode iniciá-lo com:

sudo Xvfb :10 -ac -screen 0 1024x768x24 &

ele será executado em segundo plano e você iniciará seus clientes com:

DISPLAY=:10 your-client
    
por roadmr 08.06.2015 / 17:13
11

Um comando curto:

ssh -X <username>@<host> gedit &

de man ssh

-X      Enables X11 forwarding.
        This can also be specified on a per-host basis in a configuration file.

        X11 forwarding should be enabled with caution.  Users with the
        ability to bypass file permissions on the remote host (for the
        user's X authorization database) can access the local X11
        display through the forwarded connection. An attacker may then
        be able to perform activities such as keystroke monitoring.
  1. Verifique /etc/ssh/sshd_config no lado do servidor:

    sudo nano /etc/ssh/sshd_config
    

    para as linhas abaixo:

    X11Forwarding yes
    X11UseLocalhost no
    

    Reinicie o ssh srever, se você fez alterações:

    sudo service ssh restart
    
  2. Verifique /etc/ssh/ssh_config no lado do cliente:

    sudo nano /etc/ssh/ssh_config
    

    para as linhas abaixo

    ForwardX11 yes
    ForwardX11Trusted yes
    
por A.B. 08.06.2015 / 17:37
5

Você só precisa exportar DISPLAY =: id # em sua sessão ssh e a execução dos programas será executada na tela remota. Um exemplo rápido:

maythux@maythuxPC:~$ ssh testSSH@myServer
maythux@maythuxPC:~$ export DISPLAY=:0
maythux@maythuxPC:~$ gedit

Agora, gedit será executado no usuário chamado testSSH display

Você pode resumir tudo isso em um único comando:

ssh testSSH@myServer "DISPLAY=:0 nohup gedit"
    
por Maythux 08.06.2015 / 16:31