快轉到主要內容

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

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

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指令調整權限
#

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

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

  3. flatpak override指令的寫法如下,中間是權限,最後面是應用程式名稱

flatpak override --filesystem=hosts org.mozilla.Firefox
  1. 以上指令會將你變更的權限寫入到~/.local/share/flatpak/overrides,當Flatpak程式執行的時候,這裡的規則會優先套用。

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

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

一些觀念
#

  1. Flatseal本身也是個Flatpak軟體,用以下指令安裝:
flatpak --user install com.github.tchx84.Flatseal
  1. 裝好開啟就可以調整權限了,Flatseal的功能延伸自flatpak override,它會將你變更的權限寫入到~/.local/share/flatpak/overrides,當Flatpak程式執行的時候,這裡的規則會優先套用。

  2. 請看 Flatseal文件了解權限的用途。Flatseal欄位都有對應flatpak override指令的提示,像Enviornment對應的是flatpak override指令中的--env,也就是環境變數;File system則是對應--filesystem,應用程式可存取的目錄。

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

  4. 注意不要賦予過多權限,有些程式如果開到「存取所有目錄的權限」(--filesystem=host--filesystem=user) 則檔案放置的位置會亂掉,例如Flatpak版Google Chrome的設定檔會放在~/.var,開了之後會變回預設的~/.config

  5. 且根據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裝置。

相關文章

Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications
離線安裝Flatpak應用程式,比較Bundles與Create-usb打包方法
分類   Linux系統 Linux使用技巧
標籤   Flatpak
fontconfig調整Linux中文預設字體的優先順序,修正字體模糊、Emoji亂碼的問題
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Arch Linux Freedesktop Specifications

留言板

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

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

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