Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#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 !


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 :

mount a écrit :

...
/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.


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

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 big_smile )

Hors ligne

Haut de page ↑