|
由于 KERNEL 卷标 sdb 可能会由于分配给在它之前插入的其它驱动器而发生变化,因此卷标并不是一个 udev 规则的父级属性的好选择。但是,在做概念论证时你可以使用它。一个事件的最佳候选者是 SUBSYSTEM 属性,它表示那个设备是一个 “block” 系统设备(也就是为什么我们要使用 lsblk 命令来列出设备的原因)。
在 /etc/udev/rules.d 目录中打开一个名为 80-local.rules 的文件,然后输入如下代码:
SUBSYSTEM=="block", ACTION=="add", RUN+="/usr/local/bin/trigger.sh"
保存文件,拔下你的测试 U 盘,然后重启动系统。
等等,重启动 Linux 机器?
理论上说,你只需要运行 udevadm control —reload 即可,它将重新加载所有规则,但是在我们实验的现阶段,最好要排除可能影响实验结果的所有因素。udev 是非常复杂的,为了不让你躺在床上整晚都在思考为什么这个规则不能正常工作,是因为语法错误吗?还是应该重启动一下。所以,不管 POSIX 自负地告诉你过什么,你都应该去重启动一下。
当你的系统重启动完毕之后,(使用 Ctl+Alt+F3 或类似快捷键)切换到一个文本控制台,并插入你的 U 盘。如果你运行了一个最新的内核,当你插入 U 盘后你或许可以看到一大堆输出。如果看到一个错误信息,比如 “Could not execute /usr/local/bin/trigger.sh”,或许是因为你忘了授予这个脚本可运行的权限。否则你将看到的是,一个设备插入,它得到内核设备分配的一些东西,等等。
现在,见证奇迹的时刻到了。
$ cat /tmp/udev.logTue Oct 31 01:35:28 NZDT 2035
如果你在 /tmp/udev.log 中看到了最新的日期和时间,那么说明 udev 已经成功触发了你的脚本。
改进规则做一些有用的事情
现在的问题是使用的规则太通用了。插入一个鼠标、一个 U 盘、或某个人的 U 盘都将盲目地触发这个脚本。现在,我们开始专注于希望触发你的脚本的是确定的某个 U 盘。
实现上述目标的一种方式是使用提供商 ID 和产品 ID。你可以使用 lsusb 命令去得到这些数字。
$ lsusbBus 001 Device 002: ID 8087:0024 Slacker Corp. HubBus 002 Device 002: ID 8087:0024 Slacker Corp. HubBus 003 Device 005: ID 03f0:3307 TyCoon Corp.Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 hubBus 001 Device 003: ID 13d3:5165 SBo Networks
(编辑:淮安站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|