快轉到主要內容

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

分類   Linux系統 Linux好用軟體
標籤   Flatpak Linux
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

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

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

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

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

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

1. 安裝Flatpak套件管理器
#

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

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

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

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

或者,將套件庫加入到整個系統,這樣所有使用者都可以使用該軟體(有時可能要加上sudo):

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可以用指令安裝:

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

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

# 安裝時可能會出現要安裝至system或user,通常我是選user
flatpak install org.mozilla.fireofox

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

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

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

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

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

2.2. 從應用商店安裝
#

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

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

KDE Discover需要安裝plasma-discover-flatpak-backend套件才會顯示Flathub上的應用程式;GNOME Software則是安裝gnome-software-plugin-flatpak套件。

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

3. 操作Flatpak應用程式
#

3.1. 用指令啟動
#

Flatpak應用程式安裝後通常就會出現在系統應用程式列表了,這裡用指令啟動僅是方便除錯。

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

flatpak run org.mozilla.firefox

要看更詳細的錯誤資訊,使用--verbose

flatpak run --verbose org.mozilla.firefox

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

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

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

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

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

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

3.2. Flatpak安裝路徑
#

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

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

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

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

再視需要建立軟連結或alias

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

3.3. 更新Flatpak應用程式
#

flatpak update指令會更新全部應用程式。

若要更新個別應用程式,請在指令後面加上應用程式名稱,例如flatpak update org.mozilla.firefox

若要防止特定應用程式更新,加上mask,例如flatpak mask org.mozilla.firefox

3.4. 降級Flatpak應用程式
#

如果更新出狀況,您可能會想要降級到舊版本應用程式。

  1. 使用flatpak remote-info列出該應用程式最近的提交,看完按Ctrl + C停止載入
flatpak remote-info --log flathub org.mozilla.firefox
  1. flatpak update指定安裝舊版本提交
flatpak update --commit="commit數字" org.mozilla.firefox
  1. 若要防止未來應用程式自動更新,使用flatpak mask指令
flatpak mask org.mozilla.firefox

3.5. 清除Flatpak佔用空間
#

時間久了Flatpak的儲存庫(~/.local/share/flatpak/)會累積許多舊版檔案,若確認不會降級可將其清除。

使用flatpak --user remove --unusedflatpak --user repair指令清除冗餘檔案。

4. Flatpak常用指令
#

全部指令請看 官方文件

flatpak指令在執行的時候可以選擇性加上--user--system,指定要變更個別使用者抑或是系統設定。

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 repair清理Flatpak的git儲存庫,移除無效物件
flatpak list列出所有安裝的Flatpak套件,包含runtime
flatpak list --apps列出所有安裝的Flatpak應用程式
flatpak override覆寫Flatpak應用程式設定,可以用來設定環境變數和賦予權限
flatpak permission-reset [應用程式名稱]重設應用程式權限
flatpak update更新全部應用程式。
flatpak remotes列出遠端套件庫
flatpak mask [應用程式名稱]鎖定應用程式版本,防止應用程式自動更新
flatpak ps列出所有Flatpak應用程式的行程。
flatpak kill [應用程式名稱]終止應用程式執行

5. 管理Flatpak程式權限
#

Flatpak使用Bubblewrap實現應用程式沙盒化,並規範了一套權限(permission),加強系統安全性。

如果使用Flatpak安裝應用程式可能會遇到一些問題,比如Chrome瀏覽器的檔案管理員無法開啟特定硬碟的檔案、無法拖曳圖片到瀏覽器、或者是檔案選擇器只有Downloads?

如果特定目錄的檔案打不開,你可以借助圖形化的應用程式 Flatseal,管理Flatpak程式的權限(permission)。

它的功能等同flatpak override

6. 自動更新Flatpak程式
#

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

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

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

# 個別使用者
systemctl --user edit --full --force update-user-flatpaks.service
  1. 填入以下內容
[Unit]
Description=Update Flatpaks

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

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

# 個別使用者
systemctl edit --user --full --force update-user-flatpaks.timer
  1. 填入以下內容
[Unit]
Description=Update Flatpaks daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
  1. 啟用服務
# 系統
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啟動應用程式的指令為/usr/bin/flatpak run <應用程式ID>,可加上--background引數使其在背景執行。

請參見 Linux開機自動啟動

8. 備份Flatpak程式資料
#

如果要備份Flatpak程式資料,就直接備份~/.var/app目錄吧,但是Flatpak程式不見得會把設定檔乖乖放在這裡,有些會放到~/.config,得自行判斷Flatpak有沒有存取其他目錄。

參考 Reddit網友作法,如果只是單純要備份「應用程式列表」,不包含資料和runtime的話:

# 存成txt檔
flatpak --user list --columns=application --app > flatpaks.txt

# 之後可以從txt檔還原
flatpak install -y $(< flatpaks.txt)

延伸閱讀
#

相關文章

喜歡用vim寫筆記又不方便整理?命令行版Joplin CLI適合你
分類   Linux系統 Linux好用軟體
標籤   Joplin Linux
ani-cli 用終端機免費線上看動漫的程式,支援電腦與手機
分類   Linux系統 Linux好用軟體
標籤   Anime Linux Termux Windows MacOS MPV
電腦看Youtube的開源程式:FreeTube,無廣告、下載影片
分類   Linux系統 Linux好用軟體
標籤   Youtube Invidious Linux Windows MacOS

留言板

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

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

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