jos*_*ker 11 linux shell usb udev
我有一个脚本,只要连接供应商1004的usb设备就会运行该脚本.我使用的udev规则是有效的,看起来像这样.
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", RUN+="/var/www/beta/trigger.php"
Run Code Online (Sandbox Code Playgroud)
现在,我想在连接任何USB设备时运行此脚本,并将供应商ID作为参数传递.(因此脚本可以决定是否必须运行.)
到目前为止,添加可在脚本中访问的参数已经起作用:
SUBSYSTEM=="usb", RUN+="/var/www/beta/trigger.php myparam"
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何用ATTR {idVendor}的值替换"myparam"吗?我尝试了各种组合,但我从未得到预期的结果......
非常感谢!
Kev*_*n S 20
只是为了补充这个答案,udev还允许你将参数传递给RUN和PROGRAM.
从udev手册页:
The NAME, SYMLINK, PROGRAM, OWNER, GROUP, MODE and RUN fields support simple
printf-like string substitutions. The RUN format chars gets applied after
all rules have been processed, right before the program is executed. It
allows the use of device properties set by earlier matching rules. For all
other fields, substitutions are applied while the individual rule is being
processed.
Run Code Online (Sandbox Code Playgroud)
例如,您可以有这样的规则:
# Passes major, minor and serial number as parameters to script.
ACTION=="add", SUBSYSTEM=="usb", RUN+="/tmp/test.sh %M %m $attr{serial}"
Run Code Online (Sandbox Code Playgroud)
可用的替换是:
$kernel, %k
The kernel name for this device.
$number, %n
The kernel number for this device. For example, ´sda3´ has kernel number
of ´3´
$devpath, %p
The devpath of the device.
$id, %b
The name of the device matched while searching the devpath upwards for
SUBSYSTEMS, KERNELS, DRIVERS and ATTRS.
$driver
The driver name of the device matched while searching the devpath
upwards for SUBSYSTEMS, KERNELS, DRIVERS and ATTRS.
$attr{file}, %s{file}
The value of a sysfs attribute found at the device, where all keys of
the rule have matched. If the matching device does not have such an
attribute, follow the chain of parent devices and use the value of the
first attribute that matches. If the attribute is a symlink, the last
element of the symlink target is returned as the value.
$env{key}, %E{key}
A device property value.
$major, %M
The kernel major number for the device.
$minor, %m
The kernel minor number for the device.
$result, %c
The string returned by the external program requested with PROGRAM. A
single part of the string, separated by a space character may be
selected by specifying the part number as an attribute: %c{N}. If
the number is followed by the ´+´ char this part plus all remaining
parts of the result string are substituted: %c{N+}
$parent, %P
The node name of the parent device.
$name
The current name of the device node. If not changed by a rule, it
is the name of the kernel device.
$links
The current list of symlinks, separated by a space character. The
value is only set if an earlier rule assigned a value, or during a
remove events.
$root, %r
The udev_root value.
$sys, %S
The sysfs mount point.
$tempnode, %N
The name of a created temporary device node to provide access to the
device from a external program before the real node is created.
%%
The ´%´ character itself.
$$
The ´$´ character itself.
Run Code Online (Sandbox Code Playgroud)
Jan*_*ary 10
udev为您设置几个可以使用的环境变量ID_VENDOR.试试那个小脚本:
#!/bin/bash
echo "Called by udev" >> /tmp/testenv
env >> /tmp/testenv
echo "Vendor id is $ID_VENDOR" >> /tmp/testenv
Run Code Online (Sandbox Code Playgroud)
把它放在一个规则中,你会看到为你设置了多少东西.
| 归档时间: |
|
| 查看次数: |
10671 次 |
| 最近记录: |