Linux系統如何安裝Flatpak軟體套件?使用教學

Flatpak是什麼?它是Linux的一種軟體(套件)打包格式,可以減少軟體安裝的複雜度,統一所有發行版的安裝指令,再也不用考慮個別發行版間的依賴問題。還用沙盒機制提供更好的安全性,並將應用程式設定檔統一存放在固定目錄下。

簡單來說,Flatpak能為不同Linux發行版的使用者提供版本一致的軟體。

提供Flatpak軟體的商店「Flathub」已上架多款熱門應用程式,開源與專有軟體皆有,例如Google Chrome、Steam、LibreOffice、Blender、GIMP,不論是哪個Linux發行版都能統一下載到最新版的軟體。

大多數Linux發行版已支援Flatpak技術,沒內建的話用指令裝一下就可以了。

這篇文章將會介紹如何在您的Linux系統上使用Flatpak安裝軟體(包含安裝.flatpakref格式),以及解決相關的權限和儲存問題。

1. 如何在Linux安裝Flatpak套件管理員

要安裝Flatpak格式的應用程式,首先需要安裝Flatpak本體來管理套件。

  1. 請到Flatpak官網查詢各大Linux發行版的安裝方法,例如Ubuntu 22.04以上版本,執行以下指令安裝Flatpak套件:
1
2
sudo apt update
sudo apt install flatpak gnome-software-plugin-flatpak
  1. 裝好還要加入Flathub的套件庫。

針對不想每次更新應用程式都打密碼的使用者,加上--user給個別使用者加入套件庫。這樣使用者就能免密碼安裝應用程式,且Flatpak只會安裝程式到該名使用者的家目錄。解除安裝應用程式亦不需要sudo。

1
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

或者,將套件庫加入到整個系統,更新時候要一個一個打密碼:

1
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  1. 做完以上措施後,重開機後就能用Flatpak安裝軟體。

2. 如何安裝Flatpak應用程式

在安裝好Flatpak套件管理員之後,才能安裝應用程式。

2.1. 安裝與解除安裝

Flatpak要安裝應用程式多半是使用Flathub,這是什麼網站呢?Flathub是GNOME基金會經營的,蒐羅最多Flatpak應用程式的網站,混雜開源與專有軟體。

那我們要怎麼安裝在Flathub看到的應用程式呢?Flathub只有網頁,沒有官方「軟體商店前端」,目前是依賴各家桌面環境的軟體商店來安裝。這裡首先介紹指令版裝法,後面會有圖形化版裝法。

  1. 以Flathub上的Mozilla Firefox為例,點選"Install"會下載.flatpakref結尾的格式。

  2. 對其點二下,您的應用程式商店就會跳出來指示您安裝了。

  3. flatpakref可以用指令安裝:

1
flatpak install <.flatpakref路徑>
  1. 您也可以手動點選Flathub頁面顯示的指令

  2. 再貼上頁面所顯示的指令安裝:

1
2
# 安裝時可能會出現要安裝至system或user,通常我是選user,這樣以後更新就不用打密碼
flatpak install org.mozilla.fireofox

嫌指令太長,你也可以改用下一節討論的圖形化前端(應用商店)安裝。

你可能會發現Flatpak應用程式要下載的檔案比一般用套件管理員裝的還要大許多,這是正常的,我在這篇有另外討論Flatpak安裝應用程式的優缺點。

應用程式安裝後就會出現在應用程式列表,使用起來跟一般應用程式沒兩樣。

欲解除安裝Flatpak應用程式,使用flatpak remove指令。注意還要加上--delete-data才會在解除安裝的時候一併刪除該程式的設定檔。

1
flatpak remove org.mozilla.firefox --delete-data

2.2. 用指令啟動Flatpak應用程式

要從終端機啟動Flatpak應用程式,請使用flatpak run指令,並且要打出完整Flatpak應用程式名稱(應用程式名稱之所以這麼長是為了避免重複)。

1
flatpak run org.mozilla.firefox

Flatpak跟一般應用程式一樣,可以另外加入啟動引數:

1
2
# 以隱私視窗引數啟動Firefox
flatpak run org.mozilla.firefox --private-window

要使用環境變數,用flatpak override --env指令

1
2
# 強制Firefox使用Wayland的環境變數
flatpak --user override --env MOZ_ENABLE_WAYLAND=1 org.mozilla.firefox

要開放存取特定檔案或目錄,用flatpak override --filesystem指令

1
2
# 允許Firefox存取其他硬碟檔案
flatpak --user override --filesystem=/run/media/user/HDD org.mozilla.firefox

2.3. Flatpak應用程式安裝路徑

Flatpak應用程式資料(data location)位於~/.var/app/<應用程式名稱>目錄,這裡也是各個應用程式設定檔的統一存放位置。像MPV、VIM這類需要撰寫設定檔的應用程式,就是將設定檔丟到這裡。

上面我們提到要從終端機執行Firefox,需要用flatpak run org.mozilla.firefox指令,但若其他應用程式是直接呼叫firefox來開啟瀏覽器呢?

這時請將Flatpak二進位檔的安裝路徑/var/lib/flatpak/exports/bin~/.local/share/flatpak/exports/bin/加到~/.bashrc

1
2
# 此時執行Firefox的指令從flatpak run org.mozilla.firefox縮短為org.mozilla.firefox取代
PATH=$PATH:/var/lib/flatpak/exports/bin

