2012-11-08 104 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給出的值匹配)。您還可以輕鬆設置所有權和權限等。