Кто-нибудь знает, где OSX хранит настройки в Системных настройках › Клавиатура › Клавиши-модификаторы?

Где они хранятся?!?

Я, видимо, не единственный, кто хочет знать (Как изменить клавиши-модификаторы в Системных настройках › Клавиатура › Клавиши-модификаторы...). Я пробовал просматривать приложение «Системные настройки» с помощью dtruss, но это кажется невозможным в версии 10.10.3 (на которой я сейчас работаю), и я даже не уверен, что это вообще возможно. полезно, если Системные настройки просто получают настройки из cfprefsd. Просмотр cfprefsd с помощью dtruss, похоже, не улавливает доступ к соответствующему файлу.

Кто-нибудь знает API для получения этой информации? Может быть, что-то в гештальте?


person Ted Middleton    schedule 02.06.2016    source источник


Ответы (3)


Хорошо - отвечая на мой собственный вопрос. Я собрал небольшую программу, которая использует kqueues для отслеживания изменений файловой системы. Я просмотрел свою файловую систему на наличие модификаций, когда изменил настройки в Системных настройках, и увидел:

'/Users/ted/Library/Preferences/ByHost/.GlobalPreferences.3F1C...9C34.plist.V1Ut9hp' kevent: ident=44, filter=KQ_FILTER_VNODE, flags=KQ_EV_ADD|KQ_EV_CLEAR, fflags=KQ_NOTE_WRITE|KQ_NOTE_CHILD|KQ_NOTE_PDATAMASK

Итак, настройка находится в ~/Library/Preferences/ByHost/.GlobalPreferences.<UUID>.plist. Я не уверен, что такое UUID - что-то делать с OpenDirectory? (ОБНОВЛЕНИЕ: по-видимому, этот UUID является идентификатором вашей машины).

В любом случае, в .GlobalPreferences.<UUID>.plist мы видим такие записи, как:

<key>com.apple.keyboard.modifiermapping.1452-610-0</key>
<array>
    <dict>
        <key>HIDKeyboardModifierMappingDst</key>
        <integer>2</integer>
        <key>HIDKeyboardModifierMappingSrc</key>
        <integer>0</integer>
    </dict>
</array>

1452:610 — это десятичный VID:PID для комбинации USB-клавиатура/трекпад в моем Macbook Pro 2012 года, и любая другая клавиатура, которая была подключена к моему компьютеру и для которой были переназначены настройки модификатора, будет иметь аналогичную запись. 0 кажется клавишей Caps Lock, 2 и 10 кажутся левым и правым CTRL, 3 и 11 кажутся левым и правым Option, а 4 и 12 кажутся левым и правым Command.

Итак, из приведенного выше вы можете видеть, что моя клавиша Caps Lock сопоставлена ​​с левым CTRL.

Похоже, что настройки в .GlobalPreferences.<UUID>.plist являются частью ваших стандартных пользовательских настроек по умолчанию. Таким образом, вы можете легко получить эти настройки, просто выполнив

[[NSUserDefaults standardUserDefaults] objectForKey:@"com.apple.keyboard.modifiermapping-1452-610-0"];
person Ted Middleton    schedule 06.06.2016

Для всех, кто наткнулся на это, я искал способ поместить это в свои файлы .dot при настройке новых машин. Все, что я хотел, это переназначить Caps-Lock для побега.

В Sierra 10.12 кажется, что решение в этом сообщении стало недействительным. Документированный способ от Apple работает для меня с использованием 10.14.6 Mojave (* с оговоркой)

TL;DR;

Начиная с Sierra 10.12, см.: TN2450.

# Remap caps-lock to escape
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x700000029}]}'

До Сьерры 10.12

plutil

Интересно, что решение по-прежнему верно в отношении обновления этого файла и сохранения информации о сопоставлении клавиш, когда пользователь проходит через графический интерфейс для изменения клавиш-модификаторов. Однако обновление информации о сопоставлении клавиш здесь, похоже, больше ни на что не влияет.

В этом примере используется команда plutil, которая является предпочтительным способом обновления списков, поскольку defaults write устарела в соответствии с справочной страницей См. путь к файлу.

Также см. сравнения между двумя командами и библиотекой PlistBuddy.

#!/usr/bin/env bash

# Quit System Preferences so it doesn't muck with your settings
osascript -e 'tell application "System Preferences" to quit'

# Get your machine's UUID

__UUID__=$(
  ioreg -ad2 -c IOPlatformExpertDevice | xmllint --xpath \
  '//key[.="IOPlatformUUID"]/following-sibling::*[1]/text()' -
)

# Replace all contents of the array for the caps lock key/value pair.
plutil -replace "com\.apple\.keyboard\.modifiermapping\.1452-636-0" \
-json '[{
 "HIDKeyboardModifierMappingDst": 30064771113,
 "HIDKeyboardModifierMappingSrc": 30064771129
}]' \
~/Library/Preferences/ByHost/.GlobalPreferences.${__UUID__}.plist

# Pretty print file
plutil -p ~/Library/Preferences/ByHost/.GlobalPreferences.${__UUID__}.plist 

Начиная с Сьерры 10.12

hidutil

Новое решение гораздо менее подробное И не полагается на аргументы пути к файлу или предоставление типов аргументов для не очень хорошо документированной команды plutil.

Вы можете увидеть это сообщение Stack Exchange для другого объяснения.

В этом техническом документе TN2450 описаны стратегии решения этой проблемы с помощью hidutil или Xкод.

#!/usr/bin/env bash

# Quit System Preferences so it doesn't muck with your settings
osascript -e 'tell application "System Preferences" to quit'

# Remap caps-lock to escape
hidutil property --set '{
  "UserKeyMapping":[{
    "HIDKeyboardModifierMappingSrc":0x700000039,
    "HIDKeyboardModifierMappingDst":0x700000029
  }]
}'
  • Предостережение: похоже, это не меняет отображение графического интерфейса при использовании клавиш-модификаторов в Системных настройках > Клавиатура. Тем не менее, он по-прежнему работает как шарм для функциональности.
person macc    schedule 18.11.2019

Все пользовательские настройки хранятся в ~/Library/Preferences/com.apple.???

person Karim H    schedule 02.06.2016
comment
В самом деле, и я искал ~/Library/Preferences почти все, что мог придумать - модиф, ключ, заглавные буквы - и я не могу найти файл настроек, в котором содержится эта информация. - person Ted Middleton; 02.06.2016
comment
ключи предпочтений обычно имеют странные имена - person Karim H; 02.06.2016
comment
Да, они; но это по-прежнему оставляет первоначальный вопрос без ответа, без четкого пути к поиску ответа, не так ли? - person Ted Middleton; 03.06.2016