18 votes

Est-ce que je peux remapper la touche Verr. Maj. pour lire de l'audio ?

Je cherche à réutiliser la touche Caps lock inutile pour quelque chose de utile sur MATE 16.04. Je suis tombé sur

setxkbmap -option ctrl:nocaps

pour la désactiver, mais pourrait-elle être remappée pour lire/pause VLC par exemple? Merci pour vos réponses!

11voto

Sebastian Stark Points 5932

Evtest et dbus

Voici une version impliquant l'exécution d'un petit script en arrière-plan. Quelques étapes faciles doivent être suivies :

  • Installer le programme evtest : sudo apt install evtest. Ce programme est capable de décoder et d'imprimer les événements bruts de la hiérarchie des périphériques /dev/input/.

  • Ajoutez votre compte utilisateur au groupe input. Déconnectez-vous, puis reconnectez-vous. (Cela est nécessaire car nous allons lire à partir de certains périphériques situés sous /dev/input/, ce qui normalement ne peut être fait que par root ou des utilisateurs du groupe input. Nous pourrions exécuter le script en tant que root, mais nous devrions alors trouver un moyen de lui indiquer à quel utilisateur dbus il doit parler.)

  • Désactivez la touche caps lock comme vous l'avez fait ou utilisez la préférence Mate correspondante. Cela fonctionnerait également si vous mappiez la touche caps lock sur ctrl, comme le font beaucoup de gens.

  • Enregistrez le script suivant quelque part, par exemple $HOME/bin/capshack et rendez-le exécutable :

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done

Le script ci-dessus écoutera vos événements de clavier et exécutera une commande lorsque la touche caps lock est pressée. La commande exécutée utilise dbus pour envoyer un événement de lecture/pause à une instance VLC en cours d'exécution. Vous devrez peut-être ajuster la variable KEYBOARD pour pointer vers votre clavier réel, mais il est probable que la valeur ci-dessus fonctionnera.

Si vous préférez que la fonction toggleVLC() soit appelée lorsque vous relâchez la touche caps lock, vous pouvez modifier la variable EVENT dans le script afin qu'elle se termine par value 0 au lieu de value 1.

Il est également possible que le code-clé de la touche caps lock soit différent de 58 pour vous. Vous pouvez vérifier cela en exécutant evtest, regardez la sortie lorsque vous appuyez sur caps lock, et ajustez en conséquence la variable EVENT. Vous n'avez même pas besoin de faire correspondre par le code-clé et définissez EVENT simplement sur (KEY_CAPSLOCK), value 1.

Au lieu d'utiliser evtest et le script ci-dessus, vous pourriez utiliser thd du package triggerhappy (quelque chose comme thd --dump /dev/input/* donnerait une sortie similaire) mais j'ai trouvé cela un peu moins éducatif.

Maintenant nous créons une unité systemd utilisateur pour démarrer le script automatiquement en arrière-plan :

  • Créez la hiérarchie systemd utilisateur : mkdir -p $HOME/.config/systemd/user

  • Ajoutez le texte suivant au fichier $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abus de la touche caps lock
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
  • Activez l'unité de service que vous venez de créer : systemctl --user enable capshack

  • Démarrez le service : systemctl --user start capshack

Désormais, vous devriez pouvoir basculer la lecture/pause dans VLC en utilisant la touche caps lock. Le script en arrière-plan devrait démarrer automatiquement lorsque vous vous connectez.

triggerhappy

Comme mentionné précédemment, vous pourriez également utiliser le package triggerhappy pour cela. C'est la méthode préférée pour les personnes qui veulent moins bidouiller avec le système et préfèrent une solution plus solide.

  • Ajoutez l'utilisateur au groupe input comme ci-dessus

  • Installez le package : sudo apt install triggerhappy

  • Ajoutez une configuration pour triggerhappy dans ~/.config/thd/capslock.conf :

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
  • Exécutez thd comme ceci : thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Faites en sorte que thd s'exécute pour votre utilisateur de manière similaire à ce qui a été décrit pour capshack précédemment.

  • Assurez-vous de n'avoir qu'une des méthodes mentionnées (capshack ou thd) en cours d'exécution, pour ne pas basculer deux fois à chaque pression de touche.

J'ai testé tout cela sur 18.04 sous la session standard et 16.04 mate. Mais cela devrait théoriquement fonctionner également sous wayland ou avec d'autres environnements de bureau.

8voto

WinEunuuchs2Unix Points 91128

