LXC(Linux Containers)はカーネルレベルのスーパーchrootであるため、コンテナーにはどのような種類のビデオドライバーがあるのかと思っていました。
私のホストはbuntu 12.04 ATI gpuを備えた64ビットマシンです。 LXCコンテナーは同じドライバーにアクセスできますか?または、各コンテナにインストールする必要がありますか?
このスクリプトを見て、Steamをサウンドおよびビデオアクセラレーションで実行するLXCコンテナーを作成してください:
http://Bazaar.launchpad.net/~ubuntu-lxc/lxc/Steam-lxc/view/head:/Steam-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
ディレクトリとオーディオソケットでも同じことを行います。
# 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内のその環境変数を使用すると、(理論的には)ほとんどすべてのゲームをプレイできます。
宜しくお願いします!
OpenVZやLXCなどのコンテナーベースの「仮想化」テクノロジーは、Xen、KVM、VMwareなどとは異なり、ハードウェアを仮想化しません。別の大きな違いは、LXC/OpenVZコンテナーが単一のLinuxカーネルの同じインスタンスで実行されることです実際の仮想マシンは独自のカーネルを実行しています。
コンテナは同じカーネル内にあり、ハードウェアを管理しないため、同じドライバを「実行」していますが、それについての知識はありません。すべてのプロセスは単純にchrootされ、これはハードウェアドライバー(カーネルモジュール)から完全に独立しています。