如何强制 X 服务器生成特定的键符号和状态?

如何强制 X 服务器生成特定的键符号和状态?

我有一台 Macbook,我想将正确的“命令”键(也称为 Super_R、RWIN)映射到 AltGr。我想要这个的原因是由于普通的挪威键盘如何映射方括号键和大括号键等。

然而,这是一个问题。

我首先使用 xmodmap 映射了密钥,这在大多数程序中都可以正常工作。但在某些程序中不行,特别是在 Firefox 中无法工作。

相关问题,但对我没有帮助:

https://superuser.com/questions/801611/how-to-make-all-applications-respect-my-modified-xkb-layout

https://wiki.archlinux.org/index.php/X_KeyBoard_extensio:

如何让AltGr+i,j,k,l作为光标键正常工作?

Xmodmap解决方案:

keycode 134 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift

怀疑这是 Xmodmap 的问题,我尝试使用 XKB(X 键盘扩展):https://wiki.archlinux.org/index.php/X_KeyBoard_extension

key <RWIN> {         [ ISO_Level3_Shift ] };

然而,同样的问题仍然存在。

我所说的“问题”是指它根本不起作用。例如,按我的新 AltGr+4 应该会产生一个美元符号,但事实并非如此。它在大多数程序(例如 xterm)中运行良好,但在 Firefox 中则不然。在 Firefox 中,它生成“4”而不是“$”。

正如帖子在https://superuser.com/questions/801611/how-to-make-all-applications-respect-my-modified-xkb-layout解释:

“有些应用程序自己跟踪 Control_L 等键符号,其他应用程序只是查找状态中的修饰符位。”

“最有可能的是,那些无法运行的程序会观察修改器,并且在某些程序处于活动状态时不想运行。”

我相信 Firefox 也会做同样的事情。

我的问题是,当我按下特定的组合键时,如何强制 X 服务器将确切的状态发送到应用程序?

这就是我所拥有的:

KeyPress event, serial 37, synthetic NO, window 0x4200001,
    root 0x2de, subw 0x0, time 1100024, (222,-357), root:(1005,749),
    state 0xc0, keycode 13 (keysym 0x24, dollar), same_screen YES,
    XLookupString gives 1 bytes: (24) "$"
    XmbLookupString gives 1 bytes: (24) "$"
    XFilterEvent returns: False

这就是我想要的(来自具有适当键盘的另一台笔记本电脑,...只是我懒得手动输入它,因为它不相关):

KeyPress event, serial 37, synthetic NO, window ...
   root 0x233, subw 0x0, time ...
   state 0x90, keycode 13 (keysym 0x24, dollar), same_screen YES,
   XLookupString gives 1 bytes: (24) "$"
   XmbLookupString gives 1 bytes: (24) "$"
   XFilterEvent returns: False

我认为相关部分是“国家”。状态指定修饰键。

当我按下 Super_R + 4 时,如何强制 X 产生此状态和键符号?如果我能弄清楚这一点,我可能也可以映射我需要的其他键,并最终拥有一个可以使用的键盘。

相关内容