• [^] # Re: fnfx

    Posté par (site web personnel) . En réponse au message a quel code corresponds la combinaison Fn+Fx(1-12) ?. É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