udev 规则中可以设置哪些 ENV 变量?

Mik*_*kov 5 udev

最近我发现了这个ENV{REMOVE_CMD}变量,它消除了ACTION=="remove"在需要add和的情况下使用匹配的需要remove。我试图找到一些可以在 udev 规则中设置的其他有用变量的信息,但不幸的是我找不到任何有价值的东西。

有谁知道ENV可以找到所有变量的列表?

Lek*_*eyn 5

看起来这些ENV变量的形式非常自由并且绑定到 devices。唯一的限制强制是可以没有任何这些键的使用:ACTION,子系统DEVTYPE,主,次,DRIVER,索引序号,DEVNAME,DEVLINKS,DEVPATH,标签。

除此之外,环境变量的解释留给其他规则和程序。使用grep -rni 'ENV{' /{lib,etc}/udev/rules.d找到消费者和环境变量的供应商。在您的特定REMOVE_CMD情况下,该文件/lib/udev/rules.d/50-udev-default.rules负责处理此操作:

# run a command on remove events
ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
ACTION=="remove", GOTO="default_end"
Run Code Online (Sandbox Code Playgroud)

使用此命令,您可以找到更多环境变量:

grep -hrPo 'ENV{\K[^}]*(?=}=[^=])' /{etc,lib}/udev/rules.d | sort -u
Run Code Online (Sandbox Code Playgroud)

例如,考虑95-upower-hid.rules文件。此文件设置UPOWER_BATTERY_TYPE变量。没有其他规则使用这个文件,但UPower守护进程注册到 udevd 以进行添加/更改/删除事件。然后,当事件发生时,UPower 会专门查询此变量的设备,以确定它是否应将其视为常规鼠标、UPS 或 Unifying 接收器设备。

另一个(更有用的)示例是UDISKS_IGNORE环境变量,可用于提示图形文件浏览器将设备隐藏在驱动器列表中。特别是对于 udisks2,您可以在udisks(8)手册页(使用 定位此man -K UDISKS_IGNORE)中找到变量。