Virtualization

docker - 如何在容器中執行 x 桌面?

  • April 22, 2016

我正在嘗試將我的 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 - Using GPU from a docker container,我看到我可以通過 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一次。它啟動了視窗管理器,游標位於中心。沒有滑鼠反應。沒有鍵盤反應。讓我們嘗試用Ctrl-Alt+F3. 沒有反應。好吧,看來我將不得不重新啟動冷。

第二次嘗試

# tty
/dev/console
# chvt 2
# tty
/dev/console

什麼?現在改不了了?

繼續

再次嘗試後,我得到了它來更改tty,並且startx再次凍結了電腦。

現在怎麼辦?

所以,我現在陷入了僵局。我真的希望能夠使用容器——首選 Docker,也可以使用帶有 libvirt 的 LXC——作為我的日常作業系統執行,同時保持精簡的主機作業系統。

最好在這裡使用具有特權模式的 Docker,還是使用顯式 LXC 後端並嘗試上面列出的選項?

我已經計劃使用 libvirt(可能在 vagrant-libvirt 下)來管理我的 Windows 虛擬機,那麼在這種情況下使用 libvirt 或 vagrant-LXC 對我來說是否差不多?

編輯:閱讀LXC vs. 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

作品!

這個問題有我需要的答案。當然,我lxc-device在配置文件中使用而不是 cgroup 定義。但是,就我而言,如果我在不同的 tty 上啟動它,我只能讓鍵盤在 X 中工作。

引用自:https://unix.stackexchange.com/questions/191289