我尝试了很多方法来尝试将运行 LinuxMint 20.3 的 Thinkpad X220 上的alt
和键与 xfce/xfwm4 交换。windows
我已经尝试过setxkbmap -option altwin:swap_alt_win
,将以下内容添加到~/.xmodmap
:
remove mod1 = Alt_L
remove mod4 = Super_L
add mod1 = Super_L
add mod4 = Alt_L
和跑步xmodmap ~/.xmodmap
我已经查看了Keyboard > Layout > Change Layout Option
可用的内容。
FWIW,showkey
报告:
ALT keycode 56
SUPER keycode 125
我也尝试过手动设置~/.xmodmap
:
keycode 56 = Alt_L
keycode 125 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L
到目前为止,没有任何东西对我有用,任何正确方向的提示将不胜感激!
答案1
我从来没有运气得到过设置xkbmap做我想做的事,但在内核级别成功地重新映射了键。
首先您需要知道您的输入设备和按键扫描码。该工具evtest
可以用于此目的。
$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Power Button
/dev/input/event2: USB Laser Mouse
...
/dev/input/event7: SONiX USB DEVICE
/dev/input/event8: SONiX USB DEVICE Keyboard
/dev/input/event9: SONiX USB DEVICE System Control
/dev/input/event10: SONiX USB DEVICE Consumer Control
/dev/input/event11: SONiX USB DEVICE
...
Select the device event number [0-31]:
这里显示了 5 个与键盘相关的设备,而设备号 7 恰好是实际的键盘。通过反复试验来找出这一点。
选择键盘后记下设备 ID。
Select the device event number [0-31]: 7
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xc45 product 0x5004 version 0x111
Input device name: "SONiX USB DEVICE"
Supported events:
...
该行Input device ID
就是您所需要的,在您选择设备后就会显示该行。
选择后,您可以敲击键盘上的某些键,并且将记录按键按下和释放的事件。如果您没有看到记录的事件,则需要尝试选择其他设备。ctrl-c
完成后他的。
您需要记下关键代码替代和极好的按下它们后。就我而言,这些按键的输出如下所示:
Event: time 1643575346.666078, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
Event: time 1643575346.666078, type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 1
Event: time 1643575346.666078, -------------- SYN_REPORT ------------
Event: time 1643575346.766070, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
Event: time 1643575346.766070, type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 0
Event: time 1643575346.766070, -------------- SYN_REPORT ------------
...
Event: time 1643575369.928048, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e2
Event: time 1643575369.928048, type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 1
Event: time 1643575369.928048, -------------- SYN_REPORT ------------
Event: time 1643575370.046045, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e2
Event: time 1643575370.046045, type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 0
Event: time 1643575370.046045, -------------- SYN_REPORT ------------
如上所示,代码 125 是超级键,56 是左 Alt 键。你们的价值观可能会有所不同。
现在您需要创建一个文件来重新映射所需的键。在/etc/udev/hwdb.d/
名为 的文件中创建一个文件50-alt_super_swap.hwdb
。确切的名称取决于您,但您需要在开头、破折号和扩展名处添加一个数字。
在该文件中,您将放置以下内容:
# Input device ID: bus 0x3 vendor 0x13ba product 0x1 version 0x110
# evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
evdev:input:b0003v13BAp0001*
KEYBOARD_KEY_70038=125
KEYBOARD_KEY_7007D=56
您需要修改该evdev:input
行以反映打印出来的设备 ID evtest
。请注意翻译和大小写。如果你没有完全正确地理解这条线,什么都不会发生。
这些KEYBOARD_KEY_*
行的值是十六进制的。十六进制 38 是十进制 56,7D 是 125。
$ sudo systemd-hwdb update
$ sudo udevadm trigger
应用更改需要几秒钟的时间。除了发现密钥交换有效之外,您还可以查看更改是否已应用。
$ udevadm info /dev/input/event7
P: /devices/pci0000:00/0000:00:07.1/0000:0d:00.3/usb3/3-2/3-2:1.0/0003:0C45:5004.0005/input/input7/event7
N: input/event7
L: 0
S: input/by-path/pci-0000:0d:00.3-usb-0:2:1.0-event-kbd
S: input/by-id/usb-SONiX_USB_DEVICE-event-kbd
...
E: KEYBOARD_KEY_70038=125
E: KEYBOARD_KEY_70075=56
...