从 bash 脚本中触发通知

问题描述

目标设备:macOS Catalina 及更高版本

我可以使用一些帮助来修复脚本中的问题,该问题应该在用户尝试连接到被禁止的 SSID 时触发 osascript 通知。仅当用户已连接或正在尝试连接到被禁止的 SSID 之一时,才会发出通知

我虽然问题是由于脚本正在由launchd运行,因此以root身份运行,但是,即使在以登录用户身份运行通知命令后,也不会出现通知,即使是其余的脚本工作正常。

其次,我们也无法从本地物品钥匙串中删除禁止的 SSID 的凭据,但是,脚本具有预期的效果,如果已连接,则将机器从被禁止的网络中踢出并阻止机器自动连接未来。我们可以从系统钥匙串中删除凭据,但如果能找到一种方法也能从本地物品钥匙串中删除该项目,那就太好了。

无论如何,主要问题出现在下面修改后的代码的第 47 行。任何帮助解决这些问题的任何帮助将不胜感激。

代码段已被修改以更轻松地识别违规命令:

{'even': [2,4,6,8,10],'odd': [1,3,5,7,9]}

解决方法

好吧,您遇到的守护程序通知问题是设计使然。

它与 macOS 如何在不同会话中运行有关,您可以阅读 herehere 了解更多信息。

您现在需要知道的是,当作为守护程序运行时,即使使用 sudo -u,您也无法默认访问用户 GUI 会话。

但是,有一些方法可以从您的上下文访问用户 GUI 会话,正如所描述的那样here

总结一下,你需要做的是:

  1. 改变

sudo -u $loggedInUser osascript -e ...

sudo launchctl asuser $userId osascript -e ...

其中 $userId 是这样的:

userId=`sudo -u $USER id -u`

(我不是很喜欢 bash,它可以以更清晰的方式完成)

  1. 检查,sh 是否在安全首选项中被授予全盘访问权限(否则沙箱配置文件将不允许您读取 sh 脚本)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...