如何用xmodmap交换Alt和Windows键?


9

我有一个Mac键盘,与普通的PC键盘相比,Alt / Win(即Option / Command)键被颠倒了,我想交换它们。到目前为止,我对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。

感谢您的帮助!


对我来说,这个交换两对Alt键和Win的:setxkbmap -device 8 dvorak -option altwin:swap_alt_win,ctrl:nocaps。我只想交换正确的Alt和Win。这不会“取消”左交换:setxkbmap -device 8 dvorak -option altwin:swap_lalt_lwin,altwin:swap_alt_win,ctrl:nocapsaltwin:swap_ralt_rwin根据,显然没有选择man xkeyboard-config
Peter Becich '17

Answers:


11

这是我的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


7

我在Ubuntu 13.04中通过结合Christophe的答案(这对我有所帮助,但不适用于修饰符,并且我不需要坟墓和波浪号作为固定键)来实现这一目标,这是关于setxkbmap的另一种答案,在设置中使用不同的选项, keyboard-layout-options(甚至查看源代码),并使用命令检查当前配置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键盘的方式来调用。


1
很多blabla。如果只想交换左alt和超级键,请使用以下命令:setxkbmap -option altwin:swap_lalt_lwin如果要同时切换左和右alt和超级键,请使用以下命令:setxkbmap -option altwin:swap_alt_win
erik

好答案。但是我该怎么做才算正确的胜利和正确的替代(AltGr)?我最近有一个unicomp,就像我习惯的那样
继承

6

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

要获取您的键码编号,请在命令行上$ xev 并键入您要获取其编号的键。有关更多信息,请参见这篇文章:xev和xmodmap用法

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

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

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


在intellij内部存在问题,仅与mod1和mod4交换密钥时无法识别alt密钥。但这重设了键码在intellij中的效果很好。干得好
Jimubao

2

您还可以将hid_apple内核模块选项设置为仅修改Apple键盘,而不修改普通PC键盘。无需使用xkbmap或Xmodmapr。只需/etc/modules.d/hid_apple.conf使用内容创建文件

options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1

fnmode=2F1...F12无需按即可将功能键映射到Fn。如果您喜欢媒体键,请忽略它。有关更多信息,请参见Arch Wiki

永久在Ubuntu上

echo options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1 | sudo tee -a /etc/modprobe.d/hid_apple.conf
sudo update-initramfs -u -k all

0

我建议以后不要使用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!
#
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.