Como eu executo aplicativos X11 remotamente?

4

Como posso executar aplicativos X11 hospedados em um servidor remoto, considerando os seguintes objetivos:

  • Executa qualquer coisa que seja executado localmente no servidor. Isso inclui aplicativos OpenGL que usam GLX .
  • A falta de integração com a área de trabalho local, ou seja, os aplicativos parecem estar sendo executados localmente, sem uma área de trabalho separada. Assim, eu preciso de uma solução X11, não de um protocolo wrapper.
  • De preferência, permite que os aplicativos continuem em execução se eu for desconectado; então, eu posso reabrir os aplicativos em execução mais tarde quando eu reconectar.

Eu vi muitos conselhos flutuando aqui no superusuário, mas muito disso é uma correção parcial ou simplesmente ruim.

  • simples ssh X11-Forwarding está fora: não é possível executar determinados aplicativos, especialmente aqueles que dependem da extensão GLX.
  • Configurar LIBGL_ALWAYS_INDIRECT=1 não funciona para mim.
  • Xephyr também está fora. Atualmente, ele não suporta o GLX, embora eu tenha visto algum trabalho do GLX na árvore de desenvolvimento. Talvez no futuro, esse seja o caminho mais limpo.
  • xmove também está fora. É muito antigo para considerar mais.
  • O VNC está fora. Ele encaminha toda a área de trabalho e não pode ajustar o protocolo X.

EDIT: Eu lutei durante um fim de semana para fazer várias sugestões, e xpra é o que funciona melhor. Eu descrevi minha configuração em uma resposta abaixo, e espero que ajude alguém.

    
por jpaugh 18.06.2013 / 23:20

1 resposta

7

Xpra (como mencionado aqui ) faz o que eu quero. Ele permite a execução de aplicativos X arbitrários, que podem ser encaminhados para vários clientes, no mesmo computador ou em outra máquina. Ele também suporta a execução de aplicativos OpenGL e permite que seus aplicativos continuem sendo executados mesmo depois da última desconexão do cliente, o que possibilita a reconexão posterior.

xpra vem em duas partes: um cliente e um servidor. Para inicializar o servidor, execute o seguinte na máquina remota:

$ xpra start :100

Isso inicia xpra em um novo display X. (Há uma solução alternativa para usar com um proxy. )

Para ter um aplicativo controlado por xpra , execute-o na mesma tela que o servidor xpra , assim:

$ export DISPLAY=:100
$ firefox&
$ blender&
...

Isso tudo pode ser feito através de uma conexão ssh (com ou sem o X11-Forwarding) sem problemas.

Para inicializar um cliente, siga um destes procedimentos:

$ ssh -X user@remotehost
<gain remote connection>
$ xpra attach :100

ou

$ xpra attach ssh:user@remotehost:100

Observe que o último requer que o cliente xpra esteja instalado em sua máquina local; o primeiro não.

O cliente xpra colocará um ícone na barra / painel de tarefas do seu gerenciador de janelas, permitindo que você desconecte o cliente. (Ou, você pode simplesmente matá-lo, desde que tenha cuidado para não matar o servidor.) Você pode então reconectar mais tarde, contanto que o servidor xpra ainda esteja em execução. Se você tiver um único servidor xpra em execução no host, você também pode simplesmente omitir o número de exibição e xpra attach descobrirá isso.

Um recurso muito interessante de xpra é que ele permite que você inicie um servidor em uma exibição preexistente. Isso permite recuperar uma sessão se o servidor xpra travar (contanto que o servidor X nesse monitor ainda esteja em execução). Para fazer isso, execute

$ xpra start --use-display :100

Advertências:

  • xpra é executado como gerenciador de janelas. Embora funcione muito bem com a incorporação em outros gerenciadores de janelas, ele não funciona tão bem com os aplicativos X: ele não permite, por exemplo, rxvt-unicode para remover sua barra de título; Além disso, ele não diz ao Windows quanto espaço ele tem para trabalhar na tela, por exemplo, caixas suspensas e menus ficam fora da tela. Eu acho que o último problema é uma questão de consertar minha configuração, no entanto.

  • As teclas são repetidas. Freqüentemente. Isso pode ser resolvido usando xpra attach --no-keyboard-sync , mas a página man avisa que isso não funciona bem com certos jogos. Estou mantendo meus dedos cruzados que não me vejo desejando usar um desses jogos.

Por estas razões, Xephyr pode muito bem ser uma solução melhor (uma vez que suporta GLX), porque ele é executado como um servidor X, não como gerenciador de janelas. Eu não investiguei se ele suporta a retomada de sessões anteriormente desconectadas, no entanto.

    
por 18.06.2013 / 23:20