Оновлення відображення ключів модифікатора через командний інструмент за замовчуванням


16

Я намагаюся автоматизувати початкові настройки моєї книги, що включає встановлення програмного забезпечення та зміну конфігурації OS X для моїх потреб.

Я намагався оновити ключі модифікатора за замовчуванням, код наступний:

# 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'замість цього. Все ще не працює.
Даніель Бек

1
Цей хлопець намагається щось подібне, а також провалився. Чи могли б сценарії AppleScript GUI бути життєздатним варіантом для вас?
Даніель Бек

Відповіді:


13

Команді важливо defaultsвикористовувати правильний "ідентифікатор клавіатури" в ключі, здається, це:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Наприклад, внутрішня клавіатура для мого MacBook Air використовує:, com.apple.keyboard.modifiermapping.1452-579-0а зовнішня клавіатура мого iMac використовуєcom.apple.keyboard.modifiermapping.1118-219-0

Як отримати правильний "ідентифікатор клавіатури"? У командному рядку ви можете використовувати:

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 Підказки ):

  • Немає - –1
  • Caps Lock - 0
  • Зсув (зліва) - 1
  • Управління (зліва) - 2
  • Варіант (зліва) - 3
  • Команда (зліва) - 4
  • Клавіатура 0 - 5
  • Довідка - 6
  • Зсув (праворуч) - 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» і «0» в цінностях Dict в потім інтерпретуються як рядки, а НЕ цілих чисел. Це призводить до дивного стану, коли Настройки показують змінені клавіші модифікатора, але клавіатура насправді не веде себе таким чином.
Orangenhain

1
ioreg -n IOHIDKeyboard -rтакож включатиме клавіатури Bluetooth.
Лрі

Я це зробив, але, здається, це не дало жодного ефекту. Чи потрібно мені перезапустити щось, щоб воно працювало?
SimonW

1
@SimonW Я пережив те саме. Я виявив, що просто вихід із системи та повторне ввімкнення налаштування набуває чинності.
Райан Лонг

Це не весело :(
SimonW

2

Проблема, яка у мене виникає, полягає в тому, що кожного разу, коли я підключаю клавіатуру, вона отримує інший ідентифікатор в ioreg. Все, що мені потрібно зробити - це поміняти команду та яблучні клавіші.

Я вирішив вирішити цю проблему в моєму випадку "неправильним способом" за допомогою 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

Я теж не зміг отримати defaults write(або оновити .plist файли), щоб вплинути на налаштування HIDKeyboardModifierMappingSrc та HIDKeyboardModifierMappingDst під Snow Leopard .

Я намагаюсь «заздалегідь заповнити» мій обліковий запис гостя, щоб підтримувати мою клавіатуру PS2 на USB (на якій, мабуть, мінялися Option і Command.) Пропозиції інших сторінок щодо «виходу з системи та входу назад» не допомагають; "вихід" з облікового запису гостей видаляє всі мої зміни.

вже успішно оновив свій «com.apple.dock» і файли Plist «com.apple.menuextra.clock» , щоб налаштувати док - станцію і 24-годинний, відповідно, що робить його ще більш засмучує , що клавіатура Модифікатори виграв » т працювати ...)

Я спробував за допомогою "dtruss -asf" порівняти, що робить "System Preferences.app" (який, мабуть, працює) з тим, що роблять "за замовчуванням". Найближчі я можу зрозуміти, я бачу повідомлення:

   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
  • Чи запустили ви diffперевірити, чи створюєте ви цей файл точно так, як користувальницький інтерфейс?
  • Запустіть fs_usageабо lsofдізнайтеся, що ще робиться під час використання інтерфейсу користувача.

fs_usageне показує нічого цікавого AFAICT, і я переконався (за допомогою своєї модифікованої команди в коментарі до питання), що результат виявляється таким, як можна було б очікувати.
Даніель Бек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.