我有一台运行 Linux 的 Macbook Air。我想将键盘两侧的alt
和键互换。super
如何使用 cli 工具执行此操作?
更新
根据 Drav Sloan 的回答,我使用了以下内容:
keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L
keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R
答案1
如果您只想交换左 Alt 和超级键,请在终端中执行命令:
setxkbmap -option altwin:swap_alt_win
要恢复默认行为,只需使用:
setxkbmap -option
注意:这是暂时的。如果您希望效果永久将其添加到您的启动文件中。
答案2
如果您想在 Apple 键盘上执行此操作,请尝试以下操作:
echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd
要使其适用于较低版本的 Linux,您可以尝试以下操作: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html
答案3
实现这一目标的一种方法是通过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
返回的键码。另外,在这里我仅替换左侧的超级键和 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
.
答案4
此外科尔扬科普回答。如果您需要交换其他服务键组合(Ctrl、Alt 等),您可以使用 setxkbmap 的许多其他选项。运行以下命令以查看所需的选项及其描述(将“alt”和/或“win”替换为其他键):
$ grep -E "(alt|win):" /usr/share/X11/xkb/rules/base.lst
然后通过 setxkbmap 设置所选选项:
$ setxkbmap -option *chosen option*
该方法的完整描述位于Archlinux 维基。