Обновление сопоставлений ключевых слов-модификаторов с помощью инструмента командной строки по умолчанию

Я пытаюсь автоматизировать встроенную настройку моего macbook, который включает в себя установку программного обеспечения и изменение конфигурации 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?

Спасибо.

14 голосов | спросил The Robot 6 Maypm11 2011, 21:31:09

4 ответа


11

Для команды 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 [email protected]  <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

Обновление: благодаря Лаури Ранта вот команда, которая работает для 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
ответил Orangenhain 7 PMpSun, 07 Apr 2013 22:33:33 +040033Sunday 2013, 22:33:33
1

Мне тоже не удалось получить defaults write (или обновить файлы .plist), чтобы повлиять на мой HIDKeyboardModifierMappingSrc и HIDKeyboardModifierMappingDst в Snow Leopard .

Я пытаюсь «предварительно заполнить» мою гостевую учетную запись, чтобы поддерживать мою клавиатуру PS2-to-USB (которая, по-видимому, заменила опцию и команду.) Предложения других страниц, чтобы «выйти из системы и войти в систему», t помощь; «Выход из учетной записи гостя» удаляет все мои изменения.

(I have успешно обновил файлы plist "com.apple.dock" и "com.apple.menuextra.clock", чтобы настроить док-станцию ​​и 24-часовые часы соответственно, что делает это еще более расстраивает то, что модификаторы клавиатуры не будут работать ...)

Я попытался использовать «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, я был бы рад услышать его ...

ответил Dabe 1 J0000006Europe/Moscow 2011, 09:07:06
1

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я подключаю свою клавиатуру, в ioreg появляется другой идентификатор. Все, что мне нужно сделать, это обмен командой и клавишами apple.

Я решил решить это в моем случае «неправильным способом» с использованием 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
ответил Eliot 28 FebruaryEurope/MoscowbFri, 28 Feb 2014 03:35:56 +0400000000amFri, 28 Feb 2014 03:35:56 +040014 2014, 03:35:56
0
  • Запустили ли вы diff, чтобы убедиться, что вы создаете этот файл точно так же, как пользовательский интерфейс?
  • Запустите fs_usage или lsof, чтобы узнайте, что еще делается при использовании пользовательского интерфейса.
ответил 7 Mayam11 2011, 09:06:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132