快轉到主要內容

檔案無法開啟?用FlatSeal調整Linux Flatpak應用程式權限

Linux系統 Linux使用技巧 Flatpak
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

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

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

這樣你發現沙箱權限的安全之處了吧,Flatpak打包的應用程式預設是無法存取使用者家目錄以外的檔案的,如果應用程式又沒使用XDG Portal API的話,你就得手動賦予權限。

想確定Flatpak的程式能否看到特定目錄的檔案,可以嘗試登入容器的shell,再執行指令。

flatpak run --command=/bin/bash io.mpv.Mpv

ls /

如果看不到特定目錄,那就得調整權限了,權限賦予可用flatpak override指令,我個人則是比較喜歡用圖形化前端FlatSeal操作啦。

1. 用flatpak override指令調整權限
#

flatpak override這個指令可以開關網路、目錄、匯流排、硬體裝置、X11伺服器等等的存取權限,也可以用來設定環境變數。

flatpak override指令的寫法如下,中間是權限(可接多個,注意要加等號),最後面是應用程式名稱

flatpak override --filesystem=hosts org.mozilla.Firefox

如果您想知道詳細權限的用途,請看 Flatseal文件 Flatpak文件的說明。

2. 用圖形化程式FlatSeal調整權限
#

每個程式都要手打指令不是很方便,所以我通常會使用圖形化的FlatSeal調整權限。

Flatseal本身也是個Flatpak軟體:

flatpak --user install com.github.tchx84.Flatseal

裝好開啟就可以調整權限了。

FlatSeal欄位都有對應flatpak override指令的提示,像Enviornment對應的是flatpak override指令中的--env,也就是環境變數;File system則是對應--filesystem,指該應用程式可存取的目錄。

FlatSeal會將調整過的權限放置在~/.local/share/flatpak/overrides/,修改權限後重啟程式才會套用。Flatpak程式執行時會讀取這裡的權限設定。

調整權限務必小心,有些程式如果開到「存取所有目錄的權限」(--filesystem=host--filesystem=user)則檔案放置的位置會亂掉,例如Flatpak版Chrome的設定檔會放在~/.var,開了之後會變回預設的~/.config。且根據Flatpak文件,filesystem=host其實也沒有真的開放全部系統目錄。

所以通常我是看需求開放,如果Flatpak程式在彈出檔案選擇器的時候沒有用到Portal API導致檔案看不到,那我才會開放權限。

下面介紹常用權限。


「All Applications」是全域設定,你也可以僅給特定應用程式開放權限。

想要解決Flatpak應用程式讀不到特定目錄的問題,點選All Applications欄位,捲動到File System,在Other Files加入路徑即可。

比方說我有一個額外掛載的硬碟,用lsblk指令查看後,掛載點確認是/run/media/user/SSD,那麼就將路徑加進去Other Files。路徑後面還可以加上:ro:rw規定該目錄是否為唯讀狀態。

又如,你需要使用 Nvidia PRIME的環境變數,那麼就在Environment欄位設定

如果你想強迫特定程式以X11模式執行,就把Wayland的權限關掉,這樣在Wayland工作階段下該程式就會變成XWayland模式執行。

有些程式資料喜歡亂放,可把Filesystem和Persistent的權限關掉,強迫程式把資料放到~/.var。不過如果程式開發者沒有考慮到Flatpak設定,你這樣做可能會影響該程式與其他程式的整合。

害怕應用程式亂回傳資料的,直接在Share → 關掉Network斷它網路!

Device欄位的All Devices權限關掉後,應用程式就無法存取相機和USB裝置。

相關文章

離線安裝Flatpak應用程式,比較Bundles與Create-usb打包方法
Linux系統 Linux使用技巧 Flatpak
Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
Linux系統 Linux使用技巧 Linux Flatpak
透過DRI_PRIME變數,指定Linux使用特定GPU渲染
Linux系統 Linux使用技巧 Nvidia

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。