Sur Ubuntu 16.04 après avoir passé des heures à chercher sur Google et à bidouiller avec dconf-editor et xbindkeys, j'ai trouvé une solution extrêmement facile :

  • Configuration très rapide en 2 minutes
  • Seul xdotool doit être installé
  • Aucun script nécessaire
  • La touche Caps Lock est toujours reconnue mais ne bascule pas entre majuscules et minuscules
  • Fonctionne avec les paramètres de raccourcis clavier personnalisés standard d'Ubuntu

Si vous avez besoin du support de Gnome XF86AudioPlay, vous avez besoin de xdotool (non nécessaire pour VLC comme l'indique l'auteur du sujet) :

sudo apt install xdotool

Voici maintenant la partie délicate. Chaque fois que vous appuyez sur la touche Caps LocK pour basculer entre Lecture et Pause de la musique, les lettres majuscules basculent également.

Utilisez cette méthode pour désactiver le basculement de la touche Caps Lock tout en maintenant la touche active :

setxkbmap -option caps:none

Lecteurs de musique qui respectent Gnome

Ensuite, sur Ubuntu 16.04, allez dans Paramètres >> Clavier >> Raccourcis >> Raccourcis personnalisés :

raccourci pour la pause et lecture audio.png

  • Définissez le nom sur Lecture audio
  • Définissez la commande sur xdotool key XF86AudioPlay
  • Puis cliquez sur le bouton Appliquer

Après avoir ajouté la nouvelle option, le raccourci clavier attribué affichera Désactivé. Cliquez sur Désactivé et lorsque vous serez invité à attribuer une touche, appuyez sur la touche Caps LocK.


Lecteurs de musique comme VLC

Suivez les étapes pour Gnome dans la section précédente mais utilisez ceci pour la commande à la place :

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

VLC ne reconnaîtra pas les touches multimédias : Comment faire fonctionner les touches multimédias du clavier avec VLC de manière globale ? même lorsqu'elles sont intégrées au clavier. Par conséquent, le raccourci clavier personnalisé vers XF86AudioPlay est inutile avec xdotool.


Définition de raccourcis clavier personnalisés depuis la ligne de commande

Cette question-réponse explique comment définir des raccourcis clavier personnalisés depuis la ligne de commande : Comment définir des raccourcis clavier personnalisés depuis le terminal ?


Désactivation permanente de la touche Caps Lock

La prochaine étape consiste à rendre cette commande setxkbmap -option caps:none persistante à travers les redémarrages. Une recherche sur Google donne cette réponse de Terdon : Enregistrer les paramètres de setxkbdmap :

Une méthode simple consiste à ajouter la commande à votre fichier $HOME/.profile (vous pouvez le créer s'il n'existe pas) :

setxkbmap -option caps:none

Cela devrait la faire fonctionner à chaque fois que vous vous connectez.

Notez que vous devriez utiliser $HOME/.profile plutôt que $HOME/.bash_profile, $HOME/.bashrc ou un autre fichier similaire. Cela est dû au fait que ce paramètre devrait être lu par votre gestionnaire de connexion.

3voto

Nonny Moose Points 2011

Cette réponse a été testée sur Ubuntu MATE 16.04.4 LTS dans une machine virtuelle (mais le clavier était un clavier USB en mode passe-through, donc cela ne devrait pas faire de différence). Elle ne nécessite aucun logiciel supplémentaire et peut être effectuée sur une installation de base sans installer aucun paquet, et elle est persistante entre les redémarrages.

