【问题标题】:Ubuntu Server 21.10 - How to run Shell Script when plugging USB deviceUbuntu Server 21.10 - 插入 USB 设备时如何运行 Shell 脚本
【发布时间】:2021-11-08 20:10:36
【问题描述】:

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

这是我要运行的脚本 (/home/update.sh):

#!/bin/sh
netplan apply

在同一目录中,我通过运行使其可执行:

sudo chmod +x update.sh

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

ACTION=="add", ATTRS{idVendor}=="`****`", ATTRS{idProduct}=="`****`", RUN+="/home/update.sh"

据我了解,我使用 * 来允许任何 USB 设备。

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

sudo service udev restart

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

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 时,没有任何反应。

我的配置:

  • 树莓派 3
  • Ubuntu 服务器 21.10

感谢您的帮助!

【问题讨论】:

    标签: shell ubuntu usb udev


    【解决方案1】:

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

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

    ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/home/update.sh"
    

    而不是

    ACTION=="add", ATTRS{idVendor}=="`****`", ATTRS{idProduct}=="`****`", RUN+="/home/update.sh"
    

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

    sudo service udev restart
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      相关资源
      最近更新 更多