再視需要建立軟連結或alias

1
2
# 執行firefox等同執行org.mozilla.firefox
alias firefox = org.mozilla.Firefox

3. 使用應用商店前端安裝Flatpak

除了從Flathub網頁複製指令外,也可以使用桌面環境的應用程式商店搜尋、下載Flatpak應用程式。

應用程式商店讓使用者免打指令安裝程式,例如GNOME Software和KDE Discover。這些應用商店還有加入使用者評分機制。

KDE Discover預設支援Flathub,GNOME Software則是要另外安裝gnome-software-plugin-flatpak的系統套件才會顯示Flathub上的應用程式。

在應用商店瀏覽的時候應會顯示Flathub來源,如下圖KDE Discover的畫面。

4. Flatpak相關指令

更多指令請看官方文件

Flatpak應用程式名稱,正式來說叫做domain name,由網域而非單一字串組成,例如「Firefox」完整名稱是為「org.mozilla.Firefox」。

指令用途
flatpak search [應用程式名稱]搜尋Flathub的應用程式,支援模糊搜尋
flatpak install [應用程式名稱]安裝應用程式
flatpak install [.flatpakref]從flatpakref檔案安裝應用程式
flatpak run [應用程式名稱]執行應用程式
flatpak uninstall [應用程式名稱]移除應用程式
flatpak uninstall [應用程式名稱] --delete-data移除應用程式並刪除資料
flatpak uninstall --unused移除用不到的依賴套件
flatpak list列出安裝的軟體
flatpak override覆寫Flatpak應用程式設定,可以用來設定環境變數
flatpak permission-reset [應用程式名稱]重設應用程式權限
flatpak update更新全部應用程式
flatpak remotes列出遠端軟體庫
flatpak mask [應用程式名稱]鎖定應用程式版本,防止應用程式自動更新
flatpak ps列出所有Flatpak行程。
flatpak kill [應用程式名稱]終止應用程式執行

5. 用Flatseal管理Flatpak應用程式權限

借助Flatseal這款圖形化的應用程式就可方便管理Flatpak程式的權限(permission)。

該應用程式其實也是用Flatpak打包,可於Flathub取得。

開啟後就會看到系統安裝的Flatpak應用程式,使用者可以個別給應用程式設定「允許存取所有硬體裝置」、「使用虛擬化」、「允許存取其他硬碟」等權限。

個別應用程式中,Enviornment對應的是flatpak override指令中的--env,也就是環境變數;File system則是對應--filesystem,指該應用程式可存取的目錄。

如果您不知道個別權限的用途,請看Flatseal文件的解釋。

例如Flatpak版的Firefox無法存取使用者家目錄以外硬碟的檔案,你可以在這裡開放特定目錄給Firefox存取。

順帶一提,KDE 5.27以上版本已將Flatseal的一部分功能整合至系統設定 → 應用程式的界面。

6. 自動更新Flatpak應用程式

如果隔很久才手動更新Flatpak,可能會要下載大量資料。在網路速度許可的情況下,可以利用systemd timer,每日自動檢查更新Flatpak應用程式,每日一小點一小點的更新。

新增服務要裝在系統還是個別使用者?端看您Flatpak應用程式是裝在系統還在裝在個別使用者的數量來決定。

  1. 新增服務
1
2
3
4
5
# 系統
sudo systemctl edit --full --force update-system-flatpaks.service

# 個別使用者
systemctl --user edit --full --force update-user-flatpaks.service
  1. 填入以下內容
1
2
3
4
5
6
7
8
9
[Unit]
Description=Update Flatpaks

[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak update -y

[Install]
WantedBy=default.target
  1. 建立timer
1
2
3
4
5
# 系統
sudo systemctl edit --full --force update-system-flatpaks.timer

# 個別使用者
systemctl edit --user --full --force update-user-flatpaks.timer
  1. 填入以下內容
1
2
3
4
5
6
7
8
9
[Unit]
Description=Update Flatpaks daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
  1. 啟用服務
1
2
3
4
5
6
7
# 系統
sudo systemctl daemon-reload
sudo systemctl enable --now update-system-flatpaks.timer

# 個別使用者
systemctl --user daemon-reload
systemctl --user enable --now update-system-flatpaks.timer

7. 設定開機自動啟動Flatpak應用程式

這裡使用systemd來自動啟動。參考openSUSE Tumbleweed的作法。

Flatpak啟動應用程式的指令為flatpak run <應用程式ID>,可加上--background引數使其在背景執行。

  1. 新增要自動啟動的應用程式
1
vim ~/.config/systemd/user/firefox.service
  1. 填入以下內容。輸入要啟動的Flatpak應用程式,例如Firefox
1
2
3
4
5
6
7
8
9
[Unit]
Description="自動啟動irefox"

[Service]
ExecStart=/usr/bin/flatpak run org.mozilla.firefox
ExecStop=/usr/bin/flatpak kill org.mozilla.firefox

[Install]
WantedBy=default.target
  1. 啟用服務
1
2
sudo systemctl daemon-reload
systemctl --user enable firefox.service

延伸閱讀


感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。要討論程式碼請用Giscus,匿名討論請用Disqus。

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

這是Disqus留言板,您可能會看到Disqus投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。