我正在尝试找到一种方法,当任何 USB 设备连接到我的 PC(USB 记忆棒、鼠标、键盘等)时启动 bash 脚本。然后,该脚本负责通过 zenity 制作的弹出窗口询问用户是否要授权所连接的设备。我的问题是启动脚本的触发器,在互联网上搜索我知道最简单的方法是使用 udev 规则,但从各种在线指南我不明白如何编写它。重要的是,当规则调用脚本时,它会向其传递设备的 ID(供应商 ID + 产品 ID)或路径 (/sys/bus/usb/DEVICE),以便脚本可以检索有关设备的一些信息以显示它给用户。对于 bash 脚本我应该知道怎么做。
这是我的想法的图表:
┏╺╺╺╺╺╺╺╺╺╺╺┓
╏ Udev Rule╏
┗╺╺╺╺╺╺╺╺╺╺╺┛
╏
▼
┏╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺┓
╏ Invoke the script ╏
╏ passing as arguments╏
╏ the product ID and ╏
╏ vendor ID or the ╏
╏ path of the device ╏
╏ in the filesystem ╏
┗╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺┛
╏
▼
┏╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺┓
╏ The script asks the ╏
╏ user if he wants to ╏
╏ authorize the ╏
╏ connected device ╏
┗╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺┛
╏ ╏
╏ ╏
▼ ▼
┏╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺┓ ┏╺╺╺╺╺╺╺╺╺╺╺╺╺╺┓
╏ If the user ╏ ╏ If the user ╏
╏ chooses no, ╏ ╏ chooses yes,╏
╏ permission is╏ ╏ permission ╏
╏ not granted ╏ ╏ is granted ╏
┗╺╺╺╺╺╺╺╺╺╺╺╺╺╺╺┛ ┗╺╺╺╺╺╺╺╺╺╺╺╺╺╺┛
我怎样才能做到这一点?
我发现脚本(用zenity显示弹出窗口)被执行,但是弹出窗口没有显示(可能是因为脚本以root身份运行)。
最后,我注意到从 udev 规则运行脚本存在太多问题(具有 zenity 和执行时间),因此我选择了一个非常简单的脚本,该脚本创建一个包含所连接设备名称的文件和用户空间中的另一个脚本定期检查该文件是否存在并执行所有其他操作。