一种方法是通过xmodmap
。您可以运行xev
以获取关键事件。在运行时,xev
将出现一个框,您可以将其聚焦,然后按要交换的键。它应该输出类似于该Alt密钥的详细信息:
KeyPress event, serial 28, synthetic NO, window 0x8800001,
root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
我在PC上,没有“命令键”,但是有等效的“ Windows键”,xev给出:
KeyPress event, serial 28, synthetic NO, window 0x8000001,
root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
由于xmodmap不了解state
,并且很容易破坏键映射,因此建议您执行以下操作:
xmodmap -pke > defaults
然后我们创建一个xmodmap文件:
keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L
请注意我如何使用xev
返回的键码。同样在这里,我只替换左的super和alt键(并将右的键保留其旧的行为)。然后,我们可以简单地运行xmodmap
来设置以下键:
$ xmodmap -v modmap.file
! modmap:
! 1: keycode 14 = Alt_L
keycode 0xe = Alt_L
! 2: keycode 93 = Super_L
keycode 0x5d = Super_L
! 3: remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
remove mod1 = 0xe
! 4: remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
remove mod4 = 0x5d
! 5: add Mod1 = Super_L
add mod1 = Super_L
! 6: add Mod4 = Alt_L
add mod4 = Alt_L
!
! executing work queue
!
keycode 0xe = Alt_L
keycode 0x5d = Super_L
remove mod1 = 0xe
remove mod4 = 0x5d
add mod1 = Super_L
add mod4 = Alt_L
您可以运行而无需-v
(详细)开关以进行静默运行,但是如果您在modmap文件中犯了错误,我发现它很有用。如果情况变得混乱,则只需重新应用默认值即可:
xmodmap defaults
Modmap通常是在X的启动时运行的,因此,如果将modmap命令放入,则可以将它们作为默认值应用~/.xmodmaprc
。