Pages : 1
#1 Le 04/02/2008, à 14:35
- Edgy-Pollux-77
script pour maniper une clé USB
Bien le bonjour la communauté !
N'étant pas un développeur, je galère... j'ai vraiment du mal, il faut dire aussi que ce "challenge" est quelque peu tordu !!!
Voici le besoin :
_ Le script doit être exécuté en tant que 'root'.
_ Il peut tourner en tant que service (avec le & ou exécuter à partir d'un rc ou autre...)
_ Son but est de détecter la présence d'une clé USB connue (identifiée et/ou identifiable),
_ De monter cette clé USB (gdm étant désactivée ainsi que l'auto-mount...).
_ Exécuter un programme en passant en paramètre le fichier de conf se trouvant sur la clé USB (le but est qu'aucune donnée ne soit sur le DD).
_ Cas d'erreur traité, débrancher la clé puis la remettre... Si la clé est retirée, le programme doit tjrs être en attente qu'elle soit rebranchée....
_ Cas d'erreur non traité : insérer une mauvaise clé, ie, ne contenant pas le fichier de conf attendu.
Si l'un d'entre vous à des idées ou des scripts proches d'un tel fonctionnement, je suis preneur !
Merci d'avance.
Ubuntuuuuuuuuuuuuuuuuuuuu
Avez-vous consulté ceci :
http://forum.ubuntu-fr.org/viewtopic.php?id=66829
Hors ligne
#2 Le 04/02/2008, à 14:52
- yleetiny
Re : script pour maniper une clé USB
moi je pencherai pour une utilisation personnelle de HAL (hardware Abstraction Layer).
On peut le personnaliser directement en modifiant/créant des fichiers textes appropriés (voire les branchements/débranchements à chaud : car c'est une surcouche de udev). Qui seront spécifiques à ton matériel (on peut le référencer de façon très précise, car quasiment toutes les infos dans Préférences>Informations sur le Matériel)...voire peut-être à ta partition...
en tout cas, on peut faire ainsi :
- branchement à chaud
- hal détecte le périphérique et lance le programme adapté (en root biensur, car hal en est capable sans saisie de mot de passe)
- le programme fait son boulot, (c'est là ou il faudra un programme très robuste pour gérer les erreurs par contre)
- soit ca marche, on quitte, et on continue normalement comme une pauvre clé usb classique (en gros, on rajoute seulement le démarrage d'un programme pour ton périphérique spécifique)
- soit ça crash, et le logiciel devra être stoppé (attention aux erreurs, par contre)
- et puis cette méthode permet de traiter par la même occasion le cas d'erreur "non traité"
Ce genre de script m'interresse un peu mais j'ai pas vraiment le temps de l'implémenter, donc je n'ai que l'idée quoi...(pour faire de la maintenance à distance de l'ordi de mes parents)
En tout cas, cette méthode me semble la plus simple bien que pas unique, (on pourrait passer par udev, mais je pense que c'est un peu trop risqué de tripatouiller par là )
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#3 Le 04/02/2008, à 15:05
- Edgy-Pollux-77
Re : script pour maniper une clé USB
Ok, merci pour les infos !
J'avais regardé udev mais ça me parait un peu trop bas niveau par rapport à ce que je veux faire...
Je poste ici mon script, il fonctionne pas trop mal mais j'ai du modifié le /etc/fstab pour le "mount" !
Script :
#!/bin/bash
#set -x
# Principe :
# On scanne toutes les 2 secondes, la présence ou non de la clé
# Si présente, la clé USB est montée et le programme exécutée. Le PID du programme lancé est récupéré !
# Programme exécuté après insertion de la clé : XSupplicant
# XSupplicant en indiquant le chemin du fichier de configuration présent sur la clé USB
# gksudo -S "xsupplicant -c $MOUNTPOINT/xsupplicant_usb.conf -i eth1"
# Si la clé est retiréé, on tue le processus avec le PID préalablement récupéré.
# Seul le cas nominal d'utilisation est géré.
# Les cas d'erreurs ne sont pas gérés.
# Une seule clé USB doit être insérée et elle contient nécessairement les fichiers utiles.
# Le fichier à scanner pour savoir si la clé est présente ou pas est le fichier /etc/partitions.
while true
do
# on considère que sda est le disque dur et donc que ses partitions ne changeront pas.
# on scanne alors à partir de 'b' et non de 'a'.
# On vérifie si un nouveau device a été inséré
get_dev=`awk '$4 ~ /^sd[b-z]$/ { print "/dev/"$4 }' /proc/partitions` # retourne sdb
if [ -n "$get_dev" ] ; then # Si la chaîne n'est pas vide...
{
# on attend 2 secondes avant d'identifier le volume monté
sleep 2
# on sélectionne la 1ere partition
first_part=1
get_part=$get_dev$first_part # retourne /dev/sdb1
# on récupère l'UUID
get_uuid=`hal-find-by-property --key block.device --string $get_part`
# retourne /org/freedesktop/Hal/devices/volume_uuid_B65E_8A72
# On monte la partition - /etc/fstab doit préalablement être modifié
# /dev/sdb1 - clé USB KINGSTON dans /etc/fstab
# /dev/sdb1 /media/KINGSTON vfat rw,user,noauto 0 0
mount /media/KINGSTON
# on récupère le point de montage
MOUNTPOINT=$(hal-get-property --udi $get_uuid --key volume.mount_point) # retourne /media/KINGSTON
# on exécute le programme EAP en indiquant le fichier de configuration
# gksudo -S "xsupplicant -c $MOUNTPOINT/xsupplicant_usb.conf -i eth1"
xsupplicant -c $MOUNTPOINT/xsupplicant_usb.conf -i eth1
# on vérifie que la clé est bien toujours là !
while [ -n "$get_dev" ]
do
get_dev=`awk '$4 ~ /^sd[b-z]$/ { print "/dev/"$4 }' /proc/partitions`
sleep 2
# Si la clé USB n'est plus là...
if [ -z "$get_dev" ] ; then # Si la chaîne est vide..
{
# On tue le démon xsupplicant et on quitte cette boucle
echo "Stopping XSupplicant v. 1.2.4"
# on récupère le PID d'xsupplicant
get_pid=`ps awx | grep xsupplicant | grep -v grep | awk '{print $1}'`
kill $get_pid
break
}
fi
done
}
else
{
sleep 2
get_dev=`awk '$4 ~ /^sd[b-z]$/ { print "/dev/"$4 }' /proc/partitions`
}
fi
done
----------------------
Avez-vous consulté ceci :
http://forum.ubuntu-fr.org/viewtopic.php?id=66829
Hors ligne
#4 Le 04/02/2008, à 15:29
- yleetiny
Re : script pour maniper une clé USB
après une petite réflexion, une idée pour l'utilisation de hal, la fiabilité et la sécurité des données : le petit programme lancé va :
0- faire éventuellement une reprise, si le processus est déjà lancé ailleurs...
1- allouer une mémoire "vive" de taille fixe, et la remplir avec le fichier à lire (ou du moins le plus possible)
2- traiter les données
3- si as la fin du traitement, la clef est toujours présente, on charge le reste, et rebelotte
4- sinon, on le demande de passer en hibernation...
Le fait de rester, en mémoire vive avec une taille fixe d'allocation mémoire permet de sécuriser pas mal le truc...
ton approche me semble pas superbe : ajout de démons inutiles, et en plus tu fais déjà un peu de HAL dedans!!
(en plus l'implémentation dans HAL en dur te permettera, de créer par exemple ta propre capacité des systèmes usb sur certains modèles, qui lanceront les bon script)
Par contre la gestion des arrêts/reprises et l'allocation mémoire fixe en bash, je sais pas trop faire...)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#5 Le 04/02/2008, à 15:39
- Edgy-Pollux-77
Re : script pour maniper une clé USB
euhm... j'ai jamais dis que mon script était superbe ! lol mais il a le mérite de fonctionner. Maintenant pour revenir sur HAL, j'ai du mal à trouver des infos et savoir ce qu'il est possible de faire et comment l'utiliser, l'appeler, etc...
Si tu as des idées d'optimisations, d'utilisation de HAL au travers le script ci-dessus, elles sont les bienvenues... encore merci.
Avez-vous consulté ceci :
http://forum.ubuntu-fr.org/viewtopic.php?id=66829
Hors ligne
#6 Le 04/02/2008, à 16:00
- yleetiny
Re : script pour maniper une clé USB
pour HAL, faut aller voir sur le sites, et regarder les dernières spécifications...
il te faudra apprendre à :
1- créer un .fdi (permet de rajouter des fonctionnalités, à une détection)
2- la gestion du branchement/débranchement ce fait à travers, d'autres trucs, tout est dit dans les spécifications...
bah j'avoues que j'ai un peu la flemme de programmer aujourd'hui...essaie de voir cette histoire de HAL (c'est sur leur site officiel)...en attendant...
et puis au vu de ton programme, très simple, ta commande se réduirait à une ou deux lignes de codes bash bien pensée...(enfin j'exagère un peu mais pas tant que cela)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#7 Le 04/02/2008, à 16:44
- yleetiny
Re : script pour maniper une clé USB
j'ai trouvé une méthode très simple (non testée), par exemple pour le montage :
1- on déplace un peu les choses
cd /usr/lib/hal/
sudo mv hal-storage-mount hal-storage-mount2
touch hal-storage-mount
chmod +x hal-storage-mount
sudo gedit hal-storage-mount
2- on copie colle ceci.
#!/bin/bash
#execution normale
. ./hal-storage-mount2
#mon truc à moi
eth="eth1"
fic="/media/KINGSTON/xsupplicant_usb.conf"
if [ -f $fic ]
then
xsupplicant -c $fic -i $eth
echo "clef et fichier de configuration détectés : lancement de xsupplicant"
fi
3- on sauve le fichier, et on redémarre "hal"
sudo /etc/init.d/hal restart
après tu peux faire des tests...
REMARQUES: c'est tellement simple que je pense que tu y arriveras avec la méthode de débranchement (vu que c'est un simple arrêt de programme que tu souhaites et pas une mise en veille)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#8 Le 05/02/2008, à 09:02
- Edgy-Pollux-77
Re : script pour maniper une clé USB
Merci pour ce code spécial HAL ! Je comprend mieux maintenant le principe et constate effectivement que le nombre de lignes à conséidérablement diminué !
Bon, je viens de faire ce qui est indiqué et ça ne marche pas !?
Lorsque je branche la clé usb, il ne se passe rien... même pas le montage du média, rien....
J'ai eu une erreur aussi HAL : failed to initialize...; rédémarrage complet du PC, idem.
Après réflexion, il y a une petite erreur dans le code :
Il faut mettre :
#!/bin/bash
#execution normale
. /hal-storage-mount2
et non :
#!/bin/bash
#execution normale
. ./hal-storage-mount2
Après ça plus d'erreurs HAL !
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Soucis suivant :
# sudo /etc/init.d/hal restart - n'existe pas chez moi ?!
# sudo dpkg-reconfigure hal m'indique qu'il est installé et tourne déjà ...
Il s'agit du démon /usr/sbin/hald
Je rappelle que le GDM n'est pas démarré et que donc, les "services spéciaux" indiqués dans "Système"/"Préférences"/"Périphériques et médias amovibles" ne sont pas activés (cochés).
Merci !
Avez-vous consulté ceci :
http://forum.ubuntu-fr.org/viewtopic.php?id=66829
Hors ligne
#9 Le 05/02/2008, à 09:10
- yleetiny
Re : script pour maniper une clé USB
ah bon, donc tu n'as pas le service hal ou hald qui existe, c'est bizarre, mais bon peu importe....
il suffit de redémarrer le pc est c'est bon, (je voulais juste t'éviter de le faire c'est tout)
voili voilou...
Et merci pour la correction du code, qui est en fait une erreur d'habitude de codage en bash
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#10 Le 05/02/2008, à 09:13
- Edgy-Pollux-77
Re : script pour maniper une clé USB
Merci yleetiny !
J'ai bien un démon hald qui tourne mais quand je tape :
# sudo /etc/init.d/hal restart
..; command not found !
Je suis sous Feisty Fawn 7.04.
Je me demande si la modif HAL précédente ne demande pas une modif dans les .fdi ?
Avez-vous consulté ceci :
http://forum.ubuntu-fr.org/viewtopic.php?id=66829
Hors ligne
#11 Le 05/02/2008, à 09:23
- yleetiny
Re : script pour maniper une clé USB
euh ben en fait, non parce que la j'ai vraiment bidouiller à fond!
en gros j'ai suivi la logique d'execution, et à tout./ simplement remplacer le fichier executé par le mien...
par contre il vaudrait mieux remplacer un ligne pour faire suivre les arguments:
./hal-storage-mount
par
./hal-storage-mount $*
NOTE: peut-être que sous Feisty la commande serait plutà´t "sudo /etc/init.d/hald restart" (il suffit de chercher le nom du service dans "/etc/init.d/" qui se rapproche le plus de hal en fait,
on peut aussi contourner en redémarrant dbus dont dépend hal)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#12 Le 08/02/2008, à 14:36
- Edgy-Pollux-77
Re : script pour maniper une clé USB
[RESOLU]
yéhpa !
La grande classe m'sieur yleetiny car le prog fonctionne !
Il ne fait pas exactement ce que je veux car pour fonctionner, la clé doit être déjà insérée hors je souhaite qu'il écoute et soit en attente de la connexion ou non de la clé.
Quoiqu'il en soit, une fois connectée, le montage est réalisé et XSupplicant s'éxecuté...
Me reste plus qu'à adapter ce script.... encore merci !
Avez-vous consulté ceci :
http://forum.ubuntu-fr.org/viewtopic.php?id=66829
Hors ligne
#13 Le 08/02/2008, à 18:55
- yleetiny
Re : script pour maniper une clé USB
La question à se poser est donc pourquoi souhaites-tu un démon qui tourne en tâche de fond qui bouffe de la mémoire, qui éventuellement veut figer le système??
En tout cas content d'avoir pu t'aider...
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne