명령 행에서 수정 자 키 변경


13

무거운 Emacs 사용자로서 Caps Lock 키를 Ctrl 키로 작동하도록 다시 매핑하고 싶습니다. 키보드 환경 설정 패널에는 편리한 대화 상자가 있습니다. 그러나 문제는 다른 사람이이 기본 설정을 설정하지 않은 다른 계정에 로그인 한 후에이 설정이 손실된다는 것입니다.

명령 줄의 환경 설정 창 대화 상자와 동일한 방법이 있습니까?


2
의 가능한 중복 기본값을 변경 키 매핑을 업데이트는 도구를 명령 . 다른 질문은 역사적으로 새롭지 만 더 나은 (실제로 작동하는) 대답이 있습니다.
techraf

답변:


7

환경 설정을 변경하고 실행 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로 바꾸지 만 변경자는 두 개만 있습니다. 정교하게 설명 할 수 있습니까, 아니면 단순히 결과를 보았지만 실제로 무엇을 나타내는 지 모릅니 까? (처음에는 왼쪽에 두 개, 오른쪽에 두 개) 네 개의 키 코드가 의심되었지만 적어도 키보드 드라이버에서보고하지 않은 키 코드는 아닌 것 같습니다.
Mark A. Donohoe

제안한대로 매핑을 수행하지만 UI에서는 매핑 된 것처럼 보이지만 적용되지는 않습니다. UI를 통해서만 작동하는 것 같습니다 ... 어떤 아이디어?
SimonW


2

에서 "기본값을 변경 키 매핑을 업데이트 도구를 명령" :

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 -r. src 0dst -1비활성화 것이다 caps lock.

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

Right CommandRight Option 키로 만 바꾸고 싶었습니다 .

시스템 환경 설정 ...> 키보드> 수정 자 키 ...에서 전역 명령옵션 스왑을 설정하면 시스템에 다음과 같은 구성이 있습니다 (예상대로 작동 함).

$ 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

아 예. 로그 오프했다가 다시 로그온해야합니다.
Virus_7

이 질문에 답변하려고합니다 apple.stackexchange.com/questions/280855/… 대화 할 수 있습니까? chat.stackexchange.com/rooms/38/ask-different-chat 마지막 명령을 실행하려고 시도했지만 아무런 변화가 없습니다.
William

우선 Karabiner-Element를 제거하고 키보드 코드 (1452-591-0)와 키 코드 (30064771302, 30064771303)를 시스템에 맞게 조정하십시오.
Virus_7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.