我正在尝试设置我的 Linux 计算机来运行多个来宾操作系统,其中一个是 Windows VM,另一个是 Linux 容器。这里的目标是防止我弄乱主机系统,同时可以自由地操作基本操作系统并使用主机硬件。最终,除了在容器中运行我的桌面之外,我还希望运行图形加速模拟等。由于 Docker 内置了非常好的类似 git 的容器版本控制,因此使用它似乎是个好主意。也许 libvirt 与 LXC 一样好,但 docker 的特权模式使得不必为容器配置设备变得更容易。
我做了一些研究并已经提出了一些答案,但我很难将它们放在一起。
LXC背景
从 LXC 运行 X帮助我了解如何配置容器(即):
lxc.cgroup.devices.allow = c 226:0 rwm
并使用
mknod -m 666 dri/card0 c 226 0
在容器内连接到主机设备。
码头工人
从cuda - 从 docker 容器使用 GPU,我发现我可以通过 LXC 后端在 Docker 中使用相同的设置。
在我看来,如果 docker 容器在特权模式下运行,那么它可以正常访问 GPU,而无需这种额外的配置。因此,我启动了一个基本系统,安装了图形驱动程序、xorg-server、xorg-xinit 和窗口管理器来测试它。
第一次尝试
# startx
Cannot run from a console (or some message like that)
好吧,我以为我在 tty2 上。
# tty
/dev/console
这不是我所期望的。
# chvt 2
# tty
/dev/tty2
嗯,看来这确实有效。让我们再试# startx
一次。它启动了窗口管理器,光标位于中心。鼠标无反应。键盘无反应。让我们尝试用 更改 tty Ctrl-Alt+F3
。没有反应。好吧,看来我得重新启动了。
第二次尝试
# tty
/dev/console
# chvt 2
# tty
/dev/console
什么?我现在还不能改吗?
继续
又试了一次,我把它改成tty,startx又死机了。
现在怎么办?
所以,我现在陷入了僵局。我真的希望能够使用容器(首选 Docker,LXC 和 libvirt 也可以接受)作为我的日常操作系统运行,同时保持精简的主机操作系统。
最好在此处使用具有特权模式的 Docker,还是使用显式 LXC 后端并尝试上面列出的选项?
我已经计划使用 libvirt(可能在 vagrant-libvirt 下)来管理我的 Windows 虚拟机,那么在这种情况下我使用 libvirt 或 vagrant-LXC 的效果大致相同吗?
编辑:阅读LXC 与 Docker,我的感觉是,由于 Docker 和 Docker 容器适用于单一应用程序环境,因此也许最好使用 LXC 而不是 Docker 作为我的日常操作系统来运行。想法?
编辑:我发现,像 docker 一样,有一个 lxc-device 命令可以让我绕过 cgroups 和 mknod 步骤。在我能够让 x 启动并冻结我的系统之前,它现在只是出错了。也许我最终能弄清楚这一点,因为外面似乎没有人。
更新:我的鼠标可以工作。在来宾上,我安装了 xf86-input-mouse 和 xf86-input-keyboard。在主机上,我运行了以下命令:
# lxc-device -n g1 add /dev/input/mice
# lxc-device -n g1 add /dev/dri/card0
# lxc-device -n g1 add /dev/dri/controlD64
# lxc-device -n g1 add /dev/dri/renderD128
# lxc-device -n g1 add /dev/fb0
# lxc-device -n g1 add /dev/tty2
作品!
答案1
这个问题得到了我需要的答案。当然,我lxc-device
在配置文件中使用了 cgroup 定义来代替。然而,就我而言,如果我在不同的 tty 上启动键盘,我只能让键盘在 X 中工作。