XFCE 交换 Alt 和 Super(Windows)键

XFCE 交换 Alt 和 Super(Windows)键

我尝试了很多方法来尝试将运行 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
...

虽然我自己没有交换 alt 和 super,但我已经使用了这种技术重新映射媒体键使用本文作为参考。

相关内容