Xfce

XFCE 交換 Alt 和 Super (windows) 鍵

  • January 30, 2022

我嘗試了很多方法來嘗試在執行 LinuxMint 20.3 和 xfce/xfwm4 的 Thinkpad X220 上交換alt和鍵。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

到目前為止,沒有什麼對我有用,任何正確方向的提示將不勝感激!

我從來沒有運氣讓setxkbmap做我想做的事,但是在核心級別成功地重新映射了鍵。

首先您需要知道您的輸入設備和按鍵掃描碼。該工具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完成後。

按下altsuper後,您需要記下它們的鍵碼。在我的情況下,這些按鍵的輸出如下所示:

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,但我已經使用此技術重新映射媒體鍵,並使用本文作為參考。

引用自:https://unix.stackexchange.com/questions/688546