首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Udev-在更新ubuntu22.04.1之后,使用"PROGRAM“语句的规则不再被执行。

Udev-在更新ubuntu22.04.1之后,使用"PROGRAM“语句的规则不再被执行。
EN

Stack Overflow用户
提问于 2022-08-12 22:50:43
回答 1查看 83关注 0票数 1

我正在我的3D打印服务器上运行一个udev规则,自动创建到一些附加的微控制器板的易于识别的符号链接,它在ubuntu20.04上工作得非常好。该规则在usb供应商和产品ids上触发,并通过程序指令运行python脚本。该脚本连接到微控制器板,并读取它的init序列,以获得该板的“名称”。然后,它输出一个类似于"aaaaaaa“的字符串,并且在udev规则中只使用第一个块(包含名称)。但是,整个程序指令似乎不再执行,因为我将我的系统更新为ubuntu22.04.1。

我的udev规则目前看起来如下(调试时)。它通常只包含第1和第3行。我为测试目的添加了#2,因为第1行中的钩子工作,并且执行了该脚本):

代码语言:javascript
运行
复制
KERNELS=="ttyUSB*", ENV{ID_VENDOR_ID}=="0403", ENV{ID_MODEL_ID}=="6001", ENV{ID_SERIAL_SHORT}!="AI046A0Q", ACTION=="add|remove", RUN="/bin/su me -c \"/opt/me/deviceReg.py -d %k -a %E{ACTION}\""
KERNELS=="ttyUSB*", ENV{ID_VENDOR_ID}=="0403", ENV{ID_MODEL_ID}=="6001", ENV{ID_SERIAL_SHORT}!="AI046A0Q", ACTION=="add|remove", PROGRAM="/opt/me/serialUdev.py -s %s{serial} /dev/%k", SYMLINK+="%c{1}", OWNER="me", GOTO="script_end"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}!="AI046A0Q", PROGRAM="/opt/me/serialUdev.py -s %s{serial} /dev/%k", SYMLINK+="%c{1}", OWNER="me", GOTO="script_end"

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A9QXPRV7", SYMLINK+="tty_MainSwitch", GROUP="dialout", OWNER="me", GOTO="script_end"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A9QOIMJ6", SYMLINK+="tty_Cooler", GROUP="dialout", OWNER="me", GOTO="script_end"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A9PTMHGV", SYMLINK+="tty_CurrentTransformer", GROUP="dialout", OWNER="me", GOTO="script_end"

python脚本写入一些日志文件,这些日志文件清楚地指示只执行第1行和第4行、第5行或第6行。

在第3行中有什么东西在最新的udev版本中不再受支持?正如我所说的,在更新系统之前,第3行工作得很好。最后三行是我目前的解决办法。它们工作得很好,但这并不是我想要实现的整个命名系统。

第2和第3行中的python脚本运行得非常好,无论是作为标准用户还是以root用户的身份调用。如果'-s‘输入数据与uc板不匹配,丢失或者是随机垃圾,它也会提供有效的输出。

有谁知道为什么脚本忽略了程序语句的任何行吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-13 14:29:52

好吧,我解决了这个问题。我也将udev的日志级别设置为调试,查看处理设备时实际发生了什么。脚本实际上被调用,但在导入所需模块时立即失败:无法找到pyserial模块。虽然安装了该模块,但显然无法导入它。

但是,我再次检查了python脚本,并将第一行从#!/usr/bin/env python3更改为#!/usr/bin/python3,现在它再次工作。

所以我的问题实际上与udev无关,它只是我的python脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73340407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档