Hi, I developed this little script for looking through the udev device
database and thought it might be of interest to others.
There's probably a much easier way of doing it, but it was fun anyway!
Excuse the HTML post, I thought it might prevent line wrapping.
ATB, Peter
#!/bin/bash
# Allows browsing through the udev device hierarchy to look at attributes etc
while true; do
# First put up a list of highlights from udev's database (udevadm info
--export-db)
# 1st grep defines what's interesting
# 2nd grep (-v) excludes uninteresting devices
# 1st sed indents the E/S lines
# 2nd sed only prints N/P lines if there are nonNP lines before the next NP
# (i.e. only print names/paths with interesting details)
# it puts each N/P line into the hold space (h)
# nonNP lines check if we've printed the NP line (hold buffer==DONE),
# if not: print it and set it to DONE.
# In any case print the nonNP line.
while true; do # loop till device is selected.
DEV=$(udevadm info --export-db \
| grep "^P\|^N\|ID_VENDOR=\|ID_MODEL=\|ID_INPUT_\|S: disk/by-label\|
NAME=\| WACOM_TYPE=" \
| grep -v "^N: \(ram\|tty\|usbdev\|vcs\|loop\)" \
| sed "s/^[^NP]: / /" \
| sed -n "s/^[NP]: //;TnonNP;h;b;
:nonNP;x;s/^DONE$/DONE/;tdone;p;s/.*/DONE/; :done;x;p" \
| zenity --list \
--column "Device" \
--text "Choose a device to examine" \
--width 500 --height 500 \
)
if [ "$?" != "0" ]; then exit 1; fi
if [ "${DEV:0:1}" == " " ]; then
zenity --error --text "Please select a device, not the details"
else
break
fi
done
# Ask what sort of udevadm call is required
REQ=$(zenity --list \
--column "Details" \
--text "Select detail required for $DEV" \
<<EOF
udevadm info --query=all
udevadm info --attribute-walk
EOF
)
if [ "$?" != "0" ]; then exit 1; fi
# DEV could be a name or a path
if [ "${DEV:0:1}" == "/" ]; then # it's a path
KEY="--path"
else
KEY="--name"
fi
# Execute the udevadm call and display the results
$REQ $KEY $DEV \
| zenity --text-info \
--width=700 --height=500
if [ "$?" != "0" ]; then exit 1; fi
done # repeat everything until cancel is pressed