Comment changer le mappage de la touche «PowerOff» du clavier?

15

J'ai acheté l'ordinateur portable ROG G551JM Asus qui s'est révélé compatible avec Ubuntu. Le clavier de l'ordinateur est mal conçu avec la touche "Poweroff" étant une touche ordinaire, placée à l'endroit où l'on trouve généralement la touche "End". L'ordinateur fonctionne bien sinon, je l'ai donc acheté en supposant que je serais en mesure de "résoudre" le problème, c'est-à-dire de remapper le bouton PowerOff dans la touche "Fin".

Le bouton PowerOff a mal tourné (ASUS G551JM): ASUS G551JM

Il y a normalement une touche «Fin» (ASUS N56VZ): ASUS N56VZ

Les événements de bouton « PowerOff » sont produits par le /dev/input/event2: Power Buttondispositif (comme rapporté par evtest) avec le code 116 ( par exemple à partir de la ligne evtest: Event: time 1422895638.246142, type 1 (EV_KEY), code 116 (KEY_POWER), value 1)

La clé est également visible pour le serveur X, et finalement Ubuntu peut identifier les touches comme une PowerOffclé et lance la boîte de dialogue semi-transparente "Au revoir Adam ..." qui confirme ma volonté de mettre l'ordinateur hors tension.

Le problème est que la liaison qui lie la pression sur la touche PowerOff avec la routine qui affiche cette boîte de dialogue de confirmation n'est pas visible sous dconf-editor et je n'ai aucune indication où la trouver.

Quelqu'un peut-il me dire où modifier (ou supprimer) la liaison par défaut pour la clé PowerOff ???

Ça devrait être quelque chose de facile.


modifier le 21.IX.2016:

Il existe un moyen de désactiver définitivement la boîte de dialogue, voir Comment modifier les options du bouton d'alimentation? . J'espère qu'après avoir désactivé le bouton d'alimentation, il serait possible de le réaffecter à autre chose.

Adam Ryczkowski
la source
Avez-vous résolu le problème? Il serait très utile de poster une réponse ici.
Ezze
1
@Ezze Pas vraiment (j'utilise un ordinateur différent à cause de ce problème). Mais j'ai réussi à désactiver définitivement la boîte de dialogue d'arrêt produite après avoir appuyé sur la touche. OK, je mettrai à jour la réponse.
Adam Ryczkowski
Question connexe sur Unix et Linux StackExchange.
Ezze
2
Je déteste tellement ASUS pour avoir retiré cette clé. Homeet Endsont les touches "meta" que j'utilise le plus ... :(
Matthieu

Réponses:

10

J'ai pu le faire fonctionner sur mon ASUS N751JK dans Ubuntu 18.04 LTS et Ubuntu 16.04 LTS (testé avec l'environnement de bureau Unity dans les deux cas et KDE Plasma en 18.04):

  1. Tout d'abord, réglez l'action du bouton "Power Off" sur nothing.

    Unité

    Comme mentionné dans la réponse de Johano Fierra :

    gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
    

    ou alternativement sudo apt install dconf-toolset utilisez dconf-editorpour changer la org.gnome.settings-daemon.plugins.powerpropriété (comme décrit ici ). Un redémarrage ou une déconnexion est nécessaire pour le faire fonctionner.

    KDE

    Allez dans "Paramètres système" , sélectionnez l' onglet "Gestion de l'alimentation" dans la section "Matériel" puis sélectionnez l' onglet "Économie d'énergie" , faites défiler vers le bas, recherchez la liste déroulante "Lorsque le bouton d'alimentation est enfoncé" et changez sa valeur en "Ne rien faire" . Cliquez sur le bouton "Appliquer" pour que les modifications prennent effet.

    Économie d'énergie

  2. Installez xdotool :

    sudo apt install xdotool
    

    Celui-ci nous permettra de déclencher des événements clés.

  3. L'étape suivante consiste à déclencher la touche «Fin» sur la touche «Éteindre» .

    Ubuntu 18.04

    Créez un /etc/acpi/events/powerfichier avec le contenu suivant:

    event=button/power
    action=/etc/acpi/power.sh "%e"
    

    et créer un /etc/acpi/power.shscript avec le contenu suivant:

    #!/bin/sh
    xdotool key End
    

    et y ajouter des autorisations d'exécution:

    sudo chmod +x /etc/acpi/power.sh
    

    Ubuntu 16.04

    Script ACPI de sauvegarde utilisé pour gérer l'événement du bouton "Power Off" :

    sudo cp /etc/acpi/powerbtn.sh /etc/acpi/powerbtn.sh.backup
    

    Ensuite, modifiez-le, recherchez les éléments suivants:

    # If logind is running, it already handles power button presses; desktop
    # environments put inhibitors to logind if they want to handle the key
    # themselves.
    

    et modifiez le code ci-dessous pour qu'il ressemble à ceci:

    if pidof systemd-logind >/dev/null; then
        xdotool key End
        exit 0
    fi
    
  4. Pour appliquer ces modifications, il faut exécuter:

    sudo acpid restart
    

    Grâce à Adam, il est possible de redémarrer acpidautomatiquement lorsqu'un utilisateur se connecte (au démarrage du système). Donc au lieu de manuel sudo acpid restartdans le terminal à chaque fois après le redémarrage, ajoutez la ligne suivante:

    session optional    pam_exec.so /usr/sbin/acpid restart
    

    à la fin du /etc/pam.d/common-sessionfichier.

