交换 alt 和 super

交换 alt 和 super

我有一台运行 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 维基

相关内容