獨立窗口管理器下無法錄屏問題處理

我使用Labwc這個Wayland窗口管理器很久了,一開始在公司電腦Ubuntu環境下使用,後來自己組裝了一個迷你主機,換成在Arch下使用。

整體來說,差不多打造了個適合自己的桌面環境,比直接使用Gnome、KDE等龐然大物可控多了。比如按 Win + Enter 鍵隨時彈出終端,Win + H 隱藏,簡直不要太爽,效率直接飆升。

各個桌面核心組件都由自己用心挑選,配置文件 github dotfiles 管理,電腦壞了,隨時重裝也能重新回到熟悉環境。

迷你主機是AMD的核顯,打 Dota2,CS2 也沒有問題。

一切看起來都很美好,但是.....

有一天晚上,我要和公司合作方解決一個問題時,對方要看我的終端即時操作,需要使用飛書下的屏幕共享功能。開啓共享後麻煩出現了,對方反饋只能看到黑屏。

事發突然,我也沒想到會有這一出。從沒有測試過 Labwc + Arch 環境下的屏幕共享功能。簡直當頭一棒,賺錢恰飯可不能耽誤,最後改用手機後置攝像頭錄屏幕解決, 不是攝像頭對不準,就是光線太暗,過程可以說痛苦不堪。

再後來有個週末,我玩 Dota2 的時候,偶遇火槍買鞋後被系統自動賣掉了的 BUG,當時下載比賽錄像錄屏分享,打開 OBS,發現錄屏也是不能使用的。

可見屏幕即時共享,或者說直播需求還是有的,這個問題必須解決。當你在網上搜索的時候,相關資料較少,甚至搞不清楚到底是哪個組件出問題了。

問題很小衆:

  • Linux 用戶少;
  • 使用獨立窗口管理器的 Linux用戶更少;
  • 滿足上述兩個條件,同時還有屏幕共享需求的,少至更少。

1. 解決方法

解決起來很簡單,安裝 xdg-desktop-portal 相關包:

1sudo pacman -S xdg-desktop-portal
2sudo pacman -S xdg-desktop-portal-wlr

xdg-desktop-portal-wlr 是 xdg-desktop-portal 的一種後端實現,當你使用成熟的桌面環境Gnome/KED時,xdg-desktop-portal-gnome、xdg-desktop-portal-kde早就自動幫你預裝好了。

因爲Labwc是獨立的窗口管理器,默認並不會包含xdg-desktop-portal-wlr,所以會黑屏或者無法直播。Wayland 環境下的屏幕共享一般通過Pipewire,調用 xdg-desktop-portal,再由其調用當前DE環境的 xdg-desktop-portal後端,完成整個鏈路。不同桌面環境後端實現不一樣,參考這個列表

1➜  ~ echo $XDG_CURRENT_DESKTOP
2wlroots

從上面的環境變量輸出中,可推理出wlroots對應的後端實現是 xdg-desktop-portal-wlr,所以需要額外安裝這個包。

 1➜  ~ ls -al /usr/share/xdg-desktop-portal
 2total 20
 3drwxr-xr-x 1 root root  190 Jun 10 12:13 ./
 4drwxr-xr-x 1 root root 5018 Jun 12 12:36 ../
 5-rw-r--r-- 1 root root   24 Mar 24 10:58 gtk-portals.conf
 6-rw-r--r-- 1 root root   32 May  9 04:32 hyprland-portals.conf
 7-rw-r--r-- 1 root root   67 May 22 16:03 labwc-portals.conf
 8drwxr-xr-x 1 root root   68 Jun  7 11:22 portals/
 9-rw-r--r-- 1 root root  423 Jun  9 07:51 sway-portals.conf
10-rw-r--r-- 1 root root   24 Aug  9  2024 wlr-portals.conf
11➜  ~ ls -al /usr/share/xdg-desktop-portal/labwc-portals.conf
12-rw-r--r-- 1 root root 67 May 22 16:03 /usr/share/xdg-desktop-portal/labwc-portals.conf
13➜  ~ ls -al /usr/share/xdg-desktop-portal
14total 20
15drwxr-xr-x 1 root root  190 Jun 10 12:13 ./
16drwxr-xr-x 1 root root 5018 Jun 12 12:36 ../
17-rw-r--r-- 1 root root   24 Mar 24 10:58 gtk-portals.conf
18-rw-r--r-- 1 root root   32 May  9 04:32 hyprland-portals.conf
19-rw-r--r-- 1 root root   67 May 22 16:03 labwc-portals.conf
20drwxr-xr-x 1 root root   68 Jun  7 11:22 portals/
21-rw-r--r-- 1 root root  423 Jun  9 07:51 sway-portals.conf
22-rw-r--r-- 1 root root   24 Aug  9  2024 wlr-portals.conf
23➜  ~ cat  /usr/share/xdg-desktop-portal/labwc-portals.conf
24[preferred]
25default=wlr;*
26org.freedesktop.impl.portal.Inhibit=none
27➜  ~ cat  /usr/share/xdg-desktop-portal/sway-portals.conf
28[preferred]
29default=gtk
30org.freedesktop.impl.portal.ScreenCast=wlr
31org.freedesktop.impl.portal.Screenshot=wlr
32# xdg-desktop-portal-gtk's implementation uses org.gnome.SessionManager and
33# org.freedesktop.ScreenSaver, neither of which is implemented by Sway. This
34# will cause some programs (e.g. Firefox) to use Wayland's idle-inhibit
35# protocol instead, which sway does implement.
36org.freedesktop.impl.portal.Inhibit=none

可以讀讀arch的文檔,XDG_CURRENT_DESKTOP 環境變量決定讀取那個配置文件,配置文件控制使用哪個後端實現。文件不需要獨立配置,安裝包裝好後,會自動處理。多理解一些,會學到一些邊角知識。

XDG Desktop Portal 是什麼

AI相關介紹如下:

1XDG Desktop Portal 是 Linux 開發領域中,Flatpak 生態系統的一個核心組件。它爲應用程序提供了安全、統一的方式來訪問系統資源,如文件選擇器、截圖工具、打印服務等。
2
3安全性:基於 D-Bus 協議,提供沙盒環境中的接口,使 Flatpak 應用能安全地與主機操作系統交互。每個請求都會經過權限檢查,需用戶明確批准,可防止未授權訪問。
4統一接口:開發者通過 XDG Desktop Portal,可用相同的 API 實現各種功能,無需考慮具體 Linux 發行版差異,提高了代碼可移植性,簡化了開發工作。
5集成性:能與系統級服務(如文件管理器、打印機設置)無縫集成,讓應用像原生應用一樣工作,無需關注底層實現細節。
6橋接作用:作爲應用程序和桌面環境之間的橋樑,允許 Flatpak 應用調用系統服務,如打開文件對話框或捕獲屏幕截圖,而無需直接與桌面環境交互,降低了耦合度。
7功能豐富:支持文件選擇和保存、多媒體訪問、打印服務、剪貼板共享、截圖和錄屏等功能。
8可擴展性和可定製化:設計時考慮了未來擴展,可方便地添加新的門戶服務。不同的桌面環境還可提供自己的實現,保持桌面體驗的一致性。
9社區支持:XDG Desktop Portal 是開源項目,由活躍的社區維護和更新,可不斷改進性能和穩定性

截圖和錄屏是其提供功能之一。

XDGX Desktop Group 的縮寫,儘管 Wayland 已經大行其道了,估計相關名字因爲歷史緣故也不可能更改,單獨解釋是因爲我是中文用戶,不好記住,怪怪的。

結果截圖

obs-live

裝好上述的包後,OBS上就會出現一個 屏幕採集(PipeWire)的選項,否則不會出現,也就無法錄屏直播。

飛書上我同時使用Linux桌面端和手機端,測試屏幕共享沒有問題,懶得截圖了;騰訊會議因爲多端同時參會要開會員,沒有測試。

最後修改於: Thursday, June 12, 2025

相關文章:

翻譯: