Forum Linux.gentoo a quel code corresponds la combinaison Fn+Fx(1-12) ?

Posté par  .
Étiquettes : aucune
0
23
oct.
2006
bonjour,

je voudrais créer un raccourci afin de régler le contraste sous ma gentoo 2006-1en utilisant les touches Fn+F9 et Fn+F10 mais lorsque j'essai de voir à quel code ascii ou hexa corresponds la touche Fn cela ne m'affiche rien (xev ou showkey -s).

ce qui est certain c'est que les fonctionne comme la luminosité le son et la mise en veille fonctionne nativement.

quelqu'un sait comment je dois procéder pour cela ?

merci
  • # .

    Posté par  . Évalué à 1.

    Est-ce que tu vois quelque chose dans le résultat de la commande "dmesg" du genre "unknown key [...]" après avoir testé ? Si oui, il faut mapper le keycode vers un évènement X avec xmodmap il me semble.

    Pour plus d'infos : http://gentoo-wiki.com/HOWTO_Use_Multimedia_Keys
    • [^] # Re: .

      Posté par  . Évalué à 1.

      j'ai fais ce test et vérifié dmesg mais rien n'est affiché.

      Si je tape la combinaison Fn+Fx rien n'apparait par contre si je tape uniquement Fx(1-12) alors j'ai un keycode remonté.

      pour info j'ai un laptop Gericom Xcellent Blockbuster 7000.
      J'ai un peu cherché mas rien trouvé.

      merci encore
      • [^] # Re: .

        Posté par  . Évalué à 1.

        Si je regarde par exemple la touche "c" de mon clavier, il est possible de la combiner avec Shift, Alt Gr, Alt Gr+Shift...

        "xmodmap -pke" donne ça chez moi (ordinateur fixe sans touche Fn) :

        [...]
        keycode 54 = c C cent copyright cent copyright
        [...]

        La touche "c" et ses combinaisons peut donner un c minuscule, un c majuscule, le symbole copyright, etc. Les combinaisons de la touche "c" avec des modificateurs comme Shift n'ont pas un keycode différent de la touche "c" pressée seule. Tu devrais donc chercher en quelle position dans xmodmap apparaît la combinaison d'une touche avec Fn et l'ajouter sur la ligne du Fx qui t'intéresse.

        Hope this helps...

        --
        http://www.tessier-net.org
        • [^] # Re: .

          Posté par  . Évalué à 1.

          en faisant xmodmap -pke je n'ai aucun keycode associé avec la touche Fn.
          • [^] # Re: .

            Posté par  . Évalué à 2.

            Pas la touche Fn, c'est un modificateur. Il faut chercher la touche Fx (x entre 1 et 12) qui t'intéresse. Et c'est probablement sur cette ligne qu'il faut mettre ce que fait la touche Fx quand elle est combinée avec Fn.

            keycode 67 = F1 XF86_Switch_VT_1

            Par exemple, ma touche F1 seule envoie le keysym F1 et si elle est combinée avec Ctrl+Alt, elle me fait switcher vers la console 1.

            --
            http://www.tessier-net.org
            • [^] # Re: .

              Posté par  . Évalué à 2.

              Il n'y a pas forcément de keycode mais il y a toujours un scancode, et la touche Fn, n'étant pas partie intégrante des claviers standard, je ne suis pas sûr qu'elle soit gérée de la même façon que les touches modificatrices habituelles (voir mon post un peu plus bas).
  • # fnfx

    Posté par  . Évalué à 2.

    Essaye fnfx :
    http://fnfx.sf.net ou lineakd

    C'est sans garantie sur le résultat.

    Bon courage
    • [^] # Re: fnfx

      Posté par  . Évalué à 1.

      j'ai installé lineakd mais il me demande le type de laptop je possede. que faire quand le mien n'est pas dans la liste? y a t il un laptop generique ?

      merci d'avance
      • [^] # Re: fnfx

        Posté par  . Évalué à 2.

        C'est bien le problème. Pour autant que je sache, "Fn" n'est absolument pas une touche standard d'un clavier PC. C'est une fonctionnalité qui, je crois, a été ajouté par un fabricant d'ordinateurs portables et qui a été reprise par les autres. D'ailleurs, à y réfléchir, quelqu'un peut-il nous dire si oui ou non cette touche fait partie des recommandations PC annuelles ?

        En conséquence, il y a de fortes chances pour cette touche soit en fait propriétaire et spécifique à chaque constructeur, ce qui implique l'utilisation d'un pilote pour la gérer.

        Avec le temps, il est possible que X11 finissent par la prendre en charge directement, mais cela m'étonnerait que ce soit déjà fait.
        • [^] # Re: fnfx

          Posté par  (site web personnel) . Évalué à 4.

          En fait je pense qu'il faut clarifier les choses ;)

          Le noyau lis sur le port ps/2 ou usb sur lequel le clavier envoie ses codes keymap
          (en fait sur un portable c'est la même chose, c'est juste que la prise est shuntée)

          Donc ton driver noyau atkbd va lire les code numérique sur le port en question.

          Donc tu a peu de solutions :
          - le noyau reçois un code inconnu, il ne sait rien en faire il t'avertis:
          dmesg | grep atkbd.c dois te donner ce genre de chose :
          atkbd.c: Use 'setkeycodes e057 ' to make it known.
          atkbd.c: Unknown key pressed (translated set 2, code 0xd7 on isa0060/serio0).
          - le noyau connais la touche il affiche rien du tout, mais la touche n'est pas mappée, a ce moment là en lançant xev tu va voir que la touche n'est pas mappée a une fonction :
          KeyRelease event, serial 32, synthetic NO, window 0x800001,
          root 0x169, subw 0x800002, time 1968542459, (43,28), root:(46,754),
          state 0x10, keycode 234 (keysym 0x0, NoSymbol), same_screen YES,
          XLookupString gives 0 bytes:
          XFilterEvent returns: False
          - le noyau connais la touche, tu a assigné la touche a coup de xmodmap ou xkb, tu auras alors ça :
          KeyRelease event, serial 28, synthetic NO, window 0x800001,
          root 0x169, subw 0x800002, time 1968632457, (29,24), root:(32,750),
          state 0x10, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES,
          XLookupString gives 0 bytes:
          XFilterEvent returns: False


          Bon j'ai pas utilisé la même touche a chaque fois !

          Pour générer ton fichier de conf xkb tu peux faire ceci :
          // keymap perso
          xkb_keymap {
          xkb_keycodes { include "xfree86+aliases(azerty)" };
          xkb_types { include "complete" };
          xkb_compat { include "complete" };
          xkb_symbols {
          include "pc(pc105)+fr+compose(rwin)"
          // add insert when pressing Alt Gr+Suppr
          key {
          [ Delete, Delete, Insert ]
          };
          // add left Win key
          key {
          [ F13, Super_L ]
          };
          };
          xkb_geometry { include "pc(pc105)" };
          };

          Le plus simple est de copier ce genre de chose dans ton ~/.xkbmap.xkb, puis d'ajouter ce script dans /etc/X11/xinit.d/90fixkeyboard
          #! /bin/sh
          # Compile la map si on a un fichier dispo
          if [ -f $HOME/.xkbmap.xkb ]; then
          # do not take care of unset keys
          xkbcomp $HOME/.xkbmap.xkb $HOME/.xkbmap.xkm 2>/dev/null;
          fi
          # Affecte la map compilée au display courrant
          if [ -f $HOME/.xkbmap.xkm ]; then
          xkbcomp $HOME/.xkbmap.xkm $DISPLAY;
          fi

          Sinon avec un ~/.xmodmap :
          keycode 22 = BackSpace
          keycode 115 = F13
          keycode 117 = Menu

          Et un script identique, mais qui fait :
          if [ -f $HOME/.xmodmap ]; then
          xmodmap $HOME/.xmodmap;
          fi

          ps : ta distribution a peut-être déjà le script qui va bien pour xmodmap, mais il y a peu de chance que ça marche pour xkb (tout nouveau système pour xorg 7.x)

          ps2 : xmodmap et xkb sont légèrement incompatible entre eux (en gros ça va chier si tu met les deux ;), et xkb a nettement plus d'option que xmodmap
          (tu peux régler tous les modificateurs pour une touche Maj, Alt, Alt Gr, Maj+Alt, etc...

          Pour un article assez complet sur la chose vois ce journal (mais il manque encore des truc dedans, mais je me suis basé dessus :
          http://linuxfr.org/~mildred/22731.html
          • [^] # Re: fnfx

            Posté par  . Évalué à 2.

            Effectivement, clarifions :

            Le noyau lit sur le port ps/2 ou usb sur lequel le clavier envoie ses codes keymap (en fait sur un portable c'est la même chose, c'est juste que la prise est shuntée)


            C'est ce postulat de base qui me dérange. Tout ce qui suit en découle directement, du reste. Je pense que le clavier d'un portable est géré par un hardware propriétaire (puisqu'il est directement accessible, et non pas délocalisé et visible uniquement au travers du port PS/2 et du câble qui y est relié) et qu'à ce titre, la touche « Fn » qui, jusqu'à indication contraire, ne fait pas partie des spécifications PC standard et que l'on ne trouve pas sur un clavier autonome, n'est pas associée à un scancode donné.

            Des tests effectués avec mon Toshiba 2410 montrent que ni xev, ni showkey -k, ni showkey -s (en mode console pour les deux derniers) ne renvoient d'événement pour un appui sur « Fn ». Par contre, j'en reçois quand je la combine avec certaines touches seulement, à savoir les modificateurs (Alt, Shift, etc) et les touches auxquelles une fonction spéciale Fn est associée, et seulement si cette fonction consiste à renvoyer un caractère comme, par exemple, le mappage du pavé numérique. Et même dans ce cas précis, je reçois alors le scancode de la touche sur laquelle j'ai appuyé, pas celle du pavé auquel elle est censée appartenir. Et dans tous les cas, aucune mention de la touche « Fn » elle-même.

            Chose curieuse, l'utilisation de « Fn » prime sur tout le reste, commande showkey comprise, pour ce qui est de changer le périf vidéo de sortie, parce que c'est critique. Par contre, tout ce qui est réglage de luminosité, etc. est géré en userland, donc jamais par défaut sous Linux.

            Autre chose intéressante : « Fn » utilisée avec les touches F10 ou F11 permet de simuler le Num Lock. Pas de scancode pour cette touche, donc, mais deux LED distinctes et mutuellement exclusives. D'autre part, chaque LED fonctionne en mode bascule, en passant du mode normalement allumé au mode normalement éteint et réciproquement sur sollicitation répetée des combinaisons « Fn + F10 » ou « Fn + F11 ». En temps normal, cela fonctionne très bien (et je ne crois pas que ce cas de figure précis soit pris en charge par Linux), mais sous une session showkey, la touche « Fn » fait bien réagir la LED, mais le mode ne change pas, car visiblement le code des touches F10 ou F11 est intercepté, mais pas celui de Fn.

            Il fut d'ailleurs un temps où un « cat /proc/toshiba » renvoyait notamment un champ dont l'un des bits nous renseignait sur l'état de Fn, lorsque le module « toshiba » était bien chargé (je dis « il fut un temps » car mon dernier test ne fonctionne plus).

            Donc, ce n'est pas simple, et c'est probablement spécifique à chaque constructeur.
            • [^] # Re: fnfx

              Posté par  (site web personnel) . Évalué à 2.

              Je pense que la touche fn est une touche hardware au clavier et qu'elle n'est pas envoyé au SE.
              Donc globalement elle ne marche que avec les touches dont elle est prévus.
              Le mappage avec une touche non prévus n'étant pas inscrit dans le circuit imprimé du clavier, elle ne renverra jamais rien.

              Enfin ce n'est qu'une supposition mais ca ne me parrait pas illogique.
              • [^] # Re: fnfx

                Posté par  . Évalué à 2.

                En substance, c'est bien l'esprit, mais tu confonds tout de même plusieurs choses. Au niveau du hardware, la touche doit fonctionner exactement comme les autres, il n'y a pas de raison pour qu'elle soit accompagnée d'une piste parallèle sur la platine du clavier et faisant le tour des touches associées.

                Par contre, il est plus que probable qu'elle ne soit pas transcrite dans le protocole PS/2, mais seulement accessible au travers d'un port I/O proprio.

Suivre le flux des commentaires

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