¿Fast X para invitados LXC en localhost?


12

¿Cómo puedo ejecutar aplicaciones X dentro de un contenedor LXC de manera eficiente?

ssh -Y guest

es demasiado lento, no hay aceleración de gráficos ssh -Y, todo tiene que viajar a través de la red virtual con el protocolo X11 tradicional.

Poder copiar y pegar entre aplicaciones de host e invitados es deseable pero no esencial. Ejecutar dos servidores X, uno para el host y otro para el invitado, es (para mi propósito) esencial.

No puedo ejecutar un Xorg nativo desde el invitado porque se queja de /dev/tty0que falta, y no puedo mknodese dispositivo en el invitado porque me niegan un permiso, incluso cuando lo hago como root.

Respuestas:


12

Es posible que desee probar xpra o NX, VNC, etc. También eche un vistazo a VirtualGL si desea la aceleración GL.

Si puede compartir un directorio con el host, puede usar mmap con xpra (que especifica la ruta al archivo mmap) que proporciona mejoras de rendimiento muy significativas.


¿Alguien puede compartir un ejemplo seguro sobre cómo usar Xpra y Xephyr con LXC?
Baptx

3

NOTA : este enfoque es un poco hack. Tampoco admite copiar y pegar entre el host y el invitado, ¡y es totalmente inseguro!

  1. Agregue /tmpcomo un sistema de archivos adicional en la configuración del invitado, que pasa a través /tmpdel host.
  2. Asegúrese de que su servidor X no esté configurado para aceptar conexiones de red de ningún tipo, ya que el siguiente paso deshabilita la seguridad X.
  3. Escriba xhost +en una ventana de terminal.
  4. Comience el invitado LXC
  5. Inicie sesión como su usuario ordinario deseado dentro del invitado (es decir, no como root) y escriba

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

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

dentro del huésped (reemplazando ambos 2s con el número de la pantalla que se usará si está usando esto para conectarse a múltiples máquinas virtuales LXC). Ajuste los parámetros de resolución ( -screen) y DPI ( -dpi) para adaptarlos.

Lo que esto hace es configurar conexiones "proxy" a un servidor X anidado Xephyr que se ejecuta en el invitado (que usa los sockets de dominio UNIX y la extensión MIT-SHM) y otra conexión desde Xephyr a su servidor X host (que usa sockets de dominio UNIX , pero no puedo, por lo que puedo determinar, usar MIT-SHM, debido al diseño de LXC). Esta parece ser la configuración más rápida posible con un invitado LXC, al menos con el controlador de código abierto para mi hardware (nvidia).


¿Hay alguna forma segura de usar Xephyr con LXC? El aislamiento X11 con Xephyr es compatible con firejail, así que creo que también podemos hacerlo correctamente con LXC.
Baptx
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.