#1 Le 16/11/2013, à 08:39
- dudumomo
Lancement commande quand insert cle usb
Bonjour a tous,
J'essaye quee XBMC joue toutes mes videos qui sont sur ma cle USB, une fois celle ci inseree, et de facon automatique
La commande que j'utilise pour le faire manuellement est la suivante:
xbmc-send --host=localhost --port=9777 --action='PlayMedia("/media/0692-7D80/")' --action=PlayRepeat
Comment faire pour que cette commande s'execute automatiquement a chaque fois que je branche ma cle?
(J'ai essaye de jouer avec udev...mais je n'y suis pas arrive)
Le detail de ma cle:
udevadm info -q all -n /dev/sda
P: /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/host16/target16:0:0/16:0:0:0/block/sda
N: sda
S: disk/by-id/usb-Ut165_USB_Flash_Disk_00000000000032-0:0
S: disk/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-scsi-0:0:0:0
S: disk/by-uuid/0692-7D80
E: DEVLINKS=/dev/disk/by-id/usb-Ut165_USB_Flash_Disk_00000000000032-0:0 /dev/disk/by-path/platform-bcm2708_usb-usb-0:1.2:1.0-scsi-0:0:0:0 /dev/disk/by-uuid/0692-7D80
E: DEVNAME=/dev/sda
E: DEVPATH=/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/host16/target16:0:0/16:0:0:0/block/sda
E: DEVTYPE=disk
E: ID_BUS=usb
E: ID_FS_TYPE=vfat
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=0692-7D80
E: ID_FS_UUID_ENC=0692-7D80
E: ID_FS_VERSION=FAT32
E: ID_INSTANCE=0:0
E: ID_MODEL=USB_Flash_Disk
E: ID_MODEL_ENC=USB\x20Flash\x20Disk\x20\x20
E: ID_MODEL_ID=0165
E: ID_PATH=platform-bcm2708_usb-usb-0:1.2:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=platform-bcm2708_usb-usb-0_1_2_1_0-scsi-0_0_0_0
E: ID_REVISION=0.00
E: ID_SERIAL=Ut165_USB_Flash_Disk_00000000000032-0:0
E: ID_SERIAL_SHORT=00000000000032
E: ID_TYPE=disk
E: ID_USB_DRIVER=usb-storage
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Ut165
E: ID_VENDOR_ENC=Ut165\x20\x20\x20
E: ID_VENDOR_ID=1307
E: MAJOR=8
E: MINOR=0
E: SUBSYSTEM=block
E: UDEV_LOG=3
E: UDISKS_DISABLE_POLLING=1
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=1504580595
Merci !
Idipops, le réseau social des prestataires de services !
Tutorial and news on how to host your own server: http://freedif.org
Aidez la recherche avec BOINC et rejoignez la Mini-Team Libristes: http://www.boinc-af.org | http://libristes.boinc-af.net
Hors ligne
#2 Le 17/11/2013, à 09:06
- Didier-T
Re : Lancement commande quand insert cle usb
Bonjour dudumomo,
si tu es sous Xfce, c'est simple.
tu ouvre le Gestionnaire de paramètre, puis Disques amovibles et médias
une fois arrivé là, il suffit de lire et renseigner les champs qui t'intéressent
Hors ligne
#3 Le 20/11/2013, à 20:32
- Olivier_Dev
Re : Lancement commande quand insert cle usb
Bonsoir
L'idée serait d'écrire un script qui se lance a l'ouverture de ta session et qui tourne en background.
Ce script serait à l'écoute sur le bus de communication attribué au montages (dbus).
Algo trés rapide: se connecter au bus, ecouter le bus, des que activité detectée lister le peripherique pour trouver un ou des fichiers video et si c est le cas lancer xbmc.
je reviens rapidement pour vous donner un bout de code ( ecris il y a quelques mois déjas), permettant d'écouter l'interface org.gtk.Private.RemoteVolumeMonitor
sur le membre "VolumeAdded" en bash a l'aide de dbus-monitor et d'un while read line.
ACTIONS represente une fonction utilisé dans mon code.
interface="org.gtk.Private.RemoteVolumeMonitor"
member="VolumeAdded"
dbus-monitor --profile "interface='$interface',member='$member'"|
while read line
do
if echo $line|grep "VolumeAdded" 1>/dev/null
then
ACTIONS;
fi
done
Dernière modification par Olivier_Dev (Le 20/11/2013, à 21:23)
Hors ligne
#4 Le 23/11/2013, à 02:12
- Postmortem
Re : Lancement commande quand insert cle usb
Salut,
Pour écrire ta règle udev, branche ta clé et lance la commande mount ; pour ma clé, on peut voir ça :
...
/dev/sdf1 on /media/toto/D021-BC66 type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)
On voit que la partition sur la clé est /dev/sdf1. On lance donc ensuite udevadm comme ceci :
udevadm info --name=/dev/sdf1 --attribute-walk
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0/block/sdf/sdf1':
KERNEL=="sdf1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="31250400"
ATTR{stat}==" 514 15417 17134 1240 1 0 1 4 0 752 1244"
ATTR{partition}=="1"
ATTR{start}=="32"
ATTR{discard_alignment}=="0"
ATTR{alignment_offset}=="0"
ATTR{inflight}==" 0 0"
looking at parent device '/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0/block/sdf':
KERNELS=="sdf"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{ro}=="0"
ATTRS{size}=="31250432"
ATTRS{stat}==" 522 15417 17198 1248 1 0 1 4 0 760 1252"
ATTRS{range}=="16"
ATTRS{discard_alignment}=="0"
ATTRS{events}=="media_change"
ATTRS{ext_range}=="256"
ATTRS{events_poll_msecs}=="2000"
ATTRS{alignment_offset}=="0"
ATTRS{inflight}==" 0 0"
ATTRS{removable}=="1"
ATTRS{capability}=="51"
ATTRS{events_async}==""
looking at parent device '/devices/pci0000:00/0000:00:02.1/usb1/1-5/1-5:1.0/host5/target5:0:0/5:0:0:0':
KERNELS=="5:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{rev}=="1.00"
ATTRS{type}=="0"
ATTRS{scsi_level}=="3"
ATTRS{model}=="Cruzer "
ATTRS{state}=="running"
ATTRS{queue_type}=="none"
ATTRS{iodone_cnt}=="0x4d5"
ATTRS{iorequest_cnt}=="0x4d5"
ATTRS{timeout}=="30"
ATTRS{evt_media_change}=="0"
ATTRS{max_sectors}=="240"
ATTRS{ioerr_cnt}=="0x1"
ATTRS{queue_depth}=="1"
ATTRS{vendor}=="SanDisk "
ATTRS{device_blocked}=="0"
ATTRS{iocounterbits}=="32"
...
On voit qu'il y a plusieurs blocs d'infos. Pour construire la règle, on peut se servir des infos du 1er bloc et/ou des infos extraites de seulement un des autre bloc.
Dans mon cas, je vais utiliser ATTR{size}=="31250400" (qui vient du 1er bloc) puis ATTRS{model}=="Cruzer" et ATTRS{vendor}=="SanDisk" (qui viennent du 3ème bloc). On ne peut pas utiliser des infos venant du 2ème et 3ème bloc en même temps.
Pour détecter l'insertion de la clé, je créé donc la règle suivante que je vais enregistrer dans le fichier /etc/udev/rules.d/99-insert_cle.rules :
ACTION=="add", ATTR{size}=="31250400", ATTRS{model}=="Cruzer", ATTRS{vendor}=="SanDisk", RUN+="/bin/bash -c '/home/toto/insert_cle.sh &'"
Puis je créé le script /home/toto/insert_cle.sh (qu'il faut penser à rendre exécutable) qui va juste créé un fichier log pour voir si la règle est OK :
#!/bin/bash
echo "Clé insérée : $(date)" > /tmp/insert_cle.log
Si ta règle est OK, tu devrais voir apparaitre le fichier /tmp/insert_cle.log lors de l'insertion de ta clé.
Si c'est OK, tu pourrais essayer ça comme script appelé par udev (j'ai pas xbmc chez moi, j'ai testé en faisant ouvrir un fichier de ma clé avec gedit) :
#!/bin/bash
nb=1
until [[ $(mount | grep 0692-7D80) || $nb -gt 10 ]]
do
(( nb++ ))
sleep 1
done
[[ $(mount | grep 0692-7D80) ]] || { echo "Clé non montée" > /tmp/insert_cle.log; exit 1;}
export DISPLAY=:0
sudo -u toto xbmc-send --host=localhost --port=9777 --action='PlayMedia("/media/0692-7D80/")' --action=PlayRepeat
Sur la dernière ligne du script, il faut remplacer toto par ton nom d'utilisateur.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 12/08/2014, à 08:08
- alpe66
Re : Lancement commande quand insert cle usb
Bonjour Tous et merci d'avance pour vos réponses ...
Question de débutant ...
A quoi sert le & à la fin de la ligne ci-dessous ?
ACTION=="add", ATTR{size}=="31250400", ATTRS{model}=="Cruzer", ATTRS{vendor}=="SanDisk", RUN+="/bin/bash -c '/home/toto/insert_cle.sh &'"
Hors ligne
#6 Le 17/08/2014, à 12:10
- Didier-T
Re : Lancement commande quand insert cle usb
Bonjour alpe66,
déterrer une si vielle discussion est risqué.
Pour le & je peut tout de même te renseigner, il sert a dire au système de lancer la commande dans un processus différent sa permet de libérer le processus père et de le fermer sans crainte.
En gros c'est du multi tache (mais en très gros )
Hors ligne