Mac 解锁面板上的联系信息

Dou*_*ris 5 mac macos

有人有办法在 Mac 解锁面板上包含联系信息吗?就像是:

如果找到,请联系我的名字 (555) 555-555 或 myname@example.com

所以如果我把笔记本电脑放错了地方,打开时就会显示出来。

屏保后解锁

我也有一张贴在底部的名片,但这将是一个额外的措施。

用于确定如何编辑解锁 .nib 文件以添加联系信息的赏金

wfa*_*ulk 3

在 Mac OS X 10.6 Snow Leopard 中编辑解锁窗口的文本

解锁窗口的默认文本“要访问此计算机,您需要输入密码。”包含在 loginwindow.app 的 .nib 文件之一中,并且可以在一定限制下进行修改。

首先,cd到正确的目录:

cd /System/Library/CoreServices/loginwindow.app/\
Contents/Resources/English.lproj/BuiltInAuth.nib
Run Code Online (Sandbox Code Playgroud)

我们要编辑的 .nib 是 .nib keyedobjects.nib。有两种方法可以编辑该文件。

使用纯文本编辑器编辑 .nib 文件

首先我们必须将二进制编码的 .nib 文件转换为 XML:

sudo plutil -convert xml1 keyedobjects.nib
Run Code Online (Sandbox Code Playgroud)

现在使用任何纯文本编辑器编辑 keyedobjects.nib;我用的是vi。请记住在编辑时具有 root 权限,通过 sudo 或其他方式:

sudo vi keyedobjects.nib
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有一个很好的方法可以明确地直接进入正确的条目。我们对第 40 项感兴趣,但对象只是按顺序输入,没有索引。幸运的是,我们正在寻找的恰好是字符串“password”的第一次出现。所以只需搜索“密码”即可。您将在标签内找到当前文本<string>

实际上,如果您想成为一名 vi 极客,您可以输入以下 vi 命令序列:

1G41/^\t\t<[^/]
Run Code Online (Sandbox Code Playgroud)

(除了最后不要按回车键。)

其作用是转到文档顶部,然后搜索第 41 次出现的以两个制表符和一个左尖括号开头且后面没有斜线的行。这仅plutil在以特定方式格式化 xml 时才有效。我们正在搜索第 41 个而不是第 40 个,因为它是一个从零开始的数组。

使用 Xcode 编辑 .nib 文件

您还可以直接使用 Xcode 编辑 .nib 文件,但是,在我看来,在这种情况下,它并不是那么容易,并且更难以 root 权限运行,尽管如果您害怕 vi,这是可行的:

sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode \
/System/Library/CoreServices/loginwindow.app/Contents/Resources/\
English.lproj/BuiltInAuth.nib/keyedobjects.nib
Run Code Online (Sandbox Code Playgroud)

如上所述,我们对第 40 项感兴趣,Xcode 确实向您显示了项目索引,因此您只需直接向下滚动到第 40 项即可找到它。

不过,Xcode 确实要求 .nib 为 binary1 格式,以便将其解释为 .nib 并为您提供精美的界面,因此如果您想这样做,请省略所有“”指示plutil -convert

无需获得 root 权限即可编辑文件

好吧,你仍然需要拥有 root 权限,但是你可以更改文件的权限,而不需要向你的编辑器授予 root 权限,如果你觉得这样更容易处理的话。

从命令行更改(然后再改回)文件权限:

chmod o+w keyedobjects.nib
chmod o-w keyedobjects.nib
Run Code Online (Sandbox Code Playgroud)

或者使用 Finder 的“获取信息”窗格更改它们。不过,您必须在登录窗口和BuiltInAuth.nib 上右键单击并“显示内容”,才能通过Finder 访问该文件。

然后您可以使用编辑器、Xcode、vi 或其他任何工具,而无需具有 root 权限。

更改文本

更改文本本身是非常明显的。只要改变它。

解锁窗口显示的文本量似乎确实存在限制——它不会超出默认情况下看到的两行,尽管您可以填充第二行——所以要简洁。

另外,如果文本字符串太长,似乎会完全破坏解锁;它根本不会显示解锁窗口。例如,一个 447 个字符的字符串就对我造成了这种影响。但我不知道破损从哪里开始。

如果您想在特定位置开始新行,则没有转义码或任何其他内容;只需直接在其中添加换行符即可:

        <string>line1
line2</string>
Run Code Online (Sandbox Code Playgroud)

证据就在布丁中,或者类似的东西:

在此输入图像描述

更改字体(可选)

您甚至可以更改默认的 13pt LucidaGrande-Bold 字体和磅值。更改第 42 项(对于文本编辑器,搜索“LucidaGrande-Bold”)以命名您想要的任何字体。(Font Book 应用程序将向您显示可用的字体;格式似乎是 TypeFace-Weight 并去掉了空格。)点大小包含在字体声明之前的 NSSize 键中,位于项目 41 中。

这是 8pt Futura-CondensedMedium 中的示例:

在此输入图像描述

该图像往往意味着高度限制实际上不是两条线,而是特定的像素高度。(看起来大约 34 像素。)因此,从理论上讲,如果您能找到高度较小且行距较小的字体,则可能能够容纳更完整的行。(.nib 文件中甚至可能有一个用于更改显示区域高度的键。不过我还没看过。)

最后的想法

就是这样; 你完成了。这不是必需的,但如果您将其转换为 xml 并且确实需要,则可以将 .nib 转换回二进制形式:

sudo plutil -convert binary1 keyedobject.nib
Run Code Online (Sandbox Code Playgroud)

您必须注销并重新登录才能使其生效。

codesign确认

不过,此编辑确实会影响协同设计验证:

% codesign -vvvv /System/Library/CoreServices/loginwindow.app
/[...]/loginwindow.app: a sealed resource is missing or invalid
/[...]/loginwindow.app/[...]/keyedobjects.nib: resource modified
Run Code Online (Sandbox Code Playgroud)

我不知道这最终会产生什么影响,但我将复制 Arjan 的链接,以说明失败的应用程序验证可能产生的影响