我有一个 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)
目前,左/右 alt 键的键码为 64 和 108,而左/右 Windows 键的键码为 133 和 134。
我很感激任何帮助!
答案1
这是我的 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
您必须修改 .xsession 或 .xinitrc 才能调用 xmodmap .Xmodmaprc
答案2
我发现在使用 xkb 和 gnome 的 Ubuntu 16.04 上,与Christopher Devine 的回答如果您想保留 alt 和 super 键的所有快捷方式行为,请回答上述问题。这是我找到的最简单的解决方案。
要获取您的密钥代码,请在命令行上$ xev
输入要获取其数字的密钥。有关更多信息,请参阅此帖子:xev 和 xmodmap 用法
这样做会给我:
Super_L
有密钥代码 133
Alt_L
有密钥代码 64
因此,要将 Windows 又名 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
最后两行将 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
或者在 Ubuntu 中我只需运行:
$ setxkbmap
答案3
我在 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"
当我回到普通键盘时,我会调用另一个命令:
# 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"
请注意,我添加了设置
terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier
启用 ctrl+alt+backspace Gnome 会话终止、使用右 Win 键进行 3 级键访问、通过同时按下两个 Shift 键进行布局转换以及将 Caps Lock 转换为额外的 Ctrl(分别)。您可能希望排除其中的部分或全部。
您可以使用自动键将呼叫绑定到某些键盘快捷键,或者从您的键盘上呼叫它,.profile
或者.bashrc
如果您一直使用 Apple 键盘。
答案4
我建议以后不要使用 xmodmap,因为它在 Wayland 中不起作用,但除此之外,setxkbmap 或 xkbcomp 将是今后最好的方法,我的项目 Kinto 就使用了它。
Kinto 会交换您想要的按键,但它也会监听您正在使用的应用程序,这样您就可以保留终端应用程序的正确键盘映射,以匹配您在 Mac 上的体验。
以下是相关链接,但我还将介绍 Kinto 的核心功能 - 减去自定义键盘映射和交替键盘映射功能,这样您就可以了解 Kinto 的实际功能。
https://github.com/rbreaves/kinto
https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0
https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb
要点内容
# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all
# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd
# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win
# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win
#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#