首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UbuntuServer21.10-如何在插入USB设备时运行Shell脚本

UbuntuServer21.10-如何在插入USB设备时运行Shell脚本
EN

Stack Overflow用户
提问于 2021-11-08 20:10:36
回答 1查看 1.7K关注 0票数 0

当插入USB设备时,我想运行一个特定的脚本。但是,当我使用USB设备时,什么都不会发生。

下面是我想运行的脚本( /home/update.sh ):

代码语言:javascript
复制
#!/bin/sh
netplan apply

在同一个目录中,我通过运行以下命令使其可执行:

代码语言:javascript
复制
sudo chmod +x update.sh

我更新了udev规则文件( /etc/udev/rules.d/70-snap.snapd.rules ),在LABEL="mm_mbm_check"之后添加了以下行:

代码语言:javascript
复制
ACTION=="add", ATTRS{idVendor}=="`****`", ATTRS{idProduct}=="`****`", RUN+="/home/update.sh"

据我所知,我正在使用*允许任何usb设备。

更新这个udev规则文件后,我运行以下脚本来应用这些规则:

代码语言:javascript
复制
sudo service udev restart

以下是运行重新启动udev命令( tail -f /var/log/syslog )后来自syslog的日志:

代码语言:javascript
复制
Nov  8 19:52:20 ubuntu systemd-udevd[23328]: /usr/lib/udev/rules.d/90-pi-bluetooth.rules:14 Invalid value "/bin/sh -c 'ALIASES=/proc/device-tree/aliases; if cmp -s $ALIASES/uart0 $ALIASES/serial0; then echo 0;elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then echo 1; else exit 1; fi'" for PROGRAM (char 58: invalid substitution type), ignoring, but please fix it.
Nov  8 19:52:20 ubuntu systemd-udevd[23328]: /usr/lib/udev/rules.d/90-pi-bluetooth.rules:27 Invalid value "/bin/sh -c 'ALIASES=/proc/device-tree/aliases; if [ -e /dev/ttyAMA0 ]; then exit 1; elif cmp -s $ALIASES/uart0 $ALIASES/serial0; then echo 0;elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then echo 1; else exit 1; fi'" for PROGRAM (char 97: invalid substitution type), ignoring, but please fix it.
Nov  8 19:52:20 ubuntu systemd-udevd[23328]: /usr/lib/udev/rules.d/90-pi-bluetooth.rules:38 Invalid value "/bin/sh -c 'ALIASES=/proc/device-tree/aliases; if cmp -s $ALIASES/uart1 $ALIASES/serial0; then echo 0; elif cmp -s $ALIASES/uart1 $ALIASES/serial1; then echo 1; else exit 1; fi '" for PROGRAM (char 58: invalid substitution type), ignoring, but please fix it.

最后,当我将USB设备插到Raspberry上时,什么都不会发生。

我的配置:

  • 覆盆子Pi 3
  • Ubuntu Server 21.10

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2021-11-09 10:29:42

除了文件/etc/udev/rules.d/70-snap.snapd.rules中添加的规则之外,一切都是正确的。

为了使其工作,我在/etc/udev/rules.d/目录中添加了一个新文件/etc/udev/rules.d/,包括以下规则:

代码语言:javascript
复制
ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/home/update.sh"

而不是

代码语言:javascript
复制
ACTION=="add", ATTRS{idVendor}=="`****`", ATTRS{idProduct}=="`****`", RUN+="/home/update.sh"

我使用以下脚本重新启动了udev:

代码语言:javascript
复制
sudo service udev restart

现在,当我插入任何USB设备时,我的脚本正在运行。

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

https://stackoverflow.com/questions/69889385

复制
相关文章

相似问题

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