快轉到主要內容

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

· 民國113年甲辰年
· ·
分類   Linux系統 Linux使用技巧
標籤   Flatpak Freedesktop Specifications
目錄

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指令賦予權限
#

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

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

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

flatpak override <權限設定> com.valvesoftware.Steam
  1. 例如,我要開放Steam讀取「下載」目錄:
flatpak override --filesystem=xdg-downloads com.valvesoftware.Steam
  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. 根據Flatpak文件,非必要的時候不要直接指定絕對路徑,而是使用XDG標準。例如要開放讀取「下載」目錄,應該使用xdg-downloads而非/home/user/Downloads

  4. 注意不要賦予過多權限,有些程式如果開到「存取所有目錄的權限」(--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裝置。

相關文章

管理Linux系統家目錄泛濫成災的dotfile
分類   Linux系統 Linux使用技巧
標籤   Freedesktop Specifications Dotfile Flatpak
Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications
如何修改Linux開啟檔案的預設程式 (XDG MIME Applications)
分類   Linux系統 Linux使用技巧
標籤   Freedesktop Specifications GNOME KDE Plasma

留言板

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

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