기본값 명령 도구를 통해 수정 자 키 매핑 업데이트


16

소프트웨어 설치 및 필요에 따라 OS X 구성 변경을 포함하여 Macbook의 초기 설정을 자동화하려고합니다.

수정 자 키를 기본값으로 업데이트하려고 시도했지만 코드는 다음과 같습니다.

# The apple keyboard id (1452-567-0) should probably be modified in case you use other different model 
COMPUTER_UUID=`ioreg -rd1 -c IOPlatformExpertDevice | grep -E '(UUID)' | awk '{print $3}' | tr -d \"`
defaults write ~/Library/Preferences/ByHost/.GlobalPreferences.$COMPUTER_UUID com.apple.keyboard.modifiermapping.1452-567-0 '( { HIDKeyboardModifierMappingDst = 2;   HIDKeyboardModifierMappingSrc = 0; } )'

문제는 패턴이 변경 되더라도 시스템 환경 설정이 업데이트를 포착하지 못하고 컴퓨터를 다시 시작하지 않는 것 같습니다.

Snow Leopard에서이 작업을 수행 할 수있는 방법이 있습니까?

감사.


사용하는 defaults -currentHost write -g key 'value'대신. 그래도 여전히 작동하지 않습니다.
Daniel Beck

1
이 사람 은 비슷한 것을 시도하고 실패했습니다. AppleScript GUI 스크립팅이 적합한 옵션입니까?
Daniel Beck

답변:


13

defaults명령이 키에 올바른 "키보드 ID"를 사용하는 것이 중요 합니다.com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

예를 들어, MacBook Air의 내장 키보드는 다음을 사용 com.apple.keyboard.modifiermapping.1452-579-0하지만 iMac의 외장 키보드는com.apple.keyboard.modifiermapping.1118-219-0

올바른 "키보드 ID"를 얻는 방법? 명령 행에서 다음을 사용할 수 있습니다.

ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct

관련 매개 변수가있는 USB 장치 목록을 얻으려면 :

  [...]
  +-o Natural® Ergonomic Keyboard 4000@fa140000  <class IOUSBDevice, id 0x100000452, registered, matched, active, busy 0 (115 ms), retain 12>
        "idProduct" = 219
        "idVendor" = 1118

내 생각에 같은 유형의 키보드가 두 개 이상인 경우 세 번째 매개 변수 ( "-0"부분)는 "카운터"입니다.

따라서 외부 키보드에서 CapsLock 키를 끄려면 다음을 사용할 수 있습니다.

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1118-219-0 -array-add '<dict><key>HIDKeyboardModifierMappingDst</key><integer>-1</integer><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer></dict>'

그리고 완전성을 기하기 위해 사용할 수있는 키 코드 목록은 다음과 같습니다 ( Mac OS X Hints ).

  • 없음 — –1
  • Caps Lock — 0
  • 시프트 (왼쪽) — 1
  • 컨트롤 (왼쪽) — 2
  • 옵션 (왼쪽) — 3
  • 커맨드 (왼쪽) — 4
  • 키패드 0 — 5
  • 도움말 — 6
  • Shift (오른쪽) — 9
  • 컨트롤 (오른쪽) — 10
  • 옵션 (오른쪽) — 11
  • 사령부 (오른쪽) — 12

업데이트 : Lauri Ranta 덕분에 Bluetooth 및 USB 키보드에서 작동하는 명령이 있습니다.

ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product

약간 다른 출력을 제공합니다.

+-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
  |   "Product" = "Apple Wireless Keyboard"
  |   "VendorID" = 1452
  |   "ProductID" = 570

마십시오 하지 디폴트 값의 짧은 버전을 사용 '{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'당신이 나를 위해 적어도 "-1"과 DICT의 값 "0"다음 문자열이 아닌 정수로 해석됩니다, 일부 웹 사이트에서 찾을 수 있습니다. 기본 설정에 변경된 수정 자 키가 표시되지만 키보드가 실제로 그렇게 동작하지 않는 이상한 상태가됩니다.
Orangenhain

