快轉到主要內容

比較flatpak install安裝到System以及User的差異

· 民國114年乙巳年
·
切換繁體/簡體
分類   Linux系統 Linux使用技巧
標籤   Flatpak
目錄

有時候執行flatpak install安裝應用程式的時候,會跳出要安裝到System還是User的選項?

這二者分別代表安裝到system-wide還有per user,究竟有什麼差呢?

這裡Ivon試圖回答這個問題。

1. flatpak remote-add用法
#

首先要了解flatpak安裝應用程式的原理。它需要加入遠端套件庫才能安裝,對大多數用戶來說只有Flathub能選。

許多沒有內建Flatpak的Linux發行版,在安裝之後會要求使用者手動加入Flathub套件庫,所用的指令便是flatpak remote-add

Flatpak官方文件常常建議,將Flathub加入到System,代表這台電腦上的所有使用者帳號都能夠安裝Flathub的應用程式

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

或者加入到User,只有目前的使用者帳號能安裝Flathub的應用程式

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

若System和User同時都有加入Flathub套件庫,則安裝前會詢問要安裝到System還是User。

如果不想要在安裝的時候跳出要安裝到System還是User的提示,就把其中一方的套件庫移除:

flatpak --system remote-delete flathub

2. Flatpak安裝到System和User的差別
#

主要差異是安裝後應用程式存放的目錄不同。

  • System的資料位於/var/lib/flatpak/
  • User位於~/.local/share/flatpak/

注意這邊的指的是應用程式存放的目錄,也就是ostree儲存庫,還有更新時候的依賴runtime等等。因為這些路徑的Desktop Entry會加入$XDG_DATA_DIR環境變數,因此桌面環境能夠讀取到System和User的應用程式圖示。

應用程式執行所產生的資料,會依照$XDG_CONFIG_DIR路徑,存在對應使用者的家目錄。不論是安裝到System還是User,都只會寫入到對應使用者~/.var/app/,而非/var/lib/flatpak/

譬如,一般使用者執行了安裝到System的Firefox,則Firefox的資料依然是存在~/.var/app/,並非/var/lib/flatpak/

假若System和User同時安裝同一個應用程式,資料可能還是會放在一起的。但為什麼桌面應用程式列表不會看到兩個Desktop Entry圖示?因為$XDG_DATA_DIR環境變數裡面User優先級較System高,因此不會看到一樣程式的兩個圖示。

安裝到System的應用程式,電腦上所有的使用者都可以使用。但是執行flatpak update的時候需要有root權限的用戶執行。

安裝到User的應用程式,只有該使用者看得到,並且不需要root權限就能執行flatpak update更新軟體。這個設計非常適合immutable distro使用。

除少數特殊應用程式,例如GPU Screen Rcoerder為了存取Intel/AMD GPU需要用到一些hacky的方法,所以一定得安裝到System,不論安裝到System還是User,其餘功能都沒有差異。

3. flatpak指令需不需要sudo
#

不用。

只有透過系統套件管理員安裝Flatpak本體的時候需要用到:sudo apt install flatpak

那麼flatpak installflatpak --user install有什麼區別?

大部分時候flatpak應會自動偵測,偏好以一般使用者執行flatpak指令,所以沒有必要加上--user參數。有時候可以用flatpak --system install明確指定安裝到System。

但並非絕對,有時候部份flatpak指令可能會誤認為使用者要操作flatpak --system而非flatpak --user

4. 如果執行sudo flatpak的話會怎麼樣
#

sudo flatpak install跟執行flatpak install然後安裝到System的結果不一樣。

執行flatpak install然後安裝到System,應用程式對所有使用者都可見,應用程式資料是存放在各個使用者的家目錄。

但是如果執行sudo flatpak,則執行之後的行為便是以root用戶操作Flatpak程式。所以執行sudo -i flatpak run之後,程式資料是儲存到/root/.var/app/以及/root/.local/share/flatpak/,而非對應的使用者家目錄。且安裝的應用程式只有root用戶可見。

Flatpak設計上就不是用來執行需要root權限的程式的,應當使用flatpak override在必要時賦予權限。沒有必要使用sudo flatpak來執行Flatpak程式。

5. 結論
#

要安裝到System以及User,依照用途選擇就好了,考慮到大部分電腦是單使用者帳戶,所以用User大部分時候就夠用了。

假若是多使用者帳號的電腦,每個使用者有容量限制,那麼可能會因為Flatpak過大的runtime依賴套件導致空間快速耗盡。在這種極端情況下,將Flatpak安裝到System統一管理或許會比較好。

對於只允許Flatpak安裝程式的immutable distro,管理員(擁有root權限)的帳號可以利用Flatpak方式來管理所有使用者的應用程式。例如只有System加入Flathub套件庫,User不加,這樣User就不能下載程式了。但是Flatpak的機制不能禁止使用者自行下載應用程式。

此外,GNOME Parental Control搭配Flatpak的權限機制,能夠限制其他用戶不能使用特定程式。

參考資料
#

User vs system install - Flathub Docs

相關文章

Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications
無法開啟檔案?用Flatseal調整Linux Flatpak應用程式權限 & flatpak override用法
分類   Linux系統 Linux使用技巧
標籤   Flatpak Freedesktop Specifications
Flatpak vs Snap vs AppImage,跨Linux發行版的套件格式比較
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications

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

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