我需要将使用不推荐使用的 HAL 工具(如 hal-get-propertyhal-find-by-capability)的 bash 脚本移植到 udev。 HAL 指出 HAL 已合并到 udev,但我找不到有关如何将此脚本正确移植到 udev 的有用信息。

例子:
如果我想要所有存储硬件(带有 HAL)的列表,我可以运行
hal-find-by-capability --capability storage
这会给我一个 UDI(唯一设备标识符)的列表,如下所示:
/org/freedesktop/Hal/devices/storage_model_Virtual_disk
/org/freedesktop/Hal/devices/storage_serial_00000000000000000001
/org/freedesktop/Hal/devices/platform_floppy_0_storage

如果我现在想知道 /org/freedesktop/Hal/devices/storage_model_Virtual_disk 是否可移动,我可以发出以下查询
hal-get-property --udi /org/freedesktop/Hal/devices/storage_model_Virtual_disk --key storage.removable
它会回答 truefalse

所以我的问题是:
如果没有 HAL,我该如何做这些事情?
sysfsutils ( systool ) 可以工作,但它似乎不是一个合适的替代品。
这适用于 udevadm info 吗?

最佳答案

编辑后,您要做的事情就更清楚了。首先,您必须找到要查询的设备。最简单的方法是扫描 sysfs。如果要查询特定设备,只需将 udev 指向 sysfs 中描述该设备的位置。因此,如果您正在寻找 sdb ,您可以例如通过 /block/sdb 或从 /dev/block 或类似的东西中选择正确的节点。如果您有设备路径,例如 $DEVPATH ,您可以执行以下操作:

udevadm info --attribute-walk --name=$DEVPATH

这会泄露很多信息,包括可移除性。如果您将 attribute-walk 替换为 query=property ,则会显示另一组信息,但我无法在那里找到可移动性信息。

如果你想为多个设备这样做,findxargs 将是你的 friend ,这基本上是你的 hal-find-by-capability 替换,因为你只需要在 sysfs 中找到正确的文件夹。

根据您要做的事情,您可能还想读入 udev rules ,它允许您在连接设备时触发脚本的执行(通过与 --attribute-walk 给出的值进行匹配)。您还可以轻松设置所有权和权限等。

关于linux - 替换 udev 中的 hal-get-property 和 hal-find-by-capability?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13288299/

10-13 07:24