bspwm 上的屏幕共享使鼠标在共享监视器上无响应

bspwm 上的屏幕共享使鼠标在共享监视器上无响应

问题

当我使用 Discord 或 Firefox 屏幕共享整个屏幕时,共享屏幕对我的鼠标完全没有响应。停止屏幕共享并不能解决问题。窗口共享效果很好。

  • 我的鼠标无法单击共享屏幕上的任何内容,也无法滚动。没有悬停效果(例如:在 Spotify 中,悬停在按钮上应使按钮变大且呈绿色,链接应带有下划线,这不会发生在冻结的屏幕上)
  • 键盘仍然有效。视频仍然有效,一切仍然正常。
  • 使用键盘快捷键,我仍然可以在冻结的屏幕上更改桌面。
  • 将窗口从“冻结”屏幕移动到另一个屏幕(使用键盘快捷键)可以使该窗口再次可单击。将其向后移动会撤消它,这表明它肯定是屏幕而不是窗口停止响应点击。
  • 单击关闭dunst通知是有效的。我的rofi开始菜单打开得很好并且是交互式的。
  • 屏幕录制可以与 SimpleScreenRecorder 和 OBS 配合使用。
  • 使用眼镜在冻结的屏幕上截取屏幕截图:我可以在冻结的屏幕上单击并拖动一个矩形来截取裁剪的屏幕截图(当然,如果我在另一台显示器上打开眼镜,否则我将无法单击该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 的屏幕共享数字版权管理系统
  • 我尝试在安全模式下运行 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

一些问题

我有一些问题可能会帮助我解决此问题:

  1. Firefox 和 Discord 使用什么软件/技术来共享屏幕? Chromium 和 Microsoft Teams 使用不同的软件吗?

  2. 使用什么软件/技术bspwm来共享屏幕? i3 甚至不提供共享特定屏幕的选项,因此它们必须使用不同的技术。

  3. 我还能提供什么(日志、系统信息……)?

答案1

Reddit 帖子中,我们发现 bspwm 的focus_follows_pointer选项设置为 时会导致屏幕在共享菜单中显示为窗口true

这些屏幕根本不应该出现。根据/u/ortango_ 的评论,共享它们甚至不应该起作用:

Firefox 不支持每个显示器共享。那些你认为是显示器的东西不是;他们只有监视器的名字。

它们被映射,focus_follows_pointer以便鼠标可以在窗口之间跟踪 - 这具有 webrtc 认为它们是普通窗口的副作用(但它们不是普通窗口或监视器),

所以问题出在bspwm上,我提出了一个问题这里。它在 Chromium 中起作用的原因是它使用 libwebrtc 的较新实现。微软团队可能也做了同样的事情。

以下是我在 Mozilla 的 bugtracker 中发现的相关功能请求:

相关内容