Manage Flatpak applications with ease using Flatseal!
Flatpak使用Bubblewrap實現應用程式沙盒化,並規範了一套權限(permission),加強系統安全性。
如果使用Flatpak安裝應用程式,你可能會遇到一些權限問題,比如:
- Google Chrome瀏覽器無法開啟特定硬碟的檔案,無法拖曳圖片到視窗上傳
- Steam收藏庫無法選擇其他硬碟
- GIMP無法開啟照片
- 應用程式的檔案選擇對話框只看到Downloads資料夾
會發生這種現象是因為,Flatpak採用沙盒隔離機制,Flatpak打包的應用程式預設是無法存取家目錄以外檔案的。如果應用程式又沒使用XDG Portal API的話,你就得手動賦予權限。
想確定Flatpak的程式能否看到特定目錄的檔案,可以嘗試登入容器的bash shell,再執行指令確認。例如這是登入Steam客戶端的容器:
flatpak run --command=/bin/bash com.valvesoftware.Steam
ls /
如果在容器裡面看不到特定目錄,那就得調整權限了。
Flatpak賦予權限可用flatpak override
指令,我個人則是比較喜歡用圖形程式「Flatseal」操作。
1. 用flatpak override指令賦予權限#
flatpak override
這個指令可以開關網路、目錄、匯流排、硬體裝置、X11伺服器等等的存取權限,也可以用來設定環境變數。如果您想知道每個權限的詳細用途,請看Flatpak文件的說明。
flatpak override指令的寫法如下,中間是權限,最後面是應用程式名稱:
flatpak override <權限設定> com.valvesoftware.Steam
- 例如,我要開放Steam讀取「下載」目錄:
flatpak override --filesystem=xdg-downloads com.valvesoftware.Steam
- 以上指令會將你變更的權限寫入到
~/.local/share/flatpak/overrides
,當Flatpak程式執行的時候,這裡的規則會優先套用。
2. 用圖形程式Flatseal調整權限#
每個程式都要手打指令調整權限不是很方便,所以我通常會使用圖形化的Flatseal調整權限。
一些觀念#
- Flatseal本身也是個Flatpak軟體,用以下指令安裝:
flatpak --user install com.github.tchx84.Flatseal
裝好開啟就可以調整權限了,Flatseal的功能延伸自
flatpak override
,它會將你變更的權限寫入到~/.local/share/flatpak/overrides
,當Flatpak程式執行的時候,這裡的規則會優先套用。請看Flatseal文件了解權限的用途。Flatseal欄位都有對應
flatpak override
指令的提示,像Enviornment
對應的是flatpak override
指令中的--env
,也就是環境變數;File system
則是對應--filesystem
,即應用程式可存取的目錄。根據Flatpak文件,非必要的時候不要直接指定絕對路徑,而是使用XDG標準。例如要開放讀取「下載」目錄,應該使用
xdg-downloads
而非/home/user/Downloads
注意不要賦予過多權限,有些程式如果開到「存取所有目錄的權限」(
--filesystem=host
或--filesystem=user
) 則檔案放置的位置會亂掉,例如Flatpak版Google Chrome的設定檔會放在~/.var
,開了之後會變回預設的~/.config
。且根據Flatpak文件,filesystem=host
其實也沒有真的開放全部系統目錄。所以通常我是看需求開放,如果Flatpak程式在彈出檔案選擇器的時候沒有用到XDG Portal API導致檔案看不到,那我才會開放權限。
具體操作#
Flatseal最上面的「All Applications」是全域設定,所有的應用程式會全域套用規則。
但是!儘量不要動這裡的設定,因為不同程式可能有不同的設計,如果你給所有應用程式開放全部的權限就失去用Flatpak的意義了!需要的時候,再要給個別應用程式開放權限就好。
我唯一會動的設定,就是在File system處的Other files,新增所有外接硬碟的路徑,使所有Flatpak程式預設都能存取那些硬碟下的目錄。
接著介紹一些常見的設定。
開放應用程式讀取特定目錄:比方說我有一個額外掛載的硬碟,用lsblk
指令查看後,掛載點確認是/run/media/user/SSD
,那麼就將路徑加進去Other Files。路徑後面還可以加上:ro
或:rw
規定該目錄是否為唯讀狀態。
又如,需要暫時使用Nvidia獨立顯示卡跑3D加速,那麼就在Environment欄位設定Nvidia PRIME的環境變數:
如果你想強迫特定程式以X11模式執行,就把Wayland的權限關掉,並開啟Fallback to X11,這樣在Wayland工作階段該程式就會變成XWayland模式執行。
有些程式資料喜歡亂放dotfiles,可把Filesystem和Persistent的權限關掉,強迫程式把資料放到Flatpak專用的~/.var
。不過程式開發者若沒有考慮到Flatpak設定,你這樣做可能會影響該程式與其他程式的整合。
若害怕應用程式亂回傳資料的,直接關掉 Share → Network,斷它網路!
還有,Device欄位的All Devices權限關掉後,應用程式就無法存取相機和USB裝置。