2012-11-08 105 views
4

我需要移植一个bash脚本,它使用不推荐的HAL工具,如hal-get-propertyhal-find-by-capability到udev。 HAL指出HAL已合并到udev中,但我无法找到有关如何将此脚本正确移植到udev的有用信息。替换为udev中的hal-get-property和hal-find-by-capability?

例子: 如果我想所有的存储硬件(与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吗?

+1

是''udevadm info --query = property''你在找什么,可能是以''udevadm info --query = property --name = $ 2''的形式和其他一些参数来选择设备。由于我没有hal,我不知道''--udi''参数采取什么形式,请告诉我们。 –

+0

我编辑了我原来的问题。这是否回答你的问题? – 0x80

回答

0

编辑完成后,您要做的事情就更清晰了。首先,你必须找到你要查询的设备。最简单的方法是实际扫描sysfs。如果要查询特定设备,则只需将udev指向描述该设备的sysfs中的某个位置即可。所以,如果你正在寻找sdb,你可以例如去/block/sdb或从/dev/block或类似的东西中挑选正确的节点。如果你有你的设备路径,说$DEVPATH,你可以这样做:

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

这将洒出大量的信息,包括可移除。如果您将attribute-walk替换为query=property,则会显示另一组信息,但我无法找到可移动信息。

如果您想为多个设备做到这一点,findxargs将是你的朋友,这基本上是你的hal-find-by-capability更换,因为你只需要找到在sysfs正确的文件夹。


取决于你在做什么呢,你可能还需要读入udev rules,它允许你触发脚本的执行,当设备连接(通过对由--attribute-walk给出的值匹配)。您还可以轻松设置所有权和权限等。