如何在MacBook Pro上切换Command键和Control键?


59

我已经在网上搜寻过,但似乎无法获得Xmodmap /使其正常工作。我想同时将Command键和Control键交换-本质上是将它们当前的操作反转。

我该怎么做?

我尝试xmodmap -e "keycode 133 = Control_L"了键码134(右命令)和键码37(左控制)的相应命令。我什至尝试了这些命令以及plus xmodmap -pke > ~/.Xmodmapxmodmap ~/.Xmodmapin .xinitrc

我的最终目标是我希望单击controlcommand进行功能控制时出现HUD / Dash ,即control-v粘贴的常用快捷方式,我会单击command-v

Answers:


63

我想到了。将以下内容放入~/.Xmodmap

clear control
clear mod4

keycode 105 =
keycode 206 =

keycode 133 = Control_L NoSymbol Control_L
keycode 134 = Control_R NoSymbol Control_R
keycode 37 = Super_L NoSymbol Super_L

add control = Control_L
add control = Control_R
add mod4 = Super_L

要测试,请运行以下命令:

xmodmap ~/.Xmodmap

要使其每次运行,请将其添加到“启动应用程序”中。

它可以在任何MacBook Pro上使用;问题是Xmodmap将Super_L分配给左和右命令键,将Control_L分配给左控制键。由于某种原因,默认情况下,Ubuntu认为MacBook Pro具有标准的105键键盘(可能考虑了完整的Apple Keyboard),但这是错误的。无论如何,我将键码重新分配给了正确的keyims,然后将keyims分配给controlmod4


我还有一个问题:如何将左控制键更改为alt键,反之亦然,将左控制键旁边的alt键更改为左控制键?
719016 2015年

如何保持右侧获胜按钮正常工作?
arcanine

请注意,这不适用于键盘布局切换。因此,如果使用多个布局,则每次更改布局后都必须运行xmodmap。下面的答案表明编辑/ usr / share / X11 / xkb / symbols / pc不受此影响。
clorz

它是否可以在VNCViewer上运行。我正在使用Gnome桌面,并想用Ctrl键替换我的Apple键盘(Command键)。
艾哈迈德

32

昨天我刚刚在MBP13上安装了Ubuntu 16.04双启动。对于Ubuntu 16.04,这是我的操作方法:

步骤1:启动终端

第2步:编辑X键盘扩展名

sudo nano /usr/share/X11/xkb/symbols/pc

步骤3:进行以下更改。确保您的文件如下所示:

key <LCTL> {    [ Super_L       ]   };
key <LWIN> {    [ Control_L     ]   };

...

key <RCTL> {    [ Super_R       ]   };
key <RWIN> {    [ Control_R     ]   };

步骤4:清除xkb的快取

