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