Fast X para convidado LXC no host local?

12

Como posso executar aplicativos X dentro de um contêiner LXC de maneira eficiente?

ssh -Y guest

é muito lento - não há aceleração gráfica ssh -Y- tudo precisa passar pela rede virtual com o protocolo X11 tradicional.

Ser capaz de copiar e colar entre aplicativos host e convidado é desejável, mas não essencial. A execução de dois servidores X, um para o host e outro para o convidado, é (para meus propósitos) essencial.

Não consigo executar um Xorg nativo de dentro do convidado porque ele reclama de /dev/tty0falta, e não posso mknodesse dispositivo no convidado porque tenho uma permissão negada, mesmo quando o faço como root.

Robin Green
fonte

Respostas:

12

Você pode querer experimentar xpra ou NX, VNC, etc. Também dê uma olhada no VirtualGL, se desejar a aceleração GL.

Se você puder compartilhar um diretório com o host, poderá usar o mmap com o xpra (especificando o caminho para o arquivo mmap), o que fornece melhorias de desempenho muito significativas.

totaam
fonte
Alguém pode compartilhar um exemplo seguro de como usar o Xpra e o Xephyr com o LXC?
baptx
3

NOTA : Essa abordagem é um pouco complicada. Também não suporta copiar e colar entre host e convidado - e é totalmente inseguro!

  1. Adicione /tmpcomo um sistema de arquivos adicional na configuração do convidado, que passa para /tmpo host.
  2. Verifique se o servidor X não está configurado para aceitar conexões de rede de qualquer tipo, porque a próxima etapa desativa a segurança do X.
  3. Digite xhost +uma janela do terminal.
  4. Inicie o convidado LXC
  5. Entre como seu usuário comum desejado dentro do convidado (ou seja, não como root) e digite

DISPLAY=:0 Xephyr :2 -screen 1024x768 -dpi 96 &

DISPLAY=:2 /etc/X11/xinit/Xsession

dentro do convidado (substituindo ambos os 2s pelo número da tela a ser usada se você estiver usando isso para conectar-se a várias VMs LXC.) Ajuste os parâmetros de resolução ( -screen) e DPI ( -dpi) para se adequarem.

O que isso faz é configurar conexões "proxy" para um servidor X aninhado Xephyr em execução no convidado (que usa soquetes de domínio UNIX e a extensão MIT-SHM) e outra conexão do Xephyr com o servidor X host (que usa soquetes de domínio UNIX , mas não posso, tanto quanto eu possa determinar, usar o MIT-SHM, devido ao design do LXC). Essa parece ser a configuração mais rápida possível com um convidado LXC, pelo menos com o driver de código aberto do meu hardware (nvidia).

Robin Green
fonte
Existe uma maneira segura de usar o Xephyr com LXC? O isolamento do X11 com o Xephyr é suportado pelo firejail, então acho que também podemos fazê-lo corretamente com o LXC.
baptx