Journal L'informatique ou comment devenir fou

Posté par (page perso) .
Tags : aucun
-6
13
nov.
2009
Il vient de m'arriver un truc de dingue, mais alors vraiment. Un truc tellement énorme que je le poste ici, c'est vous dire.

J'étais tranquillement, innocemment, naïvement je dirais même, en train d'essayer de configurer ma touche wifi (fn + f2) avec mon gestionnaire de fenêtre favoris, j'ai nommé awesome. Pour cela, je me fais une petite commande qui détecte si le wifi est déjà activé, et qui si oui le désactive, si non l'active.

if rfkill list | grep yes > /dev/null; then sudo rfkill unblock wifi; else sudo rfkill block wifi; fi

Toujours insouciant, je tente une première approche (je vous mets tout le détail pour que vous vous rendiez bien compte du l'horreur de ce qui m'est arrivé).

awful.key({ }, "XF86WLAN", function() execute("if rfkill list | grep yes > /dev/null; then sudo rfkill unblock wifi; else sudo rfkill block wifi; fi") end),

Première anicroche, l'appuie sur la touche concernée exécute 2 fois la commande. Le wifi s'active donc puis se désactive aussitôt (ou l'inverse). Je remplace la commande par un petit "echo uu >> uuu", rien à dire, l'appui sur la touche ne m'écris bien qu'un seul uu. Bon.
Un charmante personnalité me suggère alors d'insérer mon echo dans la boucle elle-même. Étant à cours d'idée, je suis son conseil.

awful.key({ }, "XF86WLAN", function() execute("if rfkill list | grep yes > /dev/null; then echo `date`>> u; else echo 'uuu `date`'>>u; fi") end),

J'enregistre mon fichier, je relance awesome pour la 10ème fois depuis le début de l'histoire, je pose mon pouce sur la touche Fn, je tends mon majeur vers la touche F2 et ... je trouve bien la date inscrite dans mon fichier u, une seule fois. Mais (ça serait trop beau sinon), le wifi s'active aussi. Oui, vous avez bien lu, le wifi s'active. Et évidement, un nouvel appui le désactive.
J'ai réenregistré 5 fois mon fichier de configuration, j'ai relancé une dizaine de fois awesome, rien à faire, le wifi continue à s'activer inlassablement. J'ai relu et relu ma commande, j'ai épluché chaque caractère un par un, je n'ai pas vu une seule trace, une seule ombre ressemblant de près ou de loin à un "rfkill unblock wifi", et pourtant le wifi s'active.

Vous allez me dire que mon problème est résolu, j'ai fait ce que je voulais initialement faire, sauf que d'un j'ai un stupide fichier u qui vient polluer mon dossier home, et de deux j'aimerais quand même arriver à comprendre ce qu'est ce foutu bordel.
  • # .

    Posté par (page perso) . Évalué à 4.

    T'es sûr que t'as pas 2 scripts qui se marchent dessus ? Sinon, ça ferait un trèc bon sujet pour un truc de forum, non ? :)
    • [^] # Re: .

      Posté par (page perso) . Évalué à 0.

      Je vois pas trop comment ça pourrait être le cas.
      Et sinon, c'est mon premier journal, je ne suis pas encore très habitué.

      Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

      • [^] # Re: .

        Posté par . Évalué à 4.

        Nettoyage du cache de configuration, grep -r rfkill ~

        j'ai eu un problème du genre y'a quelques temps avec minicom qui enregistrait la configuration a deux endroit (dans /etc car lancé en root et dans mon ~ car lancé via sudo)
      • [^] # Re: .

        Posté par (page perso) . Évalué à 3.

        moi ce n'est pas mon gestionnaire de fenêtre qui prend en charge les Fn+XX, mais des machins dans /etc/acpi/events (il me semble).

        Par contre, j'ai remarqué qu'il était possible d'avoir plusieurs trucs qui recoivent les événements de ce type, car sur mon eeepc 901, si je fais Fn+wifi dans emacs, ça active/désactive le wifi correctement, mais emacs se plaint quand même de ne pas avoir de commande associée.
        • [^] # Re: .

          Posté par (page perso) . Évalué à 1.

          C'est /proc/acpi/event, et je n'ai rien dans ce dossier.
          J'ai déjà configuré les toucher fn pour le volume, ça marche très bien.

          C'est sûr un eeepc 1005 avec archlinux.

          Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

          • [^] # Re: .

            Posté par (page perso) . Évalué à 1.

            je doute qu'on parle exactement de la même chose. Moi je te parle d'un endroit où un ensemble de scripts sont installé pour réagir à certains événements. J'imagine que ton fichier dans /proc joue un rôle, mais pas celui de stocker les scripts ;)
            • [^] # Re: .

              Posté par (page perso) . Évalué à 0.

              Je n'ai pas de dossier /etc/acpi/event en tout cas.

              Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

  • # chez toi ça juste marche ?

    Posté par . Évalué à 6.

    La seconde ligne n'inclut pas le rfkill unblock et rfkill block.

    Tu es sûr qu'en fait ta touche fn+f2 elle ne marcherait pas sans configuration du tout ?
  • # La solution la plus propre

    Posté par (page perso) . Évalué à 8.

    ...ajoute un "rm u" à la fin de la commande :-p
    • [^] # Re: La solution la plus propre

      Posté par . Évalué à 2.

      Non, le plus propre serait d'utiliser un fichier temporaire avec mktemp.

      Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

    • [^] # Re: La solution la plus propre

      Posté par (page perso) . Évalué à 2.

      Je viens de le faire, et ça marche toujours …

      awful.key({ }, "XF86WLAN", function() execute("u=$(mktemp uXXXX); if rfkill list | grep yes > /dev/null; then echo `date`>> $u; else echo 'uuu `date`'>> $u; fi; rm $u") end),

      Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

  • # Et sinon

    Posté par (page perso) . Évalué à 6.

    Si tu modprobe rfkill-input, ca marche pas tout seul ?
    Sur un kernel recent (2.6.31) ils l'ont mergé dans rfkill donc ca marche enfin tout seul
    • [^] # Re: Et sinon

      Posté par (page perso) . Évalué à 3.

      Ça doit être ça. J'ai rebooté et suite à une erreur dans mon xinitrc awesome ne s'est pas lancé. Pourtant le raccourcie fonctionne. J'en déduis que tu dois avoir raison.

      Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

  • # XF86WLAN

    Posté par . Évalué à 0.

    Peut-être que le simple fait d'associer XF86WLAN à fn + f2 a suffit?
    • [^] # Re: XF86WLAN

      Posté par (page perso) . Évalué à 1.

      XF86WLAN c'est le code que me renvoie xev quand je fais fn+f2, je n'ai rien associé du tout.

      Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

  • # lsof est ton ami

    Posté par (page perso) . Évalué à 1.

    Ca ressemble tout simplement à un fichier effacé mais toujours en cours d'utilisation. Regarde avec lsof.

    Ton gestionnaire de touche ne "libère" pas le fichier. Lorsque tu réécris dessus, l'ancien est effacé (mais toujours utilisé) et le nouveau est ajouté. C'est pourquoi tu avais 2 activations avec un seul appui sur la touche. Ensuite tu fais encore des modifs, mais tout tes anciens fichiers sont toujours actifs. Etc.
  • # Oui, parfois, même les voies de linux sont insondables

    Posté par . Évalué à 5.

    Pareil, au niveau bugs totalement incompréhensibles, j’en ai eu un joli il n’y a pas longtemps.

    Un ami m’appelle « je n’arrive pas à monter ma partition windows avec gnome »

    Il avais grosso-modo mis une entrée dans /etc/fstab avec l’option user (et noauto), pour monter sa partition avec ntfs-3g. J’arrive, je constate qu’effectivement nautilus me jette de manière fort impolie « vous n’avez pas la permission de lire /dev/sda2, vil faquin ».

    Je rentre dans un terminal, je tape mount /dev/sda2 (pas en root, toujours en utilisateur normal)… et ça fonctionne alors comme un charme.

    (Je passe les deux heures passées à trouver comment fait Nautilus pour monter cette partition. J’ai fini par trouver que Nautilus passait la demande à GFVS (la lib), qui la passait à gvfsd, qui utilisait mount)

    Après une demi-heure de grattage de neurone, pas la moindre idée. Je me dis alors : peut-être gvfsd passe-t-il en nobody au moment du montage. Je remplace /bin/mount par un script qui fait whoami >> /tmp/me avant d’appeler mount.real (l’ancien mount). $ mount /dev/sda2 fonctionne toujours. Nautilus fonctionne toujours pas. Et dans /tmp/me, le même nom d’utilisateur pour les deux commandes.

    Je recréé l’environnement à l’identique de celui qui fonctionne dans /bin/mount, toujours rien à faire. Je finis par jeter l’éponge et enlever ce noauto de /etc/fstab.

    Je dois avouer que ce bug continue tout de même à m’intriguer…

    (le grand classique aussi, oublier de recompiler avant de voir si un patch a corrigé le bug…)
    • [^] # Re: Oui, parfois, même les voies de linux sont insondables

      Posté par (page perso) . Évalué à 5.

      Gnome utilise pmount donc

      Important note for Debian: The permission to execute pmount is
      restricted to members of the system group plugdev. Please add all desk‐
      top users who shall be able to use pmount to this group by executing

      adduser user plugdev

      (as root).
      • [^] # Re: Oui, parfois, même les voies de linux sont insondables

        Posté par . Évalué à 1.

        pmount n’était même pas installé, donc ça devait pas être ça (parce que Gnome savait monter les clefs usb, par exemple).

        En même temps tu parles de debian là, ça doit être pour Gnome 1.0 :) (plus sérieusement, l’arrivée de GVFS a l’air d’avoir changé quelques trucs à ce niveau)
  • # Events

    Posté par . Évalué à 1.

    En lisant le début de ton journal, j'avais pensé à un mapping des touches en deux états :
    Appuyé, "Désappuyé".

    En gros, quand tu appuies sur le bouton, ca execute ton script, mais quand tu relaches ton doigt ca renvoi un event, donc relance le même script.

    Après, je pense pas que ton prob vient de là;
  • # ACPI

    Posté par (page perso) . Évalué à 1.

    Si j'ai bien compris ce qui t'arrive, je me suis rendu compte de la même chose ce matin sur Thinkpad X31 (Fn+F5) : sans script ni rien, la touche active et désactive le wifi, pas besoin de le gérer au niveau logiciel. Idem pour la suspension vers le disque ou la RAM.

    Oui ça fait un choc quand ça marche tout seul, mais c'est bien ça.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.