可可 – 是否可以更换Mac登录界面?

可可 – 是否可以更换Mac登录界面?,第1张

概述是否可以使用自定义登录窗口应用程序替换Mac OS X登录窗口/System/Library/CoreServices/loginwindow.app? ( See my rational for doing so.) 我担心我的Cocoa编程技巧很简陋.我觉得有趣的是,当我运行探测CGSession(它是a undocumented utility that performs fast user 是否可以使用自定义登录窗口应用程序替换Mac OS X登录窗口/System/library/CoreServices/loginwindow.app? ( See my rational for doing so.)

我担心我的Cocoa编程技巧很简陋.我觉得有趣的是,当我运行探测CGSession(它是a undocumented utility that performs fast user switching)以查看它使用的功能时)

nm -mg /System/library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession

其中一个链接功能是:

(undefined [lazy bound]) external _CGSCreateLoginSession (from applicationservices)

我还没有找到applicationservices框架的文档.我怀疑我正在深入研究服务提供者接口而不是应用程序接口.

我确实发现这个非常有趣的片段:(google cache)(direct link to down page;看起来网站正在重新组织)来自声称切换到登录窗口的应用程序,即使禁用了快速用户切换.

#include "CGSInternal.h"int main (int argc,const char * argv[]) {    // switch to the login window    CGSCreateLoginSession(NulL);    return 0;}

我认为CG意味着CoreGraphics,并且不明白与登录有什么关系(除了可能在当前用户的工作上放置登录对话框).

即使无法替换登录窗口,我也有兴趣知道可以在这些方面做些什么(由那些不为Apple工作的人).

解决方法 登录窗口应用程序被定义为/System/library/launchdaemons/com.apple.loginwindow.pList中的launchd配置的一部分.

从理论上讲,您可以用自己的登录窗口替换登录窗口,但我不知道您在新应用程序中需要做什么 – 我认为登录窗口比认证和设置用户会话要多一些 – >除其他外,看起来它做了一些相关的杂务.

我编译了一个调用CGSCreateLoginSession的应用程序,一旦运行它,它就会通过旋转立方体转换到登录窗口.我想这就是为什么它需要CoreGraphics – 它只是一个图形函数,最后调用logout.

您可以尝试使用inputManager并在登录窗口中加载代​​码 – >如果是,则可以更改loginwindow NIB(LoginWindowUI.nib)并添加一些按钮以使用用户浏览器显示新窗口.一旦学生选择了他/她自己的照片,您就可以在登录窗口中自动填充用户名和密码字段.

节点这是理论,它看起来非常脆弱和不安全.

祝你好运.

稍后编辑

请注意这是非常不安全的,所以要小心使用 – 我在试用这些东西时给我的系统软管了几次

这是一个概念验证实现,它在loginwindow中注入代码.

#include <stdio.h>#include <unistd.h>#include <sys/time.h>#include <strings.h>#include <syslog.h>#import <Cocoa/Cocoa.h>#include <execinfo.h>@interface LLApp:NSApplication@end@implementation LLApp- (voID)run{    syslog(LOG_ERR,"LLApp being run");    [super run];}@endvoID my_openlog(const char *IDent,int logopt,int facility);typedef struct interpose_s {        voID * new_func;        voID * orig_func;} interpose_t;int MyNSApplicationMain(int argc,const char ** argv);static const interpose_t interposers[] __attribute__ ((section("__DATA,__interpose")))     = {{ (voID *) my_openlog,(voID *) openlog },};voID my_openlog(const char *IDent,int facility){        openlog(IDent,logopt,facility);    if(!strcmp(IDent,"/System/library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow"))    {        [LLApp poseAsClass:[NSApplication class]];    }    else    {        syslog(LOG_ERR,"Ignoring unkNown indent: >%s<",IDent);    }    return;}

代码编译:

gcc -Wall -dynamiclib -undefined dynamic_lookup -o ~/Desktop/libinterposers.dylib testin.m -framework Cocoa

代码加载基于插入,因此loginwindow的launchd定义必须包含一个附加条目(以便能够在动态链接器中插入),即:

<key>Environmentvariables</key><dict>        <key>DYLD_INSERT_liBRARIES</key>    <string>path_to/Desktop/libinterposers.dylib</string></dict>
总结

以上是内存溢出为你收集整理的可可 – 是否可以更换Mac登录界面?全部内容,希望文章能够帮你解决可可 – 是否可以更换Mac登录界面?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1032979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存