快轉到主要內容

透過rpm-ostree rebase更換Linux的桌面環境,快速進行DE Hopping

· 民國115年丙午年
·
切換繁體/簡體
分類 Linux系統 Linux使用技巧
標籤 OSTree Distro-Hopping Fedora GNOME KDE Plasma Flatpak
目錄

你喜歡Distro-hopping,那有想過DE-hopping嗎?從GNOME換到KDE Plasma,再換到XFCE,甚至用極簡的Sway?將一切交給OSTree管理吧!你們要將一切的憂慮卸給祂,因為祂顧念你們。

在採用Atomic技術的Linux發行版,用rpm-ostree可以嘗試各種桌面環境,決定哪個桌面比較適合你再繼續用。不用重裝系統。

這是我看了Fedora Magazine得出的想法。

Linux允許多個桌面環境並存。

德國哲學家叔本華說過,人生如同鐘擺,不斷在痛苦和無聊之間搖擺。我想Linux用戶喜歡不斷折磨自己進行distro-hopping,就是一種砥礪哲學悟性的方式。

我常常幹這種事,因為覺得GNOME難用就裝KDE Plasma來用,可是又覺得KDE Plasma不穩定回去用GNOME,如此往復。

以前Fedora要安裝多重桌面環境的做法是透過dnf group install,讓多個桌面環境並存。因為Display Manager允許登入多個desktop session,所以在登入介面使用者可以選擇要啟動哪個桌面。可是請神容易送神難,日後要移除桌面環境的時候可能因為依賴關係誤刪關鍵組件。此外,一些桌面環境如果Display Manager錯誤,可是不會讓你正常使用的,例如GNOME就強制依賴GDM,用SDDM會無法鎖定螢幕。

另外一種方法是雙重開機,裝不同的系統體驗桌面環境,然後/home分區共用這樣。可是,這樣又顯的太麻煩了些。

在作業系統邁入映像檔部署的時代之後,包含桌面環境與Linux核心在內的檔案系統可以被視為一個整體的OCI映像檔。因此透過rpm-ostree rebase的功能,就能將目前系統映像替換為搭載其他桌面的映像。

概念圖如下:

使用者家目錄和/etc的資料會保留下來。且如果你程式主要透過Flatpak安裝的話,也不需要重裝程式。重開機後僅是桌面環境變了而已。雖說無法兩個桌面同時共存,但是大部分時候你也不想看到其他桌面的系統程式出現互相干擾吧?

我自己的一個具體例子是,曾經需要幫Surface Go 2測試適合的桌面環境,我就用這種方式在KDE Plasma與GNOME桌面之間來回切換,不用重裝整個Fedora Atomic系統。

GO! OSTree, IS GOD.

1. Fedora Atomic桌面環境有哪些
#

Fedroa Atomic Desktop是一個大型專案的總稱,下轄許多Spin版本的桌面。目前的桌面的映像檔有:

  • GNOME (Silverblue)
  • KDE Plasma (Kinoite)
  • COSMIC (Cosmic-atomic)
  • Sway (Sericea)
  • Budgie (Onyx)

未來可能還會有更多桌面納入,考慮到未來性應該是Wayland桌面優先。另外這些Spin的命名讓人困惑,未來除了Silverblue和Kinoite保留之外,其他Spin都是直接用桌面原名稱呼了。

2. 確認遠端可用映像檔
#

  1. 這裡要用ostree指令,預設的遠端儲存庫是Fedora專案的
sudo ostree remote refs fedora
  1. 然後就會看到所有可用映像
# 範例輸出
fedora:fedora/43/x86_64/cosmic-atomic
fedora:fedora/43/x86_64/kinoite
fedora:fedora/43/x86_64/onyx
fedora:fedora/43/x86_64/sericea
fedora:fedora/43/x86_64/silverblue
  1. 當然除了Fedora專案以外,你也可以用ostree remote add指令匯入第三方的GitHub Container Registry,讓你rebase到Universal Blue (如Bazzite) 提供的映像檔,或是自己建置的映像。本文暫不討論rebase到自訂映像檔的操作,用Fedora專案的就好。

3. 處理layered packages
#

為了防止我的layered packages與即將切換的映像檔的套件衝突,目前我是手動把layered packages列表複製下來,在rebase完成之後再把他們裝回來。