sudo rm -rf /var/lib/xkb/*

步骤5(有条件的):如果在步骤4之后未交换密钥,请重新启动计算机。此后对我有用。

希望对您有帮助,祝您好运!


这是比接受的答案更好的解决方案。
Axilus先生16年

没有为我工作。
chovy

这是实际的(2017)答案。
CESCO

这就是答案。更改后需要重新启动。谢谢
lxm7

这对我有用!最终,在Mac OS和Linux之间切换不会涉及太多的肌肉内存重新编程:)
JoLoCo

15

进入 System -> Preferences -> Keyboard

单击“布局”选项卡,然后单击“布局选项”按钮。

单击“ Alt / Win键行为”

选择“控件映射到Win键(和通常的ctrl键)。

来自http://ubuntuforums.org/showthread.php?t=1293081


9
请注意-这不会交换键,只会使命令键成为附加控制键。
Fabian Tamp

这不适用于Ubuntu 16.04。
唯一的

这似乎导致了Ubuntu 18.04中的预期行为
RM de Vos

我在Ubuntu上使用Apple键盘时使用了“ alt与Win交换”。
SM阿德南

6

进入系统设置,然后进入键盘布局,然后进入选项,然后进入Win / Alt键行为,然后检查“ Meta开关Ctrl”,然后在Ctrl位置中检查“ Ctrl开关元”,就可以了!

在12.04.1上,您可以通过以下方式对此进行更改:

首先,转到“系统设置”,然后单击“键盘”,然后单击“布局设置”(在左下方),然后单击右下角的“选项”,然后展开“ Alt / Win键行为”标签,然后选择“控件映射为获胜键(和通常的Ctrl键)”


在12.04为我工作。我真的不敢相信,但是它奏效了。经过数小时的混乱与.xmodmap
jyoseph 2013年

太好了,谢谢。我有较新的系统(您在第二段中描述的)。Ctrl映射到Win键,使Cmd表现为Ctrl。Ctrl键的位置->向左Ctrl键,因为Meta则相反。另外,我还必须去启动和关闭->服务管理器->启动服务,并激活键盘守护程序(默认情况下处于关闭状态)。
2014年

14.04似乎没有该“选项”链接。
Waldir Leoncio'Apr 14'15

对于Ubuntu 15.04,此选项现在可在“输入设备>键盘>高级选项卡> Alt / Win键行为部分> Ctrl映射为Win键(和通常的Ctrl键)”中使用
Serj Zaharchenko

2
无法在Ubuntu 16.04上找到任何内容
Houman '16

5

社区Ubuntu的帮助页面的Apple键盘提供了以下措施来永久性地使这种变化:(测试2017年5月27日)

/etc/modprobe.d/hid_apple.conf如有必要,运行以下命令将配置行附加到创建它的文件中 :

echo options hid_apple swap_opt_cmd=1 | sudo tee -a /etc/modprobe.d/hid_apple.conf

触发将配置复制到initramfs引导文件中。

sudo update-initramfs -u -k all

(可选)重新启动

sudo reboot

要暂时进行测试,可以运行

echo 1 | sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

4

由于没有提供的答案似乎无法在我的系统上工作,因此已针对18.04更新。我干净安装了18.04,并尝试使用有线铝苹果键盘。“英语超级”上“左超级”的默认行为被映射到Gnome桌面仪表板上。调整工具在易于使用的GUI中具有所有必需的设置!

sudo apt install gnome-tweak-tool

首先,我将仪表板热键切换到右侧,然后在“其他布局选项”下使用“ Ctrl位置/ 用Left Ctrl交换Left Win”可获得良好的效果。


gnome-tweak-tool很棒,谢谢!
丹尼斯·戈洛马佐夫

这应该是公认的答案。对于Mac,我目前发现Gnome Tweak Tools具有我想要的设置,该设置在键盘和鼠标>其他布局选项> Ctrl位置>用Left Ctrl交换Left Win。Mac键盘的Command键似乎被称为“ Win”。
bhaller

在2019年的Gnome中,这是最简单的解决方案。谢谢
jymbob

1

重复如何交换命令和控制键与XKB一步一步?

在16.04中,这就是我最终使它起作用的方式。Xmodmap不能在所有应用程序中通用运行,gnome调整工具缺少该功能,dconf编辑自定义altwin2密钥交换(如此处的主要答案)失败,所以我一直坚持不懈,直到我将几个答案组合成这个完整,简单的方法,以及优雅的解决方案:

gksudo gedit /usr/share/X11/xkb/symbols/pc

更改为:

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

key <ESC>  {    [ Escape        ]   };

// The extra key on many European keyboards:
key <LSGT> {    [ less, greater, bar, brokenbar ] };

// The following keys are common to all layouts.
key <BKSL> {    [ backslash,    bar ]   };
key <SPCE> {    [    space      ]   };

include "srvr_ctrl(fkey2vt)"
include "pc(editing)"
include "keypad(x11)"

key <BKSP> {    [ BackSpace, BackSpace  ]   };

key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
key <RTRN> {    [ Return        ]   };

key <CAPS> {    [ Caps_Lock     ]   };
key <NMLK> {    [ Num_Lock      ]   };

key <LFSH> {    [ Shift_L       ]   };
key <LCTL> {    [ Alt_L     ]   };
key <LWIN> {    [ Super_L       ]   };

key <RTSH> {    [ Shift_R       ]   };
key <RCTL> {    [ Alt_R     ]   };
key <RWIN> {    [ Super_R       ]   };
key <MENU> {    [ Menu          ]   };

// Beginning of modifier mappings.
modifier_map Shift  { Shift_L, Shift_R };
modifier_map Lock   { Caps_Lock };
modifier_map Control{ Control_L, Control_R };
modifier_map Mod2   { Num_Lock };
modifier_map Mod4   { Super_L, Super_R };

// Fake keys for virtual<->real modifiers mapping:
key <LVL3> {    [ ISO_Level3_Shift  ]   };
key <MDSW> {    [ Mode_switch       ]   };
modifier_map Mod5   { <LVL3>, <MDSW> };

key <ALT>  {    [ NoSymbol, Control_L, Control_R    ]   };
//include "altwin(meta_alt)"
key <LALT> {    [ Control_L     ]   };
key <RALT> {    [ Control_R     ]   };
modifier_map Mod1   { Alt_L, Alt_R, Meta_L, Meta_R };

key <META> {    [ NoSymbol, Meta_L, Meta_R  ]   };
modifier_map Mod1   { <META> };

key <SUPR> {    [ NoSymbol, Super_L ]   };
modifier_map Mod4   { <SUPR> };

key <HYPR> {    [ NoSymbol, Hyper_L ]   };
modifier_map Mod4   { <HYPR> };
// End of modifier mappings.

key <OUTP> { [ XF86Display ] };
key <KITG> { [ XF86KbdLightOnOff ] };
key <KIDN> { [ XF86KbdBrightnessDown ] };
key <KIUP> { [ XF86KbdBrightnessUp ] };
};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
key <PRSC> {
type= "PC_ALT_LEVEL2",
symbols[Group1]= [ Print, Sys_Req ]
};
key <SCLK> {    [  Scroll_Lock      ]   };
key <PAUS> {
type= "PC_CONTROL_LEVEL2",
symbols[Group1]= [ Pause, Break ]
};
key  <INS> {    [  Insert       ]   };
key <HOME> {    [  Home         ]   };
key <PGUP> {    [  Prior        ]   };
key <DELE> {    [  Delete       ]   };
key  <END> {    [  End          ]   };
key <PGDN> {    [  Next         ]   };

key   <UP> {    [  Up           ]   };
key <LEFT> {    [  Left         ]   };
key <DOWN> {    [  Down         ]   };
key <RGHT> {    [  Right        ]   };
};

救。

rm -rf /var/lib/xkb/*

(我不知道是否需要这样做,但是我做到了。)

重启。


很好,但是我无法使用相同的技巧来将我的ALT键切换为左Control键。似乎ALT键的工作方式有所不同。你知道我该怎么办吗?
皮埃尔·锡伯

相同的技巧适用于任何事物。您必须同时切换键映射和modifier_map映射。您也可以跳到gnome调整或gconf中,我忘记了,还有一些切换设置,例如“交换ctrl和alt”。
汤姆·默瑟

我们不能执行以下操作:键<LALT> {[Control_L]}; 键<RALT> {[Control_L]}; Alt的处理方式有所不同。所以我用了Gnome Tweaks。我无法完全得到自己想要的东西,但是还算不错。
皮埃尔·锡伯

我不确定我是否理解您的问题。如果只希望两个alt都充当控件,则完全如上的文件将使两个alt键都充当控件,并且两个控制键都充当alt。如果您可以指定每个键的名称,也许我可以帮忙吗?您是否尝试过此文件?您使用的是什么机器,以及哪个键盘?法语键盘布局可能会给我们带来麻烦。
汤姆·默瑟

不,我没有尝试过该文件。我可以看到,稍后在文件中您将两个alt切换为两个ctrl。我错过了。感谢您指出。我会试试。
皮埃尔·锡伯

0

您可能会发现Kinto很有用。这是我最近创建的一个项目,经过几年以几种不同方式解决此问题后,我现在觉得它可以共享。

Kinto安装程序仅使用python进行初始安装,之后仅是systemd服务,bash,xprop,setxkbmap和xkbcomp。就我而言,这是您将找到的最快,最原生的解决方案。

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

这也是一个要点,如果您只想查看所有内容的核心,那么在需要时它不会替代您的键盘映射。Gist也不包含自定义的xkb键映射文件,这些文件设置了使用Cmd和箭头键设置macOS样式的光标/逐字操作。

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.