自从龙芯(Linux 容器)是内核级的超级 chroot,我一直想知道容器有什么样的视频驱动程序:
我的主人是Ubuntu 12.04带有 ATI gpu 的 64 位机器。LXC 容器是否可以访问相同的驱动程序?还是需要在每个容器上安装它们?
答案1
请查看此脚本来创建一个运行具有声音和视频加速功能的 Steam 的 LXC 容器:
http://bazaar.launchpad.net/~ubuntu-lxc/lxc/steam-lxc/view/head:/steam-lxc
魔法就在这里:
LXC 之外:
# Add the bind mounts to the container's fstab
self.container.set_config_item("lxc.mount.entry",
"/tmp/.X11-unix tmp/.X11-unix "
"none bind,ro")
self.container.set_config_item("lxc.mount.entry",
"/dev/dri dev/dri none bind,ro")
self.container.set_config_item("lxc.mount.entry",
"%s/pulse.socket home/%s/.pulse_socket "
"none bind,ro" % (self.config_path,
self.user.pw_name))
我们通过绑定挂载目录来导出 X11 /tmp/.X11-unix
,以允许容器使用主机 X11。对/dev/dri
目录和音频套接字执行相同操作。
LXC 内部:
# Get pulseaudio to listen on the socket
with self.user_privileges():
subprocess.call(['pactl', 'load-module',
'module-native-protocol-unix',
'socket=%s' % self.pulse_socket,
'auth-cookie-enabled=0'])
# Start steam
self.run_command(
["steam"], {'DISPLAY': os.environ['DISPLAY'],
'PULSE_SERVER': "/home/%s/.pulse_socket" %
self.user.pw_name})
使用pactl
unix 套接字与主机脉冲音频服务器通信,然后导出套接字和DISPLAY
环境变量以允许 steam 使用本地 X11 服务器和套接字到音频服务器。
看一下脚本并享受它:)
利用 LXC 内部的环境变量,您(理论上)可以玩几乎所有的游戏。
此致!
答案2
与 Xen、KVM、VMware 等不同,基于容器的“虚拟化”技术(例如 OpenVZ 和 LXC)不会虚拟化任何硬件。另一个主要区别是 LXC/OpenVZ 容器在单个 Linux 内核的同一个实例中运行,而真实的虚拟机则运行自己的内核。
由于容器位于同一个内核中,不管理任何硬件,因此它们“运行”同一个驱动程序,但它们对此一无所知。所有进程都只是 chroot 的,这完全独立于硬件驱动程序(内核模块)。
答案3
据我所知,lxc 容器将可以访问驱动程序。请访问此网站了解更多信息 http://libvirt.org/drvlxc.html