Mac OS X: 偏好Preferences基础(2)

系统 2083 0

深入理解偏好文件:

位置:

系统和应用程序的偏好设置文件的存放,在Mac OS X系统中可以归为两个范畴,一个是系统范畴,一个是用户范畴.

系统范畴内储存的是系统的或者是系统全局的偏好设置,这一点要和用户范畴对比来说,用户范畴是针对不同用户的,用户自己设置的偏好。

具体来说,一般地,系统范畴的储存在/Library/Preferences/目录里,而用户范畴的储存在~/Library/Preferences/目录里(注 1 ).
1 : 在系统里面~符号代表用户的home目录,比如用户student的home目录在/Users/student, 这时 ~就等于/Users/student, 而~/Library/Preferences/就是/Users/student/Library/Preferences/.

两种类型的plist文件

  • 硬件特定位置(ByHost Preference)

Mac系统支持一种特定硬件的偏好设置,这些偏好文件储存在ByHost目录中,用户可以在自己的home目录的~/Library /Preferences/ByHost/里面,对于不同的系统(软件和硬件),Mac OS X系统或应用程序可能会将偏好设置文件储存在ByHost里面,这样这个文件中涉及的所有设置都只是相关于这个计算机本身。

ByHost偏好设置文件都有一个特殊的文件名以示和本系统硬件相关,在Mac OS X 10.5之前的版本,系统使用的偏好设置文件名是在普通文件名中加入网卡的MAC地址来区别的,比如:
com.apple.screensaver.001122334455.plist就是用户设定屏幕保护的偏好配置。
而在Mac OS X 10.5之后,为了可以更好地标示系统的唯一性,它使用系统的UUID来替换原来MAC地址的内容,比如,上面同样的屏幕保护的偏好配置,我的是: com.apple.screensaver.27074F01-7A93-5859-BAF3-0EB138E001D3.plist

为什么一定要使用ByHost配置呢? 有些程序的偏好设置的确可以归结为与硬件相关,有些是为了程序的特性。除了上面提到的屏幕保护程序外,还有比如ImageCapture使用那个程序的设 置就是ByHost的,无论打开Image Capture.app还是iPhoto.app程序,在它们的Preferences里面都有一个选项是下载照片使用哪个程序,见下图就是Image Capture.app的Preferences的截图:

里面设置使用iPhoto,如果没有设定值,就显示no application,Mac OS X系统就是靠这个偏好配置文件来启动对应程序的. 到ByHost中就可以看到叫做: com.apple.ImageCapture.27074F01-7A93-5859-BAF3-0EB138E001D3.plist, 它的内容在Property List Editor.app中显示为下图:


再例如,控制当前显示所支持的分辨率个数的信息,也是存储在ByHost里面,这一点比较容易理解。下图是显示10个分辨率的选项:


它的plist文件显示如下:


还有一种用处,如果一个程序的许可证是用户只能安装在一台机器上使用,这样ByHost的偏好配置就是一种可以方便使用的机制, 比如有版权保护的程序,例如iTunes,需要保存本机本用户的唯一标识,并与版权信息共同制作一个签名,这样防止盗版。

如何找到这个UUID呢?在Terminal中执行下面的命令:

ioreg -d2 -c IOPlatformExpertDevice


在一台iMac上可以看到下面的内容:

+-o iMac8,1 <class IOPlatformExpertDevice, registered, matched, active, busy 0, retain 23>
{
"IOBusyInterest" = "IOCommand is not serializable"
"IOInterruptControllers" = ("io-apic-0")
"IOPlatformSerialNumber" = "YMXXXXXXXXX"
"clock-frequency" = <005a6b3f>
"version" = <"1.0">
"product-name" = <"iMac8,1">
"IOInterruptSpecifiers" = (<0900000005000000>)
"board-id" = <"Mac-F226BEC8">
"model" = <"iMac8,1">
"serial-number" = <5xxxx200000000000000000000xxxxxxxxxxx4dxx5axxxx00000000000000000000000000000>
"manufacturer" = <"Apple Inc.">
"IOPlatformArgs" = <00c0xxx00050exxxxxxeef0000000000>
"name" = <"/">
"IOPlatformUUID" = "FXXXXXX5-XXXX-XXXX-XXXX-82XXXXXXXX34"
"compatible" = <"iMac8,1">
"IOPolledInterface" = "SMCPolledInterface is not serializable"
"system-type" = <01>
}


从上面的内容可以找到一行叫"IOPlatformUUID"的,这个就是了,为了可以一次找到,运行下面的命令

ioreg -rd1 -c IOPlatformExpertDevice | grep "IOPlatformUUID"


这个UUID只有在Mac OS X 10.5以上版本的系统中猜支持,另外一个问题是,并不是所有的硬件系统都支持,比如下面是一个较老的版本的iMac系统(2007),它的UUID前面部分是" 00000000-0000-1000-8000 " 后面根着的是网卡MAC地址,在这样的系统中,就不使用这个UUID作为标示了,而是沿用旧的方法,直接使用MAC地址.

"IOPlatformUUID" = "00000000-0000-1000-8000-00XXXXXXXX20"


在Mac OS X 10.5以前的系统中,同样支持这个命令ioreg,但是不支持-rd1或者-d2的选项。

  • 全局偏好位置(Global Preference)

全局偏好文件是一个特殊的plist文件,存在于系统和用户范畴内,但是在Finder出口中一般看不到,到Terminal中,可以找到 /Library/Preferences/.GlobalPreferences.plist或者~/Library/Preferences /.GlobalPreferences.plist两个文件. 它们定义系统或者用户全局的系统参数,比如时区等.

常用工具

常用图形工具:

Property List Editor:首选当然是苹果开发工具中的这个应用程序,免费而且是主要工具.
PlistEdit :可以打开处理文本和二进制文件,并以原来的格式保存,
PlistEdit Pro :收费软件,特点是XML明码和树状结构同时显示.
PrefEdit :方便查找plist文件,2.0版本开始收费, 1.2的还是免费

命令行工具:

plutil:主要用来检查plist文件的语法,并将plist文件在Text和Binary之间转换.
defaults: 用于操作plist文件, 但是操作多层属性时有局限;10.5之后都默认将文本格式转化为Binary格式, 这样可以提高系统读取速度.
PlistBuddy: 是一个比defaults更加灵活的工具,可以任意编辑多层的属性,但是不是OS X自带的.

Tony Liu

June 26, 2009 Calgary

Mac OS X: 偏好Preferences基础(2)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论