1
ioreg -n IOHIDKeyboard -r블루투스 키보드도 포함됩니다.
Lri

나는 이것을했지만 아무런 효과가없는 것 같습니다. 작동하려면 다시 시작해야합니까?
SimonW

1
@SimonW 나는 같은 경험을했습니다. 로그 아웃했다가 다시 로그인하면 설정이 적용됩니다.
라이언 롱

재미 없다 :(
SimonW

2

내가 겪고있는 문제는 키보드를 연결할 때마다 ioreg에서 다른 ID를 얻는다는 것입니다. 내가해야 할 일은 명령과 사과 키를 바꾸는 것입니다.

필자는이 경우 AppleScript 및 시스템 환경 설정 GUI를 사용하여 "잘못된 방법"으로 해결하기로 결정했습니다. 추악한 해킹이지만 작동합니다! 귀하의 마일리지가 다를 수 있습니다.

--The beginning of the name of the target keyboard (to type into the drop-down selection list)
set keyboardName to "natural"

--reboot system preferences to make GUI state more predictable
tell application "System Preferences"
    quit
    delay 1
    activate
    delay 1
    activate
end tell

tell application "System Events"

    --Bring up keyboard prefs
    key code 53 --escape
    keystroke "f" using command down
    delay 0.5
    key code 53 --escape
    keystroke "keyboard"
    delay 0.5
    key code 36 --return
    delay 1

    --Open modifier keys submenu
    repeat 4 times
        keystroke tab using shift down
        --delay 0.1
    end repeat
    --delay 0.1
    keystroke space
    delay 0.1

    --Select keyboard
    keystroke space
    keystroke keyboardName
    keystroke return
    delay 0.1

    --Select "option key" drop-down
    repeat 3 times
        keystroke tab
    end repeat

    delay 0.5

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 3 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return

    -- Select "command key" drop-down
    keystroke tab
    delay 0.1

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 2 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return
    delay 0.1

    --Commit changes! phew.
    keystroke return
end tell

1

나도 Snow Leopard의defaults writeHIDKeyboardModifierMappingSrcHIDKeyboardModifierMappingDst 설정에 영향을 미치거나 .plist 파일을 업데이트 하지 못했습니다 .

PS2-to-USB 키보드 (옵션과 명령이 바뀌 었음)를 지원하기 위해 Guest 계정을 "사전 채우려 고"합니다. "로그 아웃하고 다시 로그인"하라는 다른 페이지의 제안은 도움이되지 않습니다. Guest 계정에서 "로그 아웃"하면 모든 변경 사항이 삭제됩니다.

(나는 성공적으로 키보드 수정 자 '가 이겼다 그것을 더욱 좌절하게하는 각각 도크와 24 시간을 사용자 정의 내 "com.apple.dock"와 "com.apple.menuextra.clock"PLIST 파일 업데이트 t 일 ...)

"dtruss -asf"를 사용하여 "System Preferences.app"이 수행하는 작업 (겉으로는 작동 함)과 "defaults"가 수행하는 작업을 비교하려고했습니다. 내가 알 수있는 가장 가까운 곳에서 다음과 같은 메시지가 나타납니다.

   Foundation`+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]+0x151
   Foundation`NSKeyValueNotifyObserver+0x81
   Foundation`NSKeyValueDidChange+0x1ca
   Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:usingBlock:]+0x176

Snow Leopard에서 작동하는 솔루션을 찾은 사람이 있다면 기꺼이들을 것입니다 ...


0
  • diffUI처럼 정확하게이 파일을 작성하고 있는지 확인하기 위해 실행 했습니까 ?
  • UI를 사용할 때 수행중인 작업을 확인 fs_usage하거나 실행하십시오 lsof.

fs_usage흥미로운 AFAICT를 보여주지 않으며 결과가 예상대로 표시되는지 확인했습니다 (질문에 대한 의견에 수정 된 명령으로).
Daniel Beck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.