另外一種作法是使用rpm-ostree local commit,將你目前layered packages與原本系統的基礎映像,融合成為一個新的本機映像檔。這樣的話可以更方便退回到那個狀態。只是,這樣未來會很難更新系統,因為Fedora上游發表的映像檔,未來更新還是蓋掉你的local layered packages。

由於這裡只是移除套件,程式設定檔應該不會受影響才對。

  1. 查看目前系統版本
sudo rpm-ostree status
  1. 將它列出的layered pacakges列表複製下來
# 範例輸出
● fedora:fedora/43/x86_64/kinoite
                  Version: 43.20260304.0 (2026-03-04T00:31:30Z)
               BaseCommit: 6be04164e31b9572ef0754ded2a3d42c761c68f7c831e913927e85693312e19d
             GPGSignature: Valid signature by C6E7F081CF80E13146676E88829B606631645531
          LayeredPackages: distrobox fcitx5 fcitx5-chewing fcitx5-chinese-addons fcitx5-configtool fcitx5-gtk3 fcitx5-gtk4 fcitx5-qt fcitx5-qt6
                           gwenview htop igt-gpu-tools iio-sensor-proxy kamoso kate libcamera-gstreamer libcamera-qcam libcamera-tools mpv
                           nvtop tailscale v4l2loopback vim vlc
            LocalPackages: rpmfusion-free-release-43-1.noarch rpmfusion-nonfree-release-43-1.noarch
  1. 移除所有layered packages
sudo rpm-ostree reset
  1. 重開機
sudo systemctl reboot

4. 開始rebase映像檔
#

  1. 為了防止無法開機,可以先把你認為目前穩定的系統版本給釘住,讓它不要被系統自動移除:
sudo rpm-ostree status

sudo ostree admin pin 數字
  1. 然後開始rebase,舉例來說,我現在要從Kinoite切換到Silverblue,用以下指令切換。最好是對應目前Fedora版本的,不要隨便升級或者降級大版本。
sudo rpm-ostree rebase fedora:fedora/43/x86_64/silverblue
  1. 通常開機啟動的Display Manager的服務應該會在rebase之後自己替換掉,變成桌面對應的Display Manager,像GNOME就應該用GDM。

  2. 看看目前Systemd的Display Manager服務指向哪個Display Manager。

sudo systemctl status display-manager.service
  1. 若非GDM,再手動切換:
sudo systemctl disable sddm

sudo systemctl enable gdm

5. 切換回原本的桌面映像檔
#

如果之後沒有進行layer packages的操作(rollback只能退一版),我們完全能用rollback指令,回滾到切換桌面之前的映像。

  1. 使用sudo rpm-ostree rebase確認狀態
#範例輸出
Deployments:
● fedora:fedora/43/x86_64/silverblue
                  Version: 43.20260304.0 (2026-03-04T00:29:00Z)
                   Commit: 4118fa007e90cb1563265366f8e9057d84aecdc1a4ad24c97f720a91cc8d23bc
             GPGSignature: Valid signature by C6E7F081CF80E13146676E88829B606631645531

  fedora:fedora/43/x86_64/kinoite
                  Version: 43.20260304.0 (2026-03-04T00:31:30Z)
                   Commit: 6be04164e31b9572ef0754ded2a3d42c761c68f7c831e913927e85693312e19d
             GPGSignature: Valid signature by C6E7F081CF80E13146676E88829B606631645531
  1. 用這個指令回滾,然後重開機。
sudo rpm-ostree rollback

6. 桌面環境設定檔互相污染的問題
#

Linux桌面環境會在使用者家目錄丟下設定檔(dot files),並不會隨著rebase消失。這可能造成污染問題,例如KDE Plasma會將所有GTK程式都變成Breeze主題。換到GNOME的話依然會顯示錯誤的Breeze風格。

這需要手動調回來。例如安裝gnome-tweaks程式能將GTK成的外觀還原回Adwaita主題。在GNOME系統設定 → 外觀也能強制重設主題。

如果要隔離每個桌面的設定檔,我們或許應該用systemd-homed給每個桌面建立個別使用者。或者用BorgBackup程式,將系統映像檔與家目錄的dot files一起打包備份。

參考資料
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。