问题
当我使用 Discord 或 Firefox 屏幕共享整个屏幕时,共享屏幕对我的鼠标完全没有响应。停止屏幕共享并不能解决问题。窗口共享效果很好。
- 我的鼠标无法单击共享屏幕上的任何内容,也无法滚动。没有悬停效果(例如:在 Spotify 中,悬停在按钮上应使按钮变大且呈绿色,链接应带有下划线,这不会发生在冻结的屏幕上)
- 键盘仍然有效。视频仍然有效,一切仍然正常。
- 使用键盘快捷键,我仍然可以在冻结的屏幕上更改桌面。
- 将窗口从“冻结”屏幕移动到另一个屏幕(使用键盘快捷键)可以使该窗口再次可单击。将其向后移动会撤消它,这表明它肯定是屏幕而不是窗口停止响应点击。
- 单击关闭
dunst
通知是有效的。我的rofi
开始菜单打开得很好并且是交互式的。 - 屏幕录制可以与 SimpleScreenRecorder 和 OBS 配合使用。
- 使用眼镜在冻结的屏幕上截取屏幕截图:我可以在冻结的屏幕上单击并拖动一个矩形来截取裁剪的屏幕截图(当然,如果我在另一台显示器上打开眼镜,否则我将无法单击该
Take a new screenshot
按钮) - 这种情况已经发生了好几个月,也许一年了。
- 我的 bspwm 设置是这样设置的:如果我将鼠标悬停在某个窗口上,该窗口就会成为焦点。在冻结的屏幕上,只有最后一个获得焦点的窗口才会获得焦点。我无法使用鼠标在两个窗口之间聚焦,但 bspwm 确实注意到我的鼠标位于该屏幕上。
Chromium 中的屏幕共享
在 Chromium 中,您可以看到屏幕选项卡和应用程序选项卡:
如果我从应用程序选项卡共享屏幕(例如 eDP-1-1 = 我的笔记本电脑屏幕),则会触发问题。如果我从“您的整个屏幕”选项卡共享屏幕,则不会。
Firefox 和 Discord 中的屏幕共享
当选择要共享的屏幕时,它们实际上并不向您显示屏幕,而是向您显示应用程序:
您看到的 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
一些问题
我有一些问题可能会帮助我解决此问题:
Firefox 和 Discord 使用什么软件/技术来共享屏幕? Chromium 和 Microsoft Teams 使用不同的软件吗?
使用什么软件/技术
bspwm
来共享屏幕? i3 甚至不提供共享特定屏幕的选项,因此它们必须使用不同的技术。我还能提供什么(日志、系统信息……)?
答案1
从这Reddit 帖子中,我们发现 bspwm 的focus_follows_pointer
选项设置为 时会导致屏幕在共享菜单中显示为窗口true
。
这些屏幕根本不应该出现。根据/u/ortango_ 的评论,共享它们甚至不应该起作用:
Firefox 不支持每个显示器共享。那些你认为是显示器的东西不是;他们只有监视器的名字。
它们被映射,
focus_follows_pointer
以便鼠标可以在窗口之间跟踪 - 这具有 webrtc 认为它们是普通窗口的副作用(但它们不是普通窗口或监视器),
所以问题出在bspwm上,我提出了一个问题这里。它在 Chromium 中起作用的原因是它使用 libwebrtc 的较新实现。微软团队可能也做了同样的事情。
以下是我在 Mozilla 的 bugtracker 中发现的相关功能请求: