是否可以使用自定义登录窗口应用程序替换Mac OS X登录窗口/System/Library/CoreServices/loginwindow.app?(参见我的理性这样做.)
我担心我的Cocoa编程技巧还不成熟.我觉得有趣的是,当我运行探测CGSession(这是一个执行快速用户切换的未记录的实用程序)来查看它使用的功能时,通过执行
nm -mg /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession
Run Code Online (Sandbox Code Playgroud)
其中一个链接功能是:
(undefined [lazy bound]) external _CGSCreateLoginSession (from ApplicationServices)
Run Code Online (Sandbox Code Playgroud)
我还没有找到ApplicationServices框架的文档.我怀疑我正深入到服务提供程序接口而不是应用程序编程接口.
我确实发现这个非常有趣的片段:( 谷歌缓存)(直接链接到下页 ;看起来网站正在重新组织)来自声称切换到登录窗口的应用程序,即使禁用了快速用户切换.
#include "CGSInternal.h"
int main (int argc, const char * argv[]) {
// switch to the login window
CGSCreateLoginSession(NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为CG意味着CoreGraphics,并且不明白与登录有什么关系(除非可能在当前用户的工作上放置登录对话框).
即使无法替换登录窗口,我也很想知道可以在这些方面做些什么(不适合Apple工作的人).
我试图覆盖OS X中的默认登录/锁定屏幕,允许用户以提供密码的其他方式登录(想想指纹扫描仪或"解锁"工作原理),我正在寻找一种方法现在要做几个小时 - 我发现看起来很有用的是Authorization Plugin ADC参考和这个例子:https://developer.apple.com/library/mac/samplecode/NameAndPassword/Introduction/Intro.html#//apple_ref/DOC/UID/DTS10004022
这个NameAndPassword xcode项目有点过时,但我只是通过指定Base SDK(有一个硬编码的错误路径)设法构建它,然后我将生成的.bundle文件放入/Library/Security/SecurityAgentPlugins目录.我锁定屏幕后没有任何改变,但我知道我需要将授权角色添加到/etc/authorization文件中,我知道Mavericks中不再存在(有这个auth.db文件和整个auth API),但我因此被卡住了这里 - 我不知道如何将NameAndPassword放在这个数据库中.
请让我知道我该怎么做,或者如果你知道其他方法来实现我的目标.
我需要为OS X登录机制创建一个插件,以便我可以通过键入密码来解锁屏幕.我知道这样的事情已经存在 - 敲门解锁或Rohos USB密钥登录都是例子.
我在ADC上找到了名为"NameAndPassword"的示例代码(https://developer.apple.com/library/mac/samplecode/NameAndPassword/Introduction/Intro.html),经过一番努力(OS X中的自定义登录/锁定屏幕)小牛队)我设法在Mavericks上构建并安装它.问题是整个插件显然有点过时,并且在我输入密码后不会登录(我需要通过SSH重启机器).我是一个xcode/objective-c初学者,不能自己解决这个问题.
基本上,我的问题是:如何修改示例NameAndPassword代码,以便我可以使用键盘以外的输入登录?我想创建一个提供密码的应用程序,但不是通过键盘 - 这就是我相信Knock解锁工作的方式.
我们已经开发了一个授权插件,该插件使用SFAuthorizationPluginView将UI呈现给用户。此示例基于Apple提供的“旧” NameAndPassword示例。
我们正在使用此授权插件通过自定义视图来解锁会话(我们已经在authorizationdb中更新了“ system.login.screensaver”授权)。在优胜美地的最新更新之前,此方法一直有效。从优胜美地开始,用户登录会话后,SFAuthorizationPluginView不再关闭。我们可以通过执行以下操作来更新示例以强制关闭窗口:
// confirm that we have authorized the user
[self callbacks]->SetResult ([self engineRef], kAuthorizationResultAllow);
// close the window
NSView* v = [self viewForType:SFViewTypeCredentials];
NSWindow* w = [v window];
[w close];
Run Code Online (Sandbox Code Playgroud)
现在,一旦用户登录(在我们授权用户之后),SFAuthorizationPluginView就会很好地关闭,但是某些内容在后台仍然处于活动状态,并且用户在会话中没有焦点(用户无法选择某些内容或在其中编写文本编辑内容)例)。我们必须手动杀死SecurityAgent才能再次获得焦点。(请注意,系统似乎在30秒后会自动杀死SecurityAgent)。
我们在以下页面上找到了Apple的NameAndPassword auth插件示例的固定2014版本,但是在优胜美地我们也面临同样的问题: 固定的2014版本的Apple的NameAndPassword身份验证插件示例
在优胜美地发布之前,这段代码对我们来说一直很好。
有人尝试类似的问题吗?有任何解决此问题的想法或建议吗?
security macos sfauthorizationpluginview objective-c osx-yosemite
我正在尝试在OSX Yosemite上创建自定义登录屏幕,以便用户可以使用不同的机制登录(而不仅仅是通过键盘输入凭据).目前,我试图通过继承Apple开发人员文档中推荐的SFAuthorizationPluginView类,然后通过重写-(void)buttonPressed:方法来实现我的自定义逻辑来实现这一目标.但是,文档相当模糊且过时.因此,我将我当前的实现基于NameAndPassword示例的修补版本.
此示例运行良好,允许我自定义单个nib文件并配置我自己的字段和按钮.我的问题是,当登录屏幕加载我的自定义视图时,它看起来像是由包含默认Yosemite登录按钮的父容器绑定.这本来没问题,除了按钮包含标题和图像,导致相当混乱的UI.现在,我的自定义按钮和Yosemite默认按钮在我的自定义登录屏幕中可见.这是截图.
我一直在寻找方法来访问Yosemite按钮,以便我可以删除/修改它们.到目前为止,我发现与这些按钮交互的唯一方法是通过调用
[super setButton:SFButtonTypeLogin enabled:NO];
Run Code Online (Sandbox Code Playgroud)
从我的子类切换这些按钮的启用标志,具体取决于您传入的按钮类型.
我正在寻找想法来访问这些默认按钮,或者用我自己的视图覆盖它们,以便只有我的自定义按钮可见并启用.此外,有可能这个课程与优胜美地不相称,因为它已经过时了.如果有人找到解决方法,请告诉我.
我正在尝试扩展MacOSX 10.9.1(Mavericks)中的登录界面.正如我所知,这可以通过实现一个新的身份验证插件并将其安装到授权数据库中来实现.
我已经下载了NameAndPassword示例,该示例演示了如何实现接口并覆盖/扩展SFAuthorizationPluginView.但问题是我无法在小牛队的基础上建立它.所以我决定下载第二个名为NullAuthPlugin的例子.这个编译,但我没有找到如何安装它.
所以我的问题是,如果有一个好的和更新的教程(TechNotes是形式2008-09-16)?
第二个问题是,如果可以用C#(Xamarin.Mac/MonoMac)开发,因为我不是很擅长开发Objective-C/C/C++.
谢谢!
macos ×6
objective-c ×3
cocoa ×1
login ×1
loginview ×1
mono ×1
monomac ×1
osx-yosemite ×1
security ×1
xcode ×1