从命令行更改修饰键


13

作为一个沉重的Emacs用户,我喜欢重新映射我的Caps Lock键以用作Ctrl键。键盘首选项窗格中有一个方便的对话框来执行此操作。但问题是,在有人登录到没有设置此偏好设置的其他帐户后,此设置会丢失。

那么有没有办法从命令行执行与首选项窗格对话框相同的操作?


2
可能重复 通过默认命令工具更新修改键映射 。虽然另一个问题在历史上是较新的,但它有一个更好的(实际工作)答案。
techraf

Answers:


6

改变喜好和跑步, defaults -currentHost read -g 显示正在编写的更改。我打算写一个简短的bash脚本来自动化它,但看起来我被击败了:

#!/bin/bash                                                                      

mappingplist=com.apple.keyboard.modifiermapping

if [ $1 == "emacs" ]; then
    echo "Switching to emacs modifiers"
    defaults -currentHost write -g $mappingplist '(                              
                {                                                                
            HIDKeyboardModifierMappingDst = 4;                                   
            HIDKeyboardModifierMappingSrc = 2; },                                
                {                                                                
            HIDKeyboardModifierMappingDst = 12;                                  
            HIDKeyboardModifierMappingSrc = 10;                                  
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 2;                                   
            HIDKeyboardModifierMappingSrc = 4;                                   
        },                                                                       
                {                                                                
            HIDKeyboardModifierMappingDst = 10;                                  
            HIDKeyboardModifierMappingSrc = 12;                                  
        })'


else
    echo "Switching to default modifiers"
    defaults -currentHost delete -g $mappingplist
fi

该脚本采用一个参数,如果是   参数是emacs,然后它交换   命令和控制,如果参数   是它还原的任何东西   默认值。

http://forums.macrumors.com/showthread.php?t=949280


在这里,Snow Leopard看起来似乎不起作用,但它显然是朝着正确方向迈出的一步。
pantulis

@pith ......什么的 -g 国旗吗?我没有在手册页中看到 defaults。此外,这看起来像是交换两组值:4表示2,10表示12,但只有两个修饰符可以更改。你能详细说明一下,或者只看输出但不知道它们实际代表什么? (起初我怀疑有四个密钥代码 - 左边两个,右边两个 - 但它们似乎不是密钥代码,至少不是键盘驱动程序报告的。)
MarqueIV

我按照你的建议进行映射,但它似乎没有生效,尽管它在UI中显示为映射。只有通过UI做它似乎工作......任何想法?
SimonW


1

“通过默认命令工具更新修改键映射”

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1133-50475-0 -array '<dict><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer><key>HIDKeyboardModifierMappingDst</key><integer>2</integer></dict>

更改 113350475 到显示的供应商和产品ID ioreg -n IOHIDKeyboard -rsrc 0dst -1 会禁用 大写锁定

defaults -currentHost write -g 修改:

~/Library/Preferences/ByHost/.GlobalPreferences.*.plist

您必须注销并重新申请更改。如果值是字符串(如@pithyless的答案),则更改将显示在“系统偏好设置”中,但它们没有任何效果。

键的值

-1 none
0 caps lock
1 left shift
2 left control
3 left option
4 left command
5 keypad 0
6 help
9 right shift
10 right control
11 right option
12 right command

0

结合几个答案我想出了这个似乎有效的脚本( 将Caps-lock映射到Control )。

$ keyboard_id = "$(ioreg -n IOHIDKeyboard -r | grep -e VendorID\" -e ProductID | tr -d \"\|[:blank:] | cut -d\= -f2 | tr '\n' -)"
$ defaults -currentHost write -g "com.apple.keyboard.modifiermapping.${keyboard_id}0" '(
{
  HIDKeyboardModifierMappingDst = 2;
  HIDKeyboardModifierMappingSrc = 0;
})'

唯一的问题是它似乎没有任何影响...... :(

我会更新,如果我得到它的工作。


0

我想换掉 正确的命令 正确的选择 只有钥匙。

当我设置全局 命令 选项 交换系统偏好设置...&gt;键盘&gt;修改键......,系统中有以下配置(按预期工作):

$ defaults -currentHost read -g com.apple.keyboard.modifiermapping.1452-591-0
(
        {
        HIDKeyboardModifierMappingDst = 30064771299;
        HIDKeyboardModifierMappingSrc = 30064771298;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771298;
        HIDKeyboardModifierMappingSrc = 30064771299;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)

但是当我修改它时,只能交换 如下所示 - 它不起作用:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 '(
        {
        HIDKeyboardModifierMappingDst = 30064771303;
        HIDKeyboardModifierMappingSrc = 30064771302;
    },
        {
        HIDKeyboardModifierMappingDst = 30064771302;
        HIDKeyboardModifierMappingSrc = 30064771303;
    }
)'

这是因为值被写为字符串而不是整数。您可以看到使用:

$ plutil -convert xml1 -o - ~/Library/Preferences/ByHost/.GlobalPreferences.*.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>com.apple.keyboard.modifiermapping.1452-591-0</key>
    <array>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771303</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771302</string>
        </dict>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771302</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771303</string>
        </dict>
    </array>
</dict>
</plist>

因此,更新设置的正确方法是使用XML格式:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 -array \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771303</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771302</integer>
</dict>' \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771302</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771303</integer>
</dict>'

最后,您必须注销并再次登录。


你有这个工作我不知道吗?是否需要重启?
William

没错。你必须注销&amp;再次登录。
Virus_7

我想回答这个问题 apple.stackexchange.com/questions/280855/... 你也可以聊聊吗? chat.stackexchange.com/rooms/38/ask-different-chat 我尝试运行你的最后一个命令,它不会改变我的任何东西。
William

首先删除Karabiner-Elements并将键盘代码(1452-591-0)和密钥代码(30064771302,30064771303)调整到您的系统。
Virus_7
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.