[lxc-users] Graphics and sound with LXD

zztest at openmailbox.org zztest at openmailbox.org
Fri Apr 1 07:43:10 UTC 2016


On 2016-03-31 18:11, efersept wrote:
>> I don't know if you got the script from  Stéphane's LXC article
> (https://www.stgraber.org/2014/02/09/lxc1-0-gui-in-containers/ [1]),
> but in it he say's it is used to "tell pulseaudio on the host to bind
> _/home/ubuntu/_.pulse_socket in the container, checking that it’s
> not already setup."
> 
>  Well initially I got the script from flockport but went back to
> Stéphane's LXC article
> (https://www.stgraber.org/2014/02/09/lxc1-0-gui-in-containers/ [1])
> and did realize that I was using a script for privileged containers.
> Fixed the script and it is still having problems. The script when
> executed manually does not return any errors however pulse still does
> not export in the container and the .pulse_socket is not created in
> /home/ubuntu directory of the container and yes I specified the entire
> correct path in the script.
>  I believe the problem may be id mapping as described in the
> aforementioned blog series. The following would be added to the lxc
> config file:
> 
> lxc.id_map = u 0 100000 1000
> lxc.id_map = g 0 100000 1000
> lxc.id_map = u 1000 1000 1
> lxc.id_map = g 1000 1000 1
> lxc.id_map = u 1001 101001 64535
> lxc.id_map = g 1001 101001 64535
> 
>  the user ubuntu in the container needs to be mapped to the same user
> id as the normal user in the host. I am unaware of how this can be
> done in the LXD config file or if an equivalent configuration can even
> be made with LXD.
> 
>  I think that if someone knows how this can be done in the LXD config
> file, and also how hooks can be implemented, that sound could be
> quickly enabled. If someone has any ideas please feel free to share
> them.
> 
>  >Unfortunately I do not know how to translate that to LXD. As far as
> I can tell (by looking at the lxc-to-lxd script) hooks are not
> supported yet. Perhaps there is a workaround?
> 
>  >Could you please post an example of the lxd config commands you used
> to make your graphics work?
> 
>  As I mentioned this was surprisingly easy. I found the following
> commands that someone had posted in an old lxc-users mailing. Sorry, I
> can not remember who it was.
> 
>  lxc config device add qt5-development /dev/nvidia0 unix-char
> path=/dev/nvidia0
> 
>  lxc config device add qt5-development /dev/nvidiactl unix-char
> path=/dev/nvidiactl
> 
>  lxc config device add qt5-development /dev/nvidia-uvm unix-char
> path=/dev/nvidia-uvm
> 
>  lxc config device add qt5-development /dev/video0 unix-char
> path=/dev/video0
>  lxc config device add qt5-development /dev/tty0 unix-char
> path=/dev/tty0
> 
>  lxc config device add qt5-development /dev/tty7 unix-char
> path=/dev/tty7
> 
>  lxc config device add qt5-development /dev/tty8 unix-char
> path=/dev/tty8
> 
>  lxc config device add qt5-development /dev/fb0 unix-char
> path=/dev/fb0
>  e99dd6437665
>  lxc config device add qt5-development /dev/dri unix-char
> path=/dev/dri
> 
>  lxc config device add qt5-development /dev/dri/card0 unix-char
> path=/dev/dri/card0
> 
> I replicated everything except the nvidia lines as they do not apply
> to me. Also I found that I was not able to "mount" directories with
> this command like /dev/dri and /dev/snd. I had to execute a line for
> each device in these directies such as /dev/dri/card0 and so on. After
> this the config file looked like the following:
> 
> name: gc1
>  profiles:
>  - default
>  config:
>    volatile.base_image:
> e99dd64376651ed3b81bf312d2cfde1ef0a58ecd296a9ae4b654bda733f832ee
>    volatile.eth0.hwaddr: 00:16:3e:0f:6d:36
>    volatile.last_state.idmap:
> '[{"Isuid":true,"Isgid":false,"Hostid":500000,"Nsid":0,"Maprange":458752},{"Isuid":false,"Isgid":true,"Hostid":500000,"Nsid":0,"Maprange":458752}]'
>  devices:
>    /dev/dri/card0:
>      path: /dev/dri/card0
>      type: unix-char
>    /dev/dri/controlD64:
>      path: /dev/dri/controlD64
>      type: unix-char
>    /dev/dri/renderD128:
>      path: /dev/dri/renderD128
>      type: unix-char
>    /dev/fb0:
>      path: /dev/fb0
>      type: unix-char
>    /dev/snd/controlC0:
>      path: /dev/snd/controlC0
>      type: unix-char
>    /dev/snd/hwC0D0:
>      path: /dev/snd/hwC0D0
>      type: unix-char
>    /dev/snd/hwC0D3:
>      path: /dev/snd/hwC0D3
>      type: unix-char
>    /dev/snd/pcmC0D0c:
>      path: /dev/snd/pcmC0D0c
>      type: unix-char
>    /dev/snd/pcmC0D0p:
>      path: /dev/snd/pcmC0D0p
>      type: unix-char
>    /dev/snd/pcmC0D3p:
>      path: /dev/snd/pcmC0D3p
>      type: unix-char
>    /dev/snd/pcmC0D7p:
>      path: /dev/snd/pcmC0D7p
>      type: unix-char
>    /dev/snd/pcmC0D8p:
>      path: /dev/snd/pcmC0D8p
>      type: unix-char
>    /dev/snd/seq:
>      path: /dev/snd/seq
>      type: unix-char
>    /dev/snd/timer:
>      path: /dev/snd/timer
>      type: unix-char
>    /dev/tty0:
>      path: /dev/tty0
>      type: unix-char
>    /dev/tty7:
>      path: /dev/tty7
>      type: unix-char
>    /dev/tty8:
>      path: /dev/tty8
>      type: unix-char
>    /dev/video0:
>      path: /dev/video0
>      type: unix-char
>    root:
>      path: /
>      type: disk
>  ephemeral: false
> 
> Then launched gc1 and ssh -X ubuntu at 10.0.1.16 and launched a browser
> and chromium-bsu. Both worked flawlessly but without sound.
> 
>  >I wonder why more people are not asking/answering questions about
> LXD GUI containers; information on the subject is very scarce. Even
> Stéphane's new series of LXD articles does not cover it. Is LXD not
> recommended for GUI use?
> 
>  Me as well. it seems like an important use case. My guess is the
> developers are avoiding their creation getting labeled as yet another
> application container system.
> 
> On 03/31/2016 01:17 AM, lxc-users-request at lists.linuxcontainers.org
> wrote:
> 
>> Re: [lxc-users] Graphics and sound with LXD
> 
> 
> 
> Links:
> ------
> [1] https://www.stgraber.org/2014/02/09/lxc-1-0-gui-in-containers/
> 
> _______________________________________________
> lxc-users mailing list
> lxc-users at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-users


Thanks for that.  The commands you mentioned were posted by Pete Osborne 
in a response to me on 03/11. I haven't been able to use them 
successfully, but I will now try your method.

Since one can apply multiple profiles to a container, I am trying to 
create a "GUI profile" that I can apply to any container that requires 
it. My containers are unpriviledged, so I don't know if any of this will 
work. It would be great to get some guidance from the devs.

In the original lxc article, the config was something like:

  lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir

Are the "bind,optional,create=dir" params implied in your config? If 
not, where are they set?




More information about the lxc-users mailing list