快轉到主要內容

Distrobox使用例:Docker跑GNOME X11桌面環境

Linux系統 虛擬機與容器技術 Distrobox GNOME Docker
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

我有個夢想,就是在一個Linux桌面無縫體驗另一個桌面環境,而不需要虛擬機。

比如在Arch Linux跑Fedora容器,體驗最新版GNOME或KDE,看看最新的界面長怎樣。

Distrobox可以做到這點。儘管Distrobox能直接跑容器內的圖形程式,跑桌面環境有點多餘。

Distrobox作者宣稱這是實驗性功能, 他的作法是在容器裝桌面環境後,將Desktop Entry加到宿主機的Diaplay Manager,這樣登入時就可以進入容器內部。

但我不想這樣,因為得登出現有工作階段。我比較想要「一個螢幕二個桌面環境」,像是Microsoft WSLg一樣。

我想到的辦法是用Weston或Xephyr跑nested session,如此便可二個桌面環境重疊。

Fedora GNOME on Arch Linux KDE

1. 新增容器
#

選用Fedora的理由是他的套件很新,且還算穩定。

想跑Ubunut GNOME的可以參考這篇的環境變數: 在 WSL2 中使用 Ubuntu 桌面環境

  1. 在宿主機安裝 Distrobox

  2. 新增最新穩定版Fedora容器

distrobox create --name fedora-gnome --image fedora --home ~/distrobox/fedora-gnome

distrobox enter fedora-gnome

cd
  1. 登入後掛載必要目錄
sudo umount /run/systemd/system
sudo rmdir /run/systemd/system
sudo ln -s /run/host/run/systemd/system /run/systemd
sudo mkdir /run/dbus
sudo ln -s /run/host/run/dbus/system_bus_socket /run/dbus/
  1. 安裝GNOME套件
sudo dnf install @gnome-desktop

2. 啟動桌面環境
#

  1. 開一個新的終端機,在宿主機安裝Xephyr
sudo pacman -S xorg-server-xephyr
  1. 新增Xephyr視窗。-resizeable會導致黑螢幕所以不使用。
Xephyr -br -ac -noreset  -screen 1280x720 :1
  1. 回到Distrobox的終端機,使用以下環境變數啟動GNOME X11工作階段
export XDG_CURRENT_DESKTOP=GNOME
export XDG_CURRENT_DIR=GNOME
export DISPLAY=:1
gnome-shell --x11 &
  1. Xephyr視窗就會出現GNOME了。

對桌面按右鍵,調整解析度讓視窗變小。

理論上GNOME顯示應該只有容器內的程式才對,但有趣的是宿主機的Flatpak程式在容器內部也看得到。

有些程式可能無法從應用程式列表開啟,這時請從Distrobox的終端機啟動,看看錯誤訊息為何。

3. 啟動其他桌面環境的作法
#

如果GNOME開不起來,可以嘗試其他桌面環境。

Fedora的KDE套件:@kde-desktop,啟動方法:startplasma-x11

XFCE:@xfce-desktop-environment,啟動方法:startxfce4

Cinammon:@cinnamon-desktop,啟動方法:cinammon-session

相關文章

Linux系統各發行版安裝Docker Engine教學
Linux系統 虛擬機與容器技術 Docker Linux
ReDroid教學:用Docker跑Android系統,在x86電腦玩ARM手機遊戲
Linux系統 虛擬機與容器技術 ReDroid Android Docker Linux Scrcpy
Linux用Docker容器跑黑蘋果macOS ~ Docker-OSX安裝教學
Linux系統 虛擬機與容器技術 MacOS Docker QEMU

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。