Answers:
苹果公司的技术说明TN2450描述了如何重新映射键。运行以下命令会将Right Alt重新映射为Right Control。
hidutil property --set '{"UserKeyMapping":
[{"HIDKeyboardModifierMappingSrc":0x7000000e6,
"HIDKeyboardModifierMappingDst":0x7000000e4}]
}'
请注意,以上命令并未切换“右Alt”和“右控件”。他们都将是正确的控制。如果您有MacBook,则在插入外部键盘之前,您不会注意到这一点。如果要切换 Right Alt和Right Control,则需要添加第二个switch命令,如下所示。
hidutil property --set '{"UserKeyMapping":
[{"HIDKeyboardModifierMappingSrc":0x7000000e4,
"HIDKeyboardModifierMappingDst":0x7000000e6},
{"HIDKeyboardModifierMappingSrc":0x7000000e6,
"HIDKeyboardModifierMappingDst":0x7000000e4}]
}'
技术说明底部的表格列出了每个键的十六进制值。要概括以上答案以切换任何键,您必须or
将该列表中的hex值与一起使用0x700000000
。以下Python代码演示了执行此操作的一种方法。
In [1]: def convert(val):
...: int_val = int(val, 16)
...: int_ref = 0x700000000
...:
...: return hex(int_ref | int_val)
...:
In [2]: r_alt = '0xE6'
In [3]: print(convert(r_alt))
0x7000000e6
Src
和中都使用该键的值再次运行命令Dst
。
\
键盘上的反斜杠就是Shift+Option+7
我想用更简单的东西(例如Option+.
我几乎不使用)代替的。我怎么做?谢谢你的帮助。
一种更通用和用户友好的方法是使用Karabiner-Elements,它是可在Sierra上运行的Karabiner的版本。
这是史蒂文·C·豪威尔答案的附录。
我有一台带斯堪的纳维亚键盘的新MacBook Pro。此新模型不再具有Esc键,这对我来说是一个很大的障碍。
我发现以下代码将转换§键(左上,左键,Tab键上方)-我认为我以前从未用过-来产生Esc。
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'
在苹果的文档中(链接到史蒂文的答案),该标签被标记为“ Keyboard Non-US \ and |”。(0x64)。
很难找到几个“非美国”键,因为它们通常是指您所使用的键盘上带有不同标签的键。(我还发现“重音符和代字号”是指左移键和z之间的键,在键盘上会产生<
该键。我无法确定哪个键对应于“非美国#
和~
”,并且一旦找到就不再做进一步的实验我的密钥。)如果要尝试,请尝试在终端中运行脚本,直到找到所需的密钥:
for ((i=1;i<=128;++i)); do
printf '0x7000000%0x\n' "$i"
printf '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000%0x,"HIDKeyboardModifierMappingDst":0x70000000a}]}' "$i" |
xargs -0 hidutil property --set >/dev/null
read -p "Type some stuff: "
hidutil property --set '{"UserKeyMapping":[{}]}' >/dev/null
done
这会遍历密钥代码并一次更改一个,希望您可以通过反复试验找到对您没有特别用处的密钥。尝试键入要求您输入的内容-如果得到的g
不是您期望的,则您找到了正确的密钥代码。(0x70000000a
如果g
对您来说不方便,请更改为其他选项。也许您想重新映射g
键?)键入完毕后,只需按Enter即可进入下一个键。
值得一提的是,循环内的最后一个命令是更改所有UserKeyMapping
设置的方式:
hidutil property --set '{"UserKeyMapping":[{}]}'
最初运行hidutil property --get UserKeyMapping
时会产生
(null)
但似乎您无法反馈此值以更改设置(或者,它接受但忽略此输入)。
(如果您不熟悉终端机,只需在提示或类似提示for
之前复制/粘贴内容即可。)done
bash$
根据这个与堆栈溢出有关的问题,您可以将命令放在主目录中的脚本文件中,并将其添加到您的launchd
配置中,以使更改永久生效。
万一有些读者不满意自己这样做,这里有个快速脚本可以帮助您。同样,只需在终端提示下复制/粘贴此内容即可。
mkdir -p "$HOME"/bin
printf '%s\n' '#!/bin/sh' \
'hidutil property --set '"'"'{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'"'" \
>"$HOME"/bin/userkeymapping
chmod 755 "$HOME"/bin/userkeymapping
cat<<: >"$HOME"/Library/LaunchAgents/userkeymapping.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>userkeymapping</string>
<key>ProgramArguments</key>
<array>
<string>$HOME/bin/userkeymapping</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
:
launchctl load "$HOME"/Library/LaunchAgents/userkeymapping.plist
显然,如果您最终获得了一些其他密钥,而0x700000064
您又不需要在脚本或文件中进行更改,"$HOME"/bin/userkeymapping
那么如果您已经运行了上述密钥,那么最终将创建该密钥。
转到苹果菜单,然后选择“系统偏好设置”,然后转到“键盘”偏好设置面板,然后选择“键盘”选项卡
点击右下角的“修改键”按钮