Macos 执行快速用户切换时在OSX上运行脚本

Macos 执行快速用户切换时在OSX上运行脚本,macos,Macos,当用户通过OSX上的快速用户切换(El Capitan)进行切换时,是否可以设置脚本以运行? 早些时候,人们可以使用这样一种方法:-但这种方法已经多年不可能了。在错误的方向上尝试了几次之后,我想出了这个相当优雅的解决方案。我的目标是只为特定的Mac用户启动和停止VPN连接。您可以将最终二进制文件添加到用户的登录项中,或在~/Library/LaunchAgents中创建用户代理更多信息: 您需要熟悉Swift和Xcode 在Xcode中创建MacOS、命令行工具项目,并将以下内容粘贴到main.

当用户通过OSX上的快速用户切换(El Capitan)进行切换时,是否可以设置脚本以运行?
早些时候,人们可以使用这样一种方法:-但这种方法已经多年不可能了。

在错误的方向上尝试了几次之后,我想出了这个相当优雅的解决方案。我的目标是只为特定的Mac用户启动和停止VPN连接。您可以将最终二进制文件添加到用户的登录项中,或在
~/Library/LaunchAgents
中创建用户代理更多信息:

您需要熟悉Swift和Xcode

在Xcode中创建MacOS、命令行工具项目,并将以下内容粘贴到main.swift中

导入应用工具包
类VPNManager{
init(){
NSWorkspace.shared.notificationCenter.addObserver(
自己
选择器:#选择器(激活),
名称:NSWorkspace.sessiondibecomeactivigenotification,
对象:无
)
NSWorkspace.shared.notificationCenter.addObserver(
自己
选择器:#选择器(变为非活动),
名称:NSWorkspace.sessionDidResignActiveNotification,
对象:无
)
}
@objc func becameActive(){
打印(“工作区已激活…正在启动VPN”)
让任务=进程()
task.launchPath=“/usr/sbin/networksetup”
task.arguments=[“-connectpppoeservice”,“私有VPN(L2TP)”]
让管道=管道()
task.standardOutput=管道
task.standardError=管道
task.launch()
task.waitUntilExit()
让data=pipe.fileHandleForReading.readDataToEndOfFile()
让输出=字符串(数据:数据,编码:.utf8)
打印(“开始结果:”,输出??“空”)
}
@objc func becameInactive(){
打印(“工作区变为非活动状态…正在停止VPN”)
让任务=进程()
task.launchPath=“/usr/sbin/networksetup”
task.arguments=[“-disconnectpppoeservice”,“私有VPN(L2TP)”]
让管道=管道()
task.standardOutput=管道
task.standardError=管道
task.launch()
task.waitUntilExit()
让data=pipe.fileHandleForReading.readDataToEndOfFile()
让输出=字符串(数据:数据,编码:.utf8)
打印(“停止结果:”,输出??“空”)
}
}
让vpnManager=vpnManager()
打印(“VPNManager已初始化”)
RunLoop.current.run()
打印(“VPNManager正在退出”)

这可能有助于。。。或者这个。。。因此,编译服务/守护进程来处理用户切换事件似乎是完成此任务的唯一方法?对不起,我不是专家-其他人可能更了解。。。我只是想帮忙。我真的很感激你的回答!:)如果没有更容易的道路出现,我最终会沿着那条路走下去。