Ezze
la source
Et au sudo acpid reloadlieu de redémarrer? Cela fonctionnerait-il?
Byte Commander
1
Ce qui résout le acpid restartproblème, c'est d'ajouter une ligne session optional pam_exec.so /usr/sbin/acpid restartà la fin de /etc/pam.d/common-session. De cette façon, l'acpid sera redémarré juste après la connexion de l'utilisateur et cela me suffit. Le problème est enfin résolu !!
Adam Ryczkowski
1
@rtindru, vous devriez gsettings setau lieu de gsettings get.
Ezze
1
Pour que cela fonctionne dans Kubuntu 18.04, j'ai dû donner des autorisations d'exécution à power.sh: sudo chmod +x /etc/acpi/power.sh@Ezze, vous pourriez peut-être mettre à jour votre réponse pour l'inclure.
LGenzelis
1
@LGenzelis, merci. Mis à jour la réponse.
Ezze
4

Cela devrait faire l'affaire.

Entrez dans le terminal:

gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
Johano Fierra
la source
2
OUI!!! Mais il y a autre chose: comment le mapper dans la touche «fin»?
Adam Ryczkowski
1
Entrer ici en territoire inconnu, mais je pense que vous pouvez simplement créer une configuration de fichier xmodmap ($ {HOME} /. Xmodmap) puis y mettre: keycode 116 = End , ou entrez dans le terminal: xmodmap -e "keycode 116 = End "
Johano Fierra
Malheureusement, cela n'aide pas. Il désactive la capture du bouton "Power off" tel qu'il est vu par la xevcommande et empêche xmodmapde le remapper. Et en passant, le code de touche du bouton "Éteindre" peut être différent (124 pour mon ASUS N751JK).
Ezze
Il ne devrait pas désactiver la possibilité de capturer le bouton ... mais que diriez-vous de cela. Entrez dans le terminal: gsettings set org.gnome.settings-daemon.plugins.power button-power "shutdown"(si vous appuyez sur le bouton est capturé), puis modifiez /etc/acpi/events/powerbtnet commentez la ligne #action=/etc/acpi/powerbtn.sh, puis entrez dans le terminal: xmodmap -e "keycode 124 = End"cela devrait empêcher le bouton d'alimentation de faire quoi que ce soit et en même temps le mapper à la touche Fin.
Johano Fierra
1
Cela n'aide pas trop car l'événement "Power off" est géré non seulement par le powerbtn.shscript mais aussi par (au moins) le systemd-logindservice (probablement, il utilise le button-powerparamètre que vous avez mentionné dans votre réponse). Vous pouvez trouver if pidof systemd-logind >/dev/null; then... exit 0ligne dans powerbtn.shlaquelle signifie que le script permet systemd-logindde gérer lui-même l'événement "Power off" lorsque la session de bureau est active. Une chose que vous avez raison - la modification de la button-powervaleur n'affecte pas la capacité de capturer la clé mais elle est déjà capturée par un processus ( systemd-logindou autre).
Ezze