首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人知道OSX将设置存储在系统首选项>键盘>修饰符键中吗?

有人知道OSX将设置存储在系统首选项>键盘>修饰符键中吗?
EN

Stack Overflow用户
提问于 2016-06-02 01:02:38
回答 2查看 2K关注 0票数 5

显然,我不是唯一一个想知道的人(How can I change modifier keys in "System Preferences > Keyboard > Modifier Keys...")。我尝试过用d桁架观看系统首选项应用程序,但在10.10.3 (这就是我现在正在做的)上,这似乎是不可能的,而且如果系统首选项只是从cfprefsd获得设置,我甚至不确定这是否有用。使用d桁架观看cfprefsd似乎没有捕捉到相关的文件访问。

有人知道一个API来获取这些信息吗?可能是格式塔的东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-06 01:42:19

好吧-回答我自己的问题。我编写了一个小程序,它使用kqueues来监视文件系统的更改。当我更改系统首选项中的设置时,我观察了我的文件系统的修改,我看到:

代码语言:javascript
复制
'/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中,我们看到的条目如下:

代码语言:javascript
复制
<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是我2012年Macbook Pro中USB键盘/触控板组合的小数点VID:PID,任何已插入我的计算机并已进行修改设置的键盘都会有类似的条目。0似乎是Caps键,210似乎是左和右CTRL,311似乎是左右选项,412似乎是左右命令。

因此,从上面可以看到,我的Caps键被映射到左CTRL。

看起来,.GlobalPreferences.<UUID>.plist中的设置是标准用户默认设置的一部分。因此,您可以很容易地获得这些设置,只需

代码语言:javascript
复制
[[NSUserDefaults standardUserDefaults] objectForKey:@"com.apple.keyboard.modifiermapping-1452-610-0"];
票数 9
EN

Stack Overflow用户

发布于 2019-11-18 03:21:23

对于其他人来说,当设置新机器时,我正在寻找一种方法将其放入我的.dotfiles中。我只想重新映射盖帽锁才能逃走。

在塞拉10.12,这一职位的解决办法似乎变得无效。我使用10.14.6 Mojave (*附带一个警告)来记录来自苹果的方式。

TL;DR;

自塞拉利昂10.12以来,见:TN2450

代码语言:javascript
复制
# Remap caps-lock to escape
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x700000029}]}'

在塞拉利昂10.12之前

plutil

有趣的是,当用户通过GUI更改修饰符键时,解决方案仍然是正确的,用于更新和保存有关键映射的信息。然而,在这里更新键映射信息似乎不再影响任何事情了。

此示例使用plutil命令,这是更新plist的首选方法,如defaults write 根据手册页被取消推荐。,请参阅filepath。

另外,请参阅两个命令之间的比较和库PlistBuddy。

代码语言:javascript
复制
#!/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

新的解决方案不那么冗长,也不依赖filepath,也不为没有很好文档的plutil命令提供参数类型。

您可以看到这个堆栈交换邮政的另一个解释。

这个技术文档TN2450描述了用hidutil或Xcode处理这个问题的策略。

代码语言:javascript
复制
#!/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
  }]
}'
  • 请注意,当您访问>键盘中的修饰符键时,这似乎不会改变GUI的显示。尽管如此,它的工作仍然像一个魅力的功能。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37581090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档