如何在 Ubuntu 17.10 Wayland 中重新映射密钥?(上移键)

Aar*_*mra 5 keyboard-layout wayland

我有一台联想 Yoga 710,其中“向上”键位于 shift 键所在的位置。不幸的是,这台笔记本电脑不能运行早期的内核,因为它有“新”硬件。我在这里看到了在 Wayland (GNOME) 中重新映射密钥的机制:https : //superuser.com/questions/1196241/how-to-remap-caps-lock-on-wayland

但是,我在任何地方都找不到“Up”的 xkb-options 代码。根据/usr/share/X11/xkb/rules/base,“右移”可能是“rshift”。xkb-options 键名称列表在哪里和/或“右移键”和“向上”键的名称是什么?

小智 7

经过大约 2 天的谷歌搜索“如何在wayland 上重新映射密钥”问题的答案后,我设法找到了一种非常非常简单的方法。我不知道它是否正确,但它确实有效。

我唯一要做的就是打开文件

/usr/share/X11/xkb/keycodes/evdev
Run Code Online (Sandbox Code Playgroud)

该文件以 <code>=number 的形式列出了所有键的所有键码

您可以简单地交换密钥代码。我实际交换的是数字而不是代码。对于 Emacs,我用 Ctrl 更改了 dvorak 上的反斜杠。

编辑:要找出哪个“代码”代表每个键,如 <代码> = 数字,您可以xev从终端运行命令以获取按下按钮后在终端中打印的键码(在 evdev 文件中搜索该键码以获取密钥的 evdev 扫描码),或者您可以访问

/usr/share/X11/xkb/symbols/
Run Code Online (Sandbox Code Playgroud)

这是一个目录,其中包含计算机上安装的每种语言和修饰键的一个文件。选择您的电脑运行的语言。

在该文件中将列出所有支持的变体,例如 dvorak、程序员 dvorak、colemans 等。

在那里您可以看到 <code> 名称


Eri*_*und 4

现在使用 Wayland 时自定义键有点棘手: https://unix.stackexchange.com/questions/292868/how-to-customise-keyboard-mappings-with-wayland

但是,如果您只想重新映射一个键以使其充当另一个键,则该命令setkeycodes似乎可以工作。

以root身份在终端中运行,然后按一次Upsleep 1; showkey -s键,然后等待10秒

root@laptop:~# sleep 1; showkey -s
kb mode was ?UNKNOWN?
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
^[[A0xe0 0x48 
0xe0 0xc8 
root@laptop:~# 
Run Code Online (Sandbox Code Playgroud)

从输出中我们看到这0xe0 0x48是键Up的扫描码。

以root身份在终端中运行sleep 1; showkey -k,然后按一次右移键,然后等待10秒

root@laptop:~# sleep 1; showkey -k
kb mode was ?UNKNOWN?
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
keycode  54 press
keycode  54 release
root@laptop:~# 
Run Code Online (Sandbox Code Playgroud)

从输出中我们看到54是Right shift键的键码。

要将向上键重新映射到右移键,请setkeycodes 0xe048 54以 root 身份在终端中运行。

root@laptop:~# setkeycodes 0xe048 54
Run Code Online (Sandbox Code Playgroud)

扫描代码以前被打印为0xe0 0x48,但现在当它作为输入参数给出时setkeycodes,它被写入0xe048