为什么我的 xmodmap 绑定涉及 AltGr 仅适用于某些键?

hug*_*omg 12 xmodmap

我想重新映射我的 AltGR+Right_Windows,但我不知道如何。无论我尝试什么,无论是否按下右 alt,按右 Windows 键都会发出名称 keysym。

这些是我现在正在测试的 xmodmap 文件的内容。在我的键盘中,38 是“a”的键码,48 是单引号/双引号的键码,134 是右 Windows 键的键码。

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

当我按下 Right_Alt+撇号时,它输出 5,但 Right_Alt+a 和 Right_Alt+Right_Windows 给出 1(当按下右 alt 时和未按下时),这不是我想要的。

我当前的键盘布局是us(alt-intl),右侧的 alt 显然设置为充当 AltGr / Iso_Level3_Shift。的输出xmodmap -pm如下:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Run Code Online (Sandbox Code Playgroud)

Pav*_*rda 7

使用 xmodmap 配置单个键映射

是时候写下我自己的研究结果了。

我想我一定在 xmodmap 中遗漏了一些东西,它只是没有很好的记录,人们很困惑。但事实证明,关于 XKB 和 xmodmap 的 X.Org 设计只是愚蠢的。

史诗般的失败:xmodmap

您可以使用 xmodmap 重新定义现有的映射,只要这些映射确实存在于您的原始键盘布局中。在问题中描述的情况下,您不能扩展任何键的行为以使用 AltGr。您只能更改已使用 AltGr 的键代码的 AltGr 键符。

另见:http : //blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

解决方法:Mode_switch

@Ned64 的回答中描述了此解决方法。您可以AltGrISO_Level3_Shift到重新映射Mode_switch

我成功地使用以下命令行重新映射AltGr.

xmodmap -e 'keycode 108 = Mode_switch'
Run Code Online (Sandbox Code Playgroud)

缺点是它会破坏您当前的键盘布局,但您可以使用xmodmap已经提到的@Ned64一一重新创建所有映射。

解决方法:修改键盘布局

我正在使用us(cz_sk_de)我的键盘布局,我试图通过为我想要扩展的键添加配置来修改它。

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };
Run Code Online (Sandbox Code Playgroud)

(在部分xkb_symbols "cz_sk_de"/usr/share/X11/xkb/symbols/us

只需重置键盘布局即可使用修改后的版本。

setxkbmap 'us(cz_sk_de)'
Run Code Online (Sandbox Code Playgroud)

现在,你可以:(1)型捷克语和英语引号和使用的组合椭圆,.ShiftAltGr键和/或(2)重新映射使用这些密钥xmodmap,现在它们被定义。

主要缺点是它setxkbmap似乎不支持键盘布局的任意位置,因此您需要写入系统配置而不是主目录。

结论

这似乎是 X.Org 过度设计和糟糕设计的一个例子,即使是像将键代码和修饰符组合映射到符号这样的微不足道的事情,也被证明是一个问题。这些工具似乎没有提供一种合理的方法来仅更改用户配置中的单个键映射而没有任何副作用。


Ned*_*d64 5

第一步:使 AltGr 可用

我发现 AltGr-modified Keys 只在我的系统上工作,如果我也将 AltGr-Key 重新映射到Mode_switch,就像这样:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"
Run Code Online (Sandbox Code Playgroud)

如果您有不同的键盘,您可能需要将其替换为108您的代码,请输入以下内容进行检查

xmodmap -pke | grep Alt_R
Run Code Online (Sandbox Code Playgroud)

然后使用该号码。(密钥通常Alt_R在我知道的系统上调用。)

或者,如果 Alt_R 尚未分配给其他东西,这也可能有效:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"
Run Code Online (Sandbox Code Playgroud)

您的 AltGr 修改器现在将服务于您的修改器列表中的位置 3(Shift:4)。

第二步:根据需要分配键

您可以为您希望的任何键盘键分配 AltGr 变体。如果您现在有其他与所需代码不对应的键,则需要像其他键(您测试的键)一样重新分配这些键。

第三步:将其转换为脚本

现在只需执行您的xmodmap命令并将对默认键盘的所有(但仅)修改写入文件 - 这比加载完整的键盘映射更快。每次登录后以及每当某个进程重置键盘映射时启动此脚本一次。

多年来,我在 Solaris、IRIX 和 Linux 下对此进行了大量试验,据我所知,这是使 AltGr 正常工作的唯一解决方案 - 20 多年来,它对我来说一直运行良好。