问题描述
目标设备:macOS Catalina 及更高版本
我可以使用一些帮助来修复脚本中的问题,该问题应该在用户尝试连接到被禁止的 SSID 时触发 osascript 通知。仅当用户已连接或正在尝试连接到被禁止的 SSID 之一时,才会发出通知。
我虽然问题是由于脚本正在由launchd运行,因此以root身份运行,但是,即使在以登录用户身份运行通知命令后,也不会出现通知,即使是其余的脚本工作正常。
其次,我们也无法从本地物品钥匙串中删除被禁止的 SSID 的凭据,但是,脚本具有预期的效果,如果已连接,则将机器从被禁止的网络中踢出并阻止机器自动连接未来。我们可以从系统钥匙串中删除凭据,但如果能找到一种方法也能从本地物品钥匙串中删除该项目,那就太好了。
无论如何,主要问题出现在下面修改后的代码的第 47 行。任何帮助解决这些问题的任何帮助将不胜感激。
{'even': [2,4,6,8,10],'odd': [1,3,5,7,9]}
解决方法
好吧,您遇到的守护程序通知问题是设计使然。
它与 macOS 如何在不同会话中运行有关,您可以阅读 here 和 here 了解更多信息。
您现在需要知道的是,当作为守护程序运行时,即使使用 sudo -u,您也无法默认访问用户 GUI 会话。
但是,有一些方法可以从您的上下文访问用户 GUI 会话,正如所描述的那样here
总结一下,你需要做的是:
- 改变
sudo -u $loggedInUser osascript -e ...
到
sudo launchctl asuser $userId osascript -e ...
其中 $userId 是这样的:
userId=`sudo -u $USER id -u`
(我不是很喜欢 bash,它可以以更清晰的方式完成)
- 检查,sh 是否在安全首选项中被授予全盘访问权限(否则沙箱配置文件将不允许您读取 sh 脚本)