在某些应用程序中,输入大写字母就像按 ESC 键。
再现:
- 打开 LibreOffice 文档
- 选择“另存为”(Unity 对话框)
- 点击“创建文件夹”
- 使用 Shift 键输入大写字母(例如 Shift+A)
此时,新文件夹的创建将被取消。 (就像按下ESC键一样)
这种行为也存在于许多不同的程序和游戏中。
xev
使用(按 Shift+d)分析情况
# xev
KeyPress event, serial 37, synthetic NO, window 0x4c00001,
root 0x259, subw 0x0, time 994702, (15,-13), root:(987,197),
state 0x10, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
FocusOut event, serial 37, synthetic NO, window 0x4c00001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 37, synthetic NO, window 0x4c00001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 37, synthetic NO, window 0x0,
keys: 89 0 0 0 0 1 4 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
KeyPress event, serial 37, synthetic NO, window 0x4c00001,
root 0x259, subw 0x0, time 994927, (15,-13), root:(987,197),
state 0x11, keycode 40 (keysym 0x44, D), same_screen YES,
XLookupString gives 1 bytes: (44) "D"
XmbLookupString gives 1 bytes: (44) "D"
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x4c00001,
root 0x259, subw 0x0, time 995062, (15,-13), root:(987,197),
state 0x11, keycode 40 (keysym 0x44, D), same_screen YES,
XLookupString gives 1 bytes: (44) "D"
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x4c00001,
root 0x259, subw 0x0, time 995395, (15,-13), root:(987,197),
state 0x11, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
我认为这些FocusOut
事件FocusIn
看起来很可疑。
Linux:Ubuntu 14.04 LTS 32 位、Unity
我该如何修复我的系统?欢迎任何想法或进一步的测试!
编辑:解决方案
我曾经将语言切换配置为LeftShift+RightShift。这种方法多年来一直有效,但在某些时候却成为了问题。无论如何,配置切换到任何其他组合键都解决了问题。
答案1
FocusOut event, serial 37, synthetic NO, window 0x4c00001, mode NotifyGrab, detail NotifyAncestor FocusIn event, serial 37, synthetic NO, window 0x4c00001, mode NotifyUngrab, detail NotifyAncestor
当你按下A并Shift保持时发生的事情是被动抓取:有一个 X 客户端对此组合键具有独占控制权,当按下该组合键时,事件仅路由到该客户端,而不路由到xev
其他任何人。xev
确实报告客户端在发生时抓住组合键并在结束时取消抓住它。
通俗地说,有一个程序将Shift+定义A为全局键绑定。这可能是一个拼写错误,您的意思是绑定Shift+ Alt+key或Win+ Shift+A某些东西。
在在命令行上操作 X 键和指针抓取我问如何找到抢手者。我发现最好的方法只报告主动抓取,因此查询信息时必须按下按键。
- 安装xdo工具如果您还没有。
- 跑步
sleep 1; xdotool key XF86LogGrabInfo
。 - 一秒钟内,按住Shift+ A。按住直到
xdotool
运行。 - 查看 X 服务器日志以获取有关抓取的信息。 X 服务器日志的典型位置是
/var/log/Xorg.0.log
(反映显示编号,即: if is或then Look at等0
中的编号)。$DISPLAY
$DISPLAY
:1
:1.0
/var/log/Xorg.1.log
以下是一些示例输出,显示我按下的键是锯鱼定义的键绑定:
[2292688.331] Active grab 0x41602244 (core) on device 'Virtual core keyboard' (3):
[2292688.331] client pid 6745 sawfish
[2292688.331] at 2292687547 (from passive grab) (device thawed, state 3)
[2292688.331] core event mask 0x3
[2292688.331] passive grab type 2, detail 0x4e, activating key 78
[2292688.331] owner-events false, kb 0 ptr 0, confine 0, cursor 0x0
[2292688.331] (II) End list of active device grabs
答案2
在 Ubuntu 16.04 LTS 64 位上,我在“文件”中也有类似的行为:
- 您可以在“以图标网格形式查看项目”模式下重命名文件和文件夹
- 在“以列表形式查看项目”模式下:
- 重命名时按right shift与按 类似ESC
- 压制left shift工程
- 按left shift+与按, +any letter类似ESCleft shiftany letter
因此,在重命名文件或文件夹时,无法在“以列表形式查看项目”中输入任何大写字母。
解决方案:
- 去
System settings
/Keyboard
- 切换到
Shortcuts
选项卡 - 选择
Universal access
左侧 - 删除缩放绑定