IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Régles udev et script


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut Régles udev et script
    Bonjour a tous et toutes,



    Alors voila je souhaiterais faire en sorte que lors du branchement d'un clavier externe usb sur mon laptop le clavier de base se désactive. J'ai donc naturellement regardé du coté des règles udev. Après avoir lu un peu de docs et quelques tâtonnements je suis arriver à faire une règle qui se lance bien au branchement de mon péripherique. Et c'est la que je commence a avoir quelques soucis, premièrement j'ai créer deux régles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="usb", ATTR{product}=="USB Receiver", ATTR{manufacturer}=="Logitech", ACTION=="add", RUN+="/usr/bin/script_add"
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="usb", ATTR{product}=="USB Receiver", ATTR{manufacturer}=="Logitech", ACTION=="remove", RUN+="/usr/bin/script_rem"

    La première fonctionne correctement mais bizarrement la deuxième ne se lance pas lorsque je retire mon périphérique.

    J'ai observé cela en faisant dans chaque script un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `echo "add|remove" >> /home/user/add|remove`
    Et j'observe donc que le fichier "add" se remplie bien a chaque branchement mais que le fichier ''remove" reste vide. J'ai tenté de changer l'action par "change" mais le problème persiste.



    Une autre chose étrange c'est que, autant la simple commande du echo fonctionne parfaitement, autant la commande que j’utilise pour désactiver/réactiver le clavier ne fonctionne pas. Pourtant, le script lancer normalement dans un terminal fonctionne parfaitement. La commande est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xinput set-prop 'AT Translated Set 2 keyboard' 'Device Enabled' 0


    Donc si quelqu'un pense connaître la cause d'un de ces deux problèmes je suis preneur .



    Merci du temps passé a lire ma question et du temps que vous prendrez pour y répondre.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Pour être bien sûr: quand tu écris `echo "add|remove" >> /home/user/add|remove` tu veux dire que dans un script, tu as echo "add" >> /home/user/add et dans l'autre echo "remove" >> /home/user/remove ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Oui, oui exactement ! C'est vrai qu'en relisant c’était pas forcement clair

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Bonjour,

    Pour la partie xinput, tu le lances comment ?
    Ton problème est peut-être sur un problème de DISPLAY car comme c'est une commande X, il faut que celui-ci sache sur quel display est lié le device input...
    Cordialement.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Pour la partie xinput, tu le lances comment ?
    Ton problème est peut-être sur un problème de DISPLAY car comme c'est une commande X, il faut que celui-ci sache sur quel display est lié le device input...
    Alors excellente remarque je n'avais pas fait attention a ça, je lançais simplement xinput.
    Du coup j'ai tenté un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `DISPLAY=:0 xinput >> /home/user/xinput`
    pour voir si la commande se lançait mais non, toujours pas :/.
    Pourtant dans le terminal la même commande se lance bien...

    Edit:

    En fait le problème des commandes venait bien de là. Mais il fallait aussi préciser le XAUTHORITY avec le DISPLAY. Il ne me reste plus qu'a trouvé pourquoi il ne détecte pas l'instruction "remove" alors qu'elle apparaît bien dans udevadm monitor.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 280
    Points : 12 729
    Points
    12 729
    Par défaut
    As-tu essayé les actions suivantes:
    -Brancher le clavier
    -Executer la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    udevadm monitor --environment --udev
    -Puis débrancher le clavier

    Comme ceci, la commande te montrera l'event de l'action ainsi que les différents attributs vu par le system a ce moment là.
    Et cela devrait te permettre d'avoir les bons attributs à paramètrer.
    En gros, si tu es sure de ta ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="usb", ATTR{product}=="USB Receiver", ATTR{manufacturer}=="Logitech", ACTION=="remove", RUN+="/usr/bin/script_rem"
    Dans ce cas, via les actions précédentes, tu devrais retrouver les même ATTR avec les valeurs associées.
    Cordialement.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Ahaha mais quel boulet je suis !

    Effectivement tu as vu juste, j'avais regardé les infos du périphérique sans l'option "-a" de udevadm info.
    Donc en fouillant bien avec l'option -a et le path complet vers mon périphérique j'ai finalement réussi a obtenir la simple règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="input", ATTR{name}=="Logitech K400", ACTION=="add", RUN+="/usr/bin/myscript"
    Merci pour votre aide précieuse !

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Certes, certes. Mais c'était le "remove" qui t'intéressait. Est-ce que tu as mis la discussion en "résolu" car la ligne suivante marche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="input", ATTR{name}=="Logitech K400", ACTION=="remove", RUN+="/usr/bin/myscript"
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Certes, certes. Mais c'était le "remove" qui t'intéressait. Est-ce que tu as mis la discussion en "résolu" car la ligne suivante marche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="input", ATTR{name}=="Logitech K400", ACTION=="remove", RUN+="/usr/bin/myscript"
    Non, pas tout a fait. Mais en suivant la procédure de disedorgue j'ai trouvé les bons attributs pour le remove. Voici la règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="hid", ENV{HID_NAME}=="Logitech K400", ACTION=="remove", RUN+="/usr/bin/myscript_remove"
    Le problème venait du fait qu’apparemment ce ne sont pas forcement les mêmes attributs qui sont utilisés pour l'action l'add et le remove du périphérique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Règle UDEV pour ttyS0
    Par jaymzwise dans le forum Administration système
    Réponses: 0
    Dernier message: 08/12/2014, 11h21
  2. problème règle udev
    Par dvi43 dans le forum Matériel
    Réponses: 0
    Dernier message: 21/03/2010, 12h15
  3. Appliquer une règle par script
    Par levit dans le forum Windows XP
    Réponses: 1
    Dernier message: 15/10/2009, 08h45
  4. éxécution d'un script sur une règle
    Par Régolo dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 20/07/2008, 20h03
  5. Probleme règle + script
    Par forca dans le forum VBA Outlook
    Réponses: 9
    Dernier message: 09/07/2008, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo