Pagina 1 di 1

key PROGRAM in udev e fallimento della regola associata

Inviato: sab 3 mar 2007, 18:27
da absinthe
ciao,

dato che mi ero rotto di scrivere tutte le volte una regola specifica per ogni storage usb che dovevo attaccare al pc ho deciso di usare la direttiva PROGRAM di udev così da creare in maniera dinamica il device name persistente associato ad ogni dispositivo. ora però è successo un fatto strano. ho fatto un abbozzo di script ed ho scritto una regola associata per udev. lo script è il seguente:

Codice: Seleziona tutto

#!/bin/sh

#the following code gets kernel name for the device (provided by udev) and retrive vendor and model strings to create a persistent explanatory device name. actually the code works only for usb mass storages.

ECHO=echo

UDEVINFO=$(which udevinfo)
[ $UDEVINFO = "which" ] && { $ECHO "unable to locate udevinfo. creation failed"; exit 1;}

#run udevinfo
VENDOR=$($UDEVINFO -a -p /sys/block/$1/ | grep  -m1 "SYSFS{vendor}" | cut -f2 -d \" | awk '{printf $1}')
[ $VENDOR = "" ] && VENDOR="unk"
MODEL=$($UDEVINFO -a -p /sys/block/$1/ | grep  -m1 "SYSFS{model}" | cut -f2 -d \" | awk '{printf $1}')
[ $VENDOR = "" ] && VENDOR="unk"
echo "$VENDOR-$MODEL"
la regola di udev è la seguente:

Codice: Seleziona tutto

#usb pen
BUS=="scsi", KERNEL=="sd*", PROGRAM="/home/utente/slack/scripting/rc.udev.ruler %k", NAME="%c"
ho provato a testare la regola con udevtest. ho inserito la mia pennina (vista come sda) ed ho digitato il comando con il seguente output:

Codice: Seleziona tutto

bash-3.1# udevtest /block/sda
main: looking at device '/block/sda' from subsystem 'block'
run_program: '/home/utente/slack/scripting/rc.udev.ruler sda'
run_program: '/home/utente/slack/scripting/rc.udev.ruler' (stdout) 'LEXAR-JUMPDRIVE'
run_program: '/home/utente/slack/scripting/rc.udev.ruler' returned with status 0
udev_rules_get_name: rule applied, 'sda' becomes 'LEXAR-JUMPDRIVE'
run_program: '/lib/udev/usb_id -x'
run_program: '/lib/udev/usb_id' (stdout) 'ID_VENDOR=LEXAR'
run_program: '/lib/udev/usb_id' (stdout) 'ID_MODEL=JUMPDRIVE_SPORT'
run_program: '/lib/udev/usb_id' (stdout) 'ID_REVISION=3000'
run_program: '/lib/udev/usb_id' (stdout) 'ID_SERIAL=LEXAR_JUMPDRIVE_SPORT_1069A701042634271105'
run_program: '/lib/udev/usb_id' (stdout) 'ID_TYPE=disk'
run_program: '/lib/udev/usb_id' (stdout) 'ID_BUS=usb'
run_program: '/lib/udev/usb_id' returned with status 0
udev_rules_get_name: add symlink 'disk/by-id/usb-LEXAR_JUMPDRIVE_SPORT_1069A701042634271105'
run_program: '/lib/udev/path_id /block/sda'
run_program: '/lib/udev/path_id' (stdout) 'ID_PATH=pci-0000:00:1d.7-usb-0:8:1.0-scsi-0:0:0:0'
run_program: '/lib/udev/path_id' returned with status 0
udev_rules_get_name: add symlink 'disk/by-path/pci-0000:00:1d.7-usb-0:8:1.0-scsi-0:0:0:0'
udev_device_event: device '/block/sda' already in database, validate currently present symlinks
udev_node_add: creating device node '/dev/LEXAR-JUMPDRIVE', major = '8', minor = '0', mode = '0660', uid = '0', gid = '6'
udev_node_add: creating symlink '/dev/disk/by-id/usb-LEXAR_JUMPDRIVE_SPORT_1069A701042634271105' to '../../LEXAR-JUMPDRIVE'
udev_node_add: creating symlink '/dev/disk/by-path/pci-0000:00:1d.7-usb-0:8:1.0-scsi-0:0:0:0' to '../../LEXAR-JUMPDRIVE'
main: run: 'socket:/org/kernel/udev/monitor'
in sostanza secondo udevtest la regola funziona alla perfezione. il fatto è che non viene creato nessun device... e dato che udevtest non mi da errori non so che pesci pigliare.
qualcuno ha mai provato la cosa?

grazie,
M

Inviato: lun 16 apr 2007, 22:19
da alex.franci
ciao!
meglio tardi che mai, no? :D
ho avuto il tuo stesso problema. ho capito che PROGRAM sta per un programma vero è proprio (per esempio se monti la macchina fotografica apri the gimp). per gli script usa run:

RUN="[/path/allo/script.sh]"

Inviato: lun 16 apr 2007, 22:53
da absinthe
ciao,

in realtà PROGRAM è la direttiva per l'esecuzione di un programma PRIMA che sia creato il device, RUN è la direttiva per l'esecuzione di un programma DOPO che è stato creato il device. in particolare io volevo usare PROGRAM per definire il nome del device... in effetti provando con un binario la cosa è andata a buon fine, mentre con uno script no... quello che non capisco è perchè la simulazione però non segnala errori... mah... appena mi ritorna il pc dall'assistenza faccio due prove.

grazie,
M

Inviato: mar 17 apr 2007, 16:41
da alex.franci
prego :)
fammi sapere
ciaociao