编辑:从答案中可以看出,这实际上与待机或休眠无关,而是与我经常在进入待机状态之前关闭应用程序窗口(这触发了错误)有关。
我已经看到很多人在网上的各个地方报告了这个问题,没有任何解决方案,但我想无论如何我都会添加我的:
很多时候,在一段时间后(当它进入待机状态时)返回计算机后,我注意到一些快捷方式已经停止工作。这不仅发生在终端中,也发生在 Chrome 中(Ctrl-L、Ctrl-R、F5 都停止工作)。它也不会影响所有 ctrl 快捷键:例如,Ctrl-C 仍在工作(感谢上帝!)。
有没有办法调试这个?早点尝试xev
并没有让我到任何地方,但也许有一些方法可以找出阻止我的按键到达程序的原因?
编辑:我可以看到 Ctrl-R 发生了一些奇怪的事情
有东西在抢键盘快捷键!
从捕获的输出xev
KeyPress event, serial 37, synthetic NO, window 0x5200001,
root 0xee, subw 0x0, time 24547557, (-130,529), root:(0,633),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
FocusOut event, serial 37, synthetic NO, window 0x5200001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 37, synthetic NO, window 0x5200001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 37, synthetic NO, window 0x0,
keys: 4294967278 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
KeyRelease event, serial 37, synthetic NO, window 0x5200001,
root 0xee, subw 0x0, time 24548550, (-130,529), root:(0,633),
state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
将此与 Ctrl-C 进行比较
我们可以很容易地看到这里发生的四个逻辑事件
KeyPress event, serial 37, synthetic NO, window 0x5200001,
root 0xee, subw 0x0, time 24724066, (572,852), root:(702,956),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 37, synthetic NO, window 0x5200001,
root 0xee, subw 0x0, time 24724818, (572,852), root:(702,956),
state 0x14, keycode 54 (keysym 0x63, c), same_screen YES,
XLookupString gives 1 bytes: (03) ""
XmbLookupString gives 1 bytes: (03) ""
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x5200001,
root 0xee, subw 0x0, time 24724966, (572,852), root:(702,956),
state 0x14, keycode 54 (keysym 0x63, c), same_screen YES,
XLookupString gives 1 bytes: (03) ""
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x5200001,
root 0xee, subw 0x0, time 24725339, (572,852), root:(702,956),
state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
我设法找到了最不可能的罪魁祸首:Caprine Messenger 应用程序。!在修复快捷方式库中的错误之前,使用 Electron 框架(Spotify、Atom、VS Code)制作的许多其他应用程序也可能发生这种情况。
在阅读电子问题跟踪器上的错误报告后,我现在知道如何始终如一地重现错误:只需关闭应用程序,使其仅驻留在系统托盘中。但在我到达那里之前,我设法找到了确凿的证据,证明是 Caprine 捕获了捷径并且杀死它解决了这个问题。这是我发现的(可用于类似情况):
对此重复问题的一个有点不透明的答案解释说,可以通过发出一些神奇的击键来检测哪个应用程序正在抓取按键。起初我不太明白如何设置它,以为我必须经历各种麻烦(弄乱 Xorg 配置,禁用 vty 切换,++)来设置一个特殊的键映射配置,直到我突然意识到答案实际上还描述了如何以编程方式触发这些组合键!
所以我需要做的就是打开两个终端窗口。在第一个终端窗口中,我开始在 Xorg 系统中记录事件:
在另一个窗口中,我触发了将组合键发送到 Xorg 系统的事件:
像这样以编程方式执行此操作比像手指章鱼一样手动执行此操作要容易得多:-) 在另一个窗口中捕获的事件日志(13'000 行!)中,有趣的部分在前几行中很明显:
杀死 Caprine 后,我终于可以在终端再次开始使用 Ctrl-R 进行反向历史搜索,以及刷新 Chrome!
xev
还输出与我在问题中详述的完全不同的内容,现在与 Ctrl-L 的输出非常相似:编辑:原来这个错误是已知的
该错误问题还显示了如何始终如一地重现此问题(最小化)。这是由电子本地快捷方式库中的错误引起的。
制作了一个小工具,可以轻松地以编程方式发送这些快捷方式。