Linux

bspwm 上的螢幕共享使滑鼠在共享監視器上無響應

  • March 30, 2021

問題

當我使用 Discord 或 Firefox 共享整個螢幕時,共享螢幕對我的滑鼠完全沒有響應。停止螢幕共享並不能解決問題。視窗共享工作正常。

  • **我的滑鼠無法點擊共享螢幕上的任何內容,也無法滾動。**沒有懸停效果(例如:在 Spotify 中,懸停在按鈕上應該使它們變大和變綠,連結應該加下劃線,這不會發生在凍結的螢幕上)
  • 鍵盤仍然可以使用。影片仍然有效,一切仍然正常。
  • 使用鍵盤快捷鍵,我仍然可以在凍結的螢幕上更改桌面。
  • 將視窗從“凍結”螢幕移動到不同的螢幕(使用鍵盤快捷鍵)會使該視窗再次可點擊。將其移回會撤消它,這表明它肯定是螢幕而不是停止響應點擊的視窗。
  • 點擊離開dunst通知有效。我的rofi開始菜單可以正常打開並且是互動式的。
  • 螢幕錄製可與 SimpleScreenRecorder 和 OBS 配合使用。
  • 使用 spectacle 在凍結螢幕上截取螢幕截圖:我可以在凍結螢幕上點擊並拖動一個矩形以截取螢幕截圖(當然,如果我在另一台顯示器上打開 spectacle,否則我將無法點擊Take a new screenshot按鈕)
  • 這種情況已經持續了好幾個月,也許一年。
  • 我的 bspwm 設置是這樣設置的,如果我將滑鼠懸停在一個視窗上,該視窗就會成為焦點。在凍結的螢幕上,只有最後一個焦點視窗成為焦點。我無法使用滑鼠在兩個視窗之間聚焦,但 bspwm 確實注意到我的滑鼠在那個螢幕上。

Chromium 中的螢幕共享

在 Chromium 中,您可以看到螢幕選項卡和應用程序選項卡:

螢幕選項卡

應用程序選項卡

如果我從應用程序選項卡共享螢幕(例如 eDP-1-1 = 我的筆記型電腦螢幕),則會觸發問題。如果我從“您的整個螢幕”選項卡共享螢幕,則不會。

Firefox 和 Discord 中的螢幕共享

在選擇要共享的螢幕時,它們實際上並沒有向您顯示螢幕,而是向您顯示應用程序:

Firefox 中的螢幕共享選擇器

您看到的 xxx-1-1 名稱是影片輸出的名稱。共享其中之一會引發問題。看的人甚麼都看不到。在不和諧的情況下它會崩潰。如果我點擊“整個螢幕”,它會共享我所有的顯示器,就好像它們是一個螢幕一樣。

在不和諧中,它的工作方式相同,但螢幕共享立即崩潰。共享螢幕上仍會觸發無響應的滑鼠問題。

日誌

當我開始共享時,在終端中執行 Firefox 和螢幕共享會輸出以下輸出:

[GFX1-]: Failed GL context creation for WebRender: 0
[GFX1-]: FEATURE_FAILTURE_WEBRENDER_INITIALIZE_UNSPECIFIED
[GFX1-]: Failed to connect WebRenderBridgeChild.
[GFX1-]: Compositors might be mixed (5,1)

xprop 在凍結螢幕上的視窗上使用會產生以下輸出:

WM_STATE(WM_STATE):
       window state: Normal
       icon window: 0x0
WM_NAME(STRING) = "eDP-1-1"
WM_CLASS(STRING) = "root", "Bspwm"

如果我在未凍結的空桌面上使用 xprop,我會收到相同的消息(這是預期的)。xprop似乎認為凍結螢幕上的選定視窗是根 bspwm 類。

當我開始共享時,使用 Discord 的螢幕共享崩潰並在終端中輸出以下行:

[WebContents] crashed... reloading
  • 裡面什麼都沒有dmesg
  • 裡面什麼都沒有journalctl
  • 裡面什麼都沒有/var/log/Xorg.0.log

我已經嘗試過的

  • 關閉所有螢幕上的所有視窗可以修復凍結的螢幕(註銷/重新啟動也是如此)。
  • 殺死並重新啟動 polybar 會使 polybar 在凍結的螢幕上再次可點擊。凍結螢幕上的所有其他視窗仍將無響應。
  • 我嘗試禁用康普頓的螢幕共享
  • 我嘗試在沒有 Nvidia 的DRM KMS的情況下進行螢幕共享
  • 我嘗試在安全模式下執行 Firefox
  • 我嘗試在 Firefox 和 Discord 中禁用硬體加速
  • 我嘗試只連接一台顯示器而不是 3
  • 我嘗試使用 i3 而不是 bspwm。i3 僅顯示視窗和“整個螢幕”,如果連接了多個螢幕,則會顯示所有螢幕。我不能選擇一個螢幕。
  • 我嘗試使用 awesomewm,結果與 i3 相同。

我的系統

zjeffer@Arch-zjeffer 
-------------------- 
OS: Arch Linux x86_64 
Host: 80WK Lenovo Y520-15IKBN 
Kernel: 5.11.1-arch1-1 
Uptime: 12 hours, 2 mins 
Packages: 1606 (pacman) 
Shell: zsh 5.8 
Resolution: 1920x1080, 1920x1080, 1920x1080 
WM: bspwm 
Theme: Nordic-Polar [GTK2/3] 
Icons: Papirus-Light-nordic-blue-folders [GTK2/3] 
Terminal: gnome-terminal 
CPU: Intel i7-7700HQ (8) @ 2.800GHz 
GPU: NVIDIA GeForce GTX 1050 Mobile 
GPU: Intel HD Graphics 630 
Memory: 2662MiB / 7845MiB
  • bpswm
  • compton,這個叉子
  • nvidia 460.39-11, 使用 Nvidia 的DRM KMS
  • xorg-server 1.20.10-3
  • lightdm 1:1.30.0-4

一些問題

我有一些問題可以幫助我解決此問題:

  1. Firefox 和 Discord 使用哪些軟體/技術來共享螢幕?Chromium 和 Microsoft Teams 使用不同的軟體嗎?
  2. 使用什麼軟體/技術bspwm來共享螢幕?i3 甚至不提供共享特定螢幕的選項,因此它們必須使用不同的技術。
  3. 我還能提供什麼(日誌、系統資訊……)?

這篇Reddit 文章中,我們發現當 bspwm 的focus_follows_pointer選項設置為true.

這些螢幕甚至不應該首先出現。根據/u/ortango_ 的評論,分享它們甚至不應該起作用:

Firefox 不支持每台顯示器共享。你認為是監視器的那些東西不是;他們只有顯示器的名字。

它們被映射focus_follows_pointer以便可以在視窗之間跟踪滑鼠 - 這具有 webrtc 認為它們是普通視窗(但它們不是普通視窗或監視器)的副作用,

所以問題出在 bspwm 上,我在這裡提出了一個問題。它在 Chromium 中工作的原因是因為它使用了較新的 libwebrtc 實現。微軟團隊可能也做了同樣的事情。

以下是我在 Mozilla 的 bugtracker 中找到的相關功能請求:

引用自:https://unix.stackexchange.com/questions/636262