如何用 xmodmap 交换 Alt 和 Windows 键?

Dan*_*ler 10 linux keyboard xmodmap

我有一个 Mac 键盘,其中 Alt/Win(即 Option/Command)键与普通 PC 键盘相反,我想交换它们。到目前为止,我对 xmodmap 没有任何运气。标准配置如下:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Run Code Online (Sandbox Code Playgroud)

目前,左/右 alt 键是键码 64 和 108,而左/右 Windows 键是 133 和 134。

我感谢任何帮助!

小智 12

这是我的 Xmodmaprc:

! Exchange left Alt and left Win
remove mod1 = Alt_L
remove mod4 = Super_L
add mod1 = Super_L
add mod4 = Alt_L
! Exchange tilde and lesser/greater
keycode  94 = grave asciitilde dead_grave dead_tilde grave asciitilde
keycode  49 = less greater less greater bar brokenbar bar brokenbar
! Steve, your keyboard sucks
Run Code Online (Sandbox Code Playgroud)

你必须修改你的 .xsession 或 .xinitrc 来调用 xmodmap .Xmodmaprc


met*_*mit 7

我在 Ubuntu 13.04 中通过结合 Christophe 的答案(这对我有帮助,但对修饰符不起作用,我不需要坟墓和波浪号作为死键)来实现这一点,另一个关于 setxkbmap 的答案,在设置中使用不同的选项 -键盘布局选项(甚至查看源代码)并使用命令检查当前配置setxkbmap -query(您也应该运行该命令,以检查您的特定键盘型号和布局代码,因为它们可能有所不同)。

我有一个脚本,当我切换到 Apple 键盘时调用该脚本(关键选项是altwin:swap_lalt_lwin交换 Alt 和 Super 修饰键):

# clear all options
setxkbmap -model "pc105" -layout "hr,us" -option ""  

# set the Apple keyboard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier,altwin:swap_lalt_lwin"

# swap the grave-tilde with less-greater key
#  - variant without dead keys
xmodmap -e "keycode  94 = grave asciitilde"
xmodmap -e "keycode  49 = less greater less greater bar brokenbar bar brokenbar"
Run Code Online (Sandbox Code Playgroud)

当我回到普通键盘上时,我会调用另一个:

# clear settings
setxkbmap -model "pc105" -layout "hr,us" -option ""

# pc keyobard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier"
Run Code Online (Sandbox Code Playgroud)

请注意,我添加了设置

terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier
Run Code Online (Sandbox Code Playgroud)

启用 ctrl+alt+backspace Gnome 会话终止,使用右键 Win 键进行 3 级键访问,通过按下两个 shift 键来切换布局并将我的 Caps Lock 变成一个额外的 Ctrl(分别)。您可能希望排除其中的部分或全部。

您可以使用AutoKey将调用绑定到某些键盘快捷键,或者从您的.profile或一直.bashrc使用 Apple 键盘调用它。

  • 很多bla bla。如果您**只想交换左 alt 和 super 键**,请使用以下命令:`setxkbmap -option altwin:swap_lalt_lwin` 如果您想同时切换左右 alt 和 super 键,请使用以下命令:`setxkbmap -选项 altwin:swap_alt_win`。 (3认同)

Tre*_*ens 7

我发现在使用 xkb 和 gnome 的 Ubuntu 16.04 上,如果您想保留 alt 和 super 键的所有快捷方式,与上面的Christopher Devine 的答案相比,您需要一些额外的步骤。这是我找到的最简单的解决方案。

要获取您的密钥代码,请在命令行上$ xev 键入您想要获取其编号的密钥。有关更多信息,请参阅此帖子:xev and xmodmap usage

这样做给了我: Super_L有键码 133 Alt_L有键码 64

因此,要将 Windows aka Command(在 Mac 上)又名 Super 键与左 Alt 键交换,我会这样做:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 133 = Alt_L
keycode 64 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L
Run Code Online (Sandbox Code Playgroud)

最后两行将 mod1 和 mod4 添加回 Alt_L 和 Super_L 的键符,就像它们被删除一样。如果没有这样做,我会失去与超级键(搜索)相关联的快捷方式,它也会破坏 alt+tab 组合以在窗口之间切换。

您可以将这些命令添加到 .xmodmap 之类的文件中,然后 $ xmodmap .xmodmap运行它们。

或者,您可以在命令行上按顺序运行这些,例如: $ xmodmap -e <expression here>

如果要返回默认键映射,则可以将上面代码中的数字反转,例如:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 64 = Alt_L
keycode 133 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L
Run Code Online (Sandbox Code Playgroud)

或者在 Ubuntu 中我只是运行: $ setxkbmap