Remapper Caps Lock

  1. Modifier le fichier /usr/share/X11/xkb/symbols/pc en tant que root. Faites attention à ne pas faire d'erreur ici (comme oublier la virgule) car vous pourriez ne plus pouvoir utiliser votre clavier si vous le faites. (Devinez ce que j'ai appris à mes dépens ? ;)

  2. Commentez la ligne

        key  {    [ Caps_Lock     ]   };

    en plaçant deux barres obliques (//) au début.

  3. Ajoutez ensuite la ligne suivante en dessous :

        key  {    [ XF86AudioPlay, XF86AudioPause ]   };
  4. Commentez la ligne

        modifier_map Lock   { Caps_Lock };

    de la même manière que ci-dessus.

  5. Redémarrez.

Note : (crédit à danzel pour avoir souligné ceci) Les mises à jour du paquet xkb-data peuvent écraser ce fichier. Une méthode raisonnablement sûre pour éviter cela est de détourner le chemin en utilisant dpkg-divert. (Je dis "raisonnablement sûr" car la source amont de ce fichier n'a pas été modifiée depuis trois ans.)

Méthode alternative

Désactivez manuellement votre touche Caps Lock dans les paramètres de disposition de votre clavier, puis utilisez l'approche dans cette réponse pour ajouter vos propres remappages de touches.

Problèmes ?

Votre touche de verrouillage des majuscules ne verrouille plus les majuscules et a été remappée en Play/Pause à ce stade. Vous devriez maintenant pouvoir lire et mettre en pause la musique dans VLC. Si cela fonctionne à ce stade, vous pouvez sauter le reste de ces instructions.

Cependant, lorsque j'ai essayé, VLC ne répondait pas à la touche Play/Pause.

Vérifiez que le raccourci clavier est bien configuré

  1. Ouvrez les raccourcis clavier (Préférences Système Matériel Raccourcis clavier)

  2. Assurez-vous que "Lecture (ou Lecture/Pause)" est réglé sur "XF86AudioPlay"

  3. S'il ne l'est pas, cliquez sur la section "Raccourci" et appuyez sur votre nouvelle touche Lecture/Pause pour définir le raccourci. capture d'écran utile

  4. Si cela ne fonctionne toujours pas, redémarrez quelques fois par précaution. (C'est en fait ce qui l'a réglé pour moi.)

2voto

buckbova Points 1020

Installez xbindkeys, xcape et playerctl. Assurez-vous que xcape (qui mappe CapsLock sur une touche de rechange comme Alt+F12 avec xcape -e 'Caps_Lock=Alt_L|F12) et playerctl sont lancés automatiquement au démarrage, et ajoutez au fichier ~/.xbindkeysrc les deux lignes

"playerctl play-pause"
  Alt + F12

0voto

danzel Points 5094

Faites de votre touche verrouillage majuscule une touche lecture/pause

Cette solution va remapper le scancode de votre touche verrouillage majuscule vers un autre code de touche dans le pilote d'entrée du noyau, dans ce cas lecture/pause.

Avantages

  • Pas besoin de modifier les fichiers système existants (seul un nouveau fichier doit être créé)
  • Les applications ne sauront pas qu'il s'agit en réalité d'une touche verrouillage majuscule mais penseront qu'une vraie touche lecture/pause a été pressée
  • Pas besoin de désactiver la touche verrouillage majuscule, aucune possibilité de perturber la configuration xkb

Inconvénients

  • Doit être fait pour chaque clavier individuellement (ce qui, selon la situation, peut aussi être un avantage)

Prérequis

  • evtest (peut être installé via sudo apt-get install evtest)

Procédure

Dans un terminal, exécutez sudo evtest et sélectionnez votre clavier. S'il n'y a pas de sortie lorsque vous appuyez sur une touche, appuyez sur Ctrl+C et essayez un autre périphérique. Souvenez-vous du numéro d'événement du périphérique que vous avez sélectionné, nous en aurons besoin par la suite. Appuyez sur la touche verrouillage majuscule. Quelques lignes comme celles-ci apparaîtront:

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

Nous avons besoin de la valeur de la ligne MSC_SCAN précédant la ligne KEY_CAPSLOCK. Dans l'exemple ci-dessus, il s'agirait de 70039, mais le code scancode sur votre clavier est probablement différent.

Exécutez maintenant la commande suivante, en remplaçant le X par le numéro d'événement du périphérique que vous avez utilisé pour la commande evtest:

grep "" /sys/class/input/eventX/device/id/*

...cela affichera le bustype, product, vendor et version du clavier.

Créez un fichier nommé 65-keyboard-custom.hwdb dans /etc/udev/hwdb.d/ (autorisations root requises) avec le contenu suivant:

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...où

  • [bus], [vendor], [product] et [version] ont exactement 4 caractères et les lettres doivent être en majuscules
  • [scancode] doit être en minuscules
  • la ligne evdev:... n'a pas d'espace précédent
  • la ligne KEYBOARD_KEY... a exactement un espace précédent

Par exemple:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Enfin, compilez la nouvelle configuration dans la base de données matérielle:

sudo systemd-hwdb update

Si vous souhaitez appliquer les modifications immédiatement, informez udev:

sudo udevadm trigger

Si vous souhaitez rétablir les modifications, supprimez simplement le fichier que vous avez créé et redémarrez.

Vous pouvez trouver des informations plus détaillées dans ma réponse originale sur ce sujet.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X