插入或拔出USB设备后自动运行脚本


22

安装/插入或卸载/拔出USB设备后如何自动运行脚本?


2
@XxxXxx:只要Cuttlefish没有适用于Ubuntu 12.10的发行版,就不可以使用
RaduRădeanu13-4-22


@Glutanimate:这个问题是关于特定的USB闪存驱动器的,但我通常询问的是USB设备
RaduRădeanu13年

@Glutanimate:可以说,该问题的答案很有帮助,拔掉 USB设备后,如何自动运行脚本仍无济于事。
RaduRădeanu13年

1
“假设该问题的答案是有帮助的,无论如何我都不会在拔下USB设备后自动运行脚本的答案。”我猜测如果将“ ACTION ='add'”更改为“ ACTION = “删除””,那将是一个不错的起点。
blujay

Answers:


17

由于MinimusHeximus和相应的贡献者线程他在我类似的问题发表评论时提及,我想我现在可以为您提供以下答案。

这种USB设备需要5(五个)文件,如下所示,只需填写相应的值即可<fortheseparts>

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

笔记:

  1. 您可以捕获这些值,<yourvendorid>并在Terminal中<yourproductid>输入命令lsusb(插入USB设备时),该命令将列出您当前可用的所有USB设备,例如Bus 003 Device 002: ID 8087:07da Intel Corp.,其中8087VendorID,07daProductID
  2. 并且<yourdevice>可以是您为USB设备选择的任意名称,例如,我选择使用通用名称“ 键盘当我为USB键盘创建此类文件时 ”,每次插入时都需要使用不同的键盘布局。
  3. 在某些情况下,当您不需要执行任何操作时(例如,撤消设备处于运行状态时所做的更改ACTION=="remove"),可能不需要使用udev规则文件中的行,因此也不必使用相关的2(两个)out文件。插入设备后)。

从我的新手角度来看,这似乎是错误的。这些子句不必位于同一行吗?
2013年

1
这有效:ACTION ==“ add”,ATTRS {idVendor} ==“ ...”,ATTRS {idProduct} ==“ ...”,ENV {XAUTHORITY} =“ / home / <用户> /。Xauthority” ,ENV {DISPLAY} =“:0”,RUN + =“ <script>”
2013年

@nafg:从我的新手角度来看,如果将所有这些都放在udev规则文件中的一行中(使用逗号作为分隔符),那没有什么区别,但是我看到您已经在udev规则中添加了XAUTHORITY和DISPLAY参数,可能对您或其他人有用,在这种情况下,我想知道下面的两个脚本文件中是否不再需要它们。
2013年

1
是的,这就是重点,因为udev允许您设置环境,所以您不再需要中间脚本(也许将实际脚本放在后台除外)。另外,我从udev文档中了解到,每一行都是独立的规则,文件中的行不会合并。
2013年

@nafg:感谢您的宝贵贡献。我将这些环境移至udev规则,它也对我有用。另外,当我将/ home文件夹移动到一个单独的分区后,我开始遇到问题时,我将脚本移动到了/ usr / local / bin(可能是因为它没有更早地挂载)。似乎在udev规则中使用换行符至少不会对我的系统(Ubuntu 13.04 64位)造成任何问题,并且出于可读性考虑,我更喜欢这样做。
2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.