Puis-je remapper la touche de locking majuscule pour lire de l’audio?

J’essaie de réutiliser la clé de locking majuscule inutile pour quelque chose d’utile sur 16.04 MATE. J’ai croisé

setxkbmap -option ctrl:nocaps 

pour le désactiver, mais pourrait-il être remappé pour lire / mettre en pause VLC par exemple? Merci pour vos réponses!

evtest et dbus

Voici une version impliquant un petit script exécuté en arrière-plan. Quelques étapes faciles doivent être sockets:

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

  • Ajoutez votre compte d’utilisateur à l’ input du groupe. Déconnectez-vous et connectez-vous à nouveau. (Cela est nécessaire parce que nous allons lire un périphérique sous /dev/input/ , ce qui ne peut normalement être fait que par la racine ou par les utilisateurs en input groupe. Nous pourrions exécuter le script en tant que root, mais nous devrions alors trouver un manière de lui dire à quelle instance dbus l’utilisateur doit parler.)

  • Désactivez la touche Verrouillage comme vous l’avez fait ou utilisez la préférence de partenaire correspondante. Cela fonctionnerait également si vous mappiez la touche majuscule 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 écoute vos événements au clavier et exécute une commande lorsque vous appuyez sur la touche de locking. La commande exécutée utilise dbus pour envoyer un événement play / pause à une instance VLC en cours d’exécution. Vous devrez peut-être modifier la variable KEYBOARD pour qu’elle pointe sur votre clavier actuel, 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 Capslock, vous pouvez modifier la variable EVENT dans le script afin qu’elle se termine par la value 0 au lieu de la value 1 .

En outre, il est possible que le code clé de la touche de locking majuscule soit différent de 58. Vous pouvez le vérifier en exécutant evtest , consultez le résultat lorsque vous appuyez sur capslock et ajustez la variable EVENT en conséquence. Vous n’avez même pas besoin de faire correspondre le code clé et de définir simplement EVENT sur (KEY_CAPSLOCK), value 1 .

Au lieu d’utiliser evtest et le script ci-dessus, vous pouvez utiliser thd depuis le paquet sortingggerhappy (quelque chose comme thd --dump /dev/input/* donnerait un résultat similaire), mais j’ai trouvé cela un peu moins pédagogique.

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=Abuse capslock key [Service] ExecStart=%h/bin/capshack [Install] WantedBy=default.target 
  • Activez l’unité de service que vous venez de systemctl --user enable capshack : systemctl --user enable capshack

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

À partir de maintenant, vous devriez pouvoir basculer la lecture / la pause dans VLC à l’aide de la touche Capslock. Le script en arrière-plan doit être lancé automatiquement lorsque vous vous connectez.

déclencheur heureux

Comme mentionné précédemment, vous pouvez également utiliser le package sortingggerhappy pour le faire. Cette méthode est recommandée par les personnes qui souhaitent moins manipuler le système, mais plutôt une solution plus solide.

  • Ajouter un utilisateur au groupe de input comme ci-dessus

  • Installez le paquet: sudo apt install sortingggerhappy

  • Ajoutez une configuration pour sortingggerhappy à ~/.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 --sortingggers ~/.config/thd/capslock.conf /dev/input/event*

  • Faites-le courir pour votre utilisateur de la même manière que décrit précédemment pour capshack.

  • Assurez-vous que vous n’avez qu’une des méthodes mentionnées (capshack ou thd) en cours d’exécution, pour ne pas basculer deux fois sur chaque touche.

J’ai testé tout cela le 18.04 sous la session standard et le 16.04 mat. Mais, théoriquement, il devrait également fonctionner sous wayland ou avec d’autres environnements de bureau.

Dans Ubuntu 16.04, après avoir passé des heures à googler et à sortingpoter dconf-editor et xbindkeys j’ai trouvé une solution extrêmement simple:

  • Installation très rapide en 2 minutes
  • Seul xdotool doit être installé
  • Aucun script nécessaire
  • Le locking des majuscules est toujours reconnu mais ne bascule pas la casse des lettres
  • Fonctionne avec les parameters de raccourci personnalisés du clavier Ubuntu standard

Si vous avez besoin de la XF86AudioPlay charge de Gnome XF86AudioPlay vous avez besoin de xdotool (inutile pour VLC, comme le stipule l’OP):

 sudo apt install xdotool 

Maintenant, voici la partie la plus délicate. Chaque fois que vous appuyez sur la touche Caps LocK pour basculer la musique entre Lecture et Pause, les lettres majuscules sont également activées et désactivées.

Utilisez cette méthode pour désactiver le locking majuscule tout en maintenant la clé active:

 setxkbmap -option caps:none 

Les lecteurs de musique qui adhèrent à Gnome

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

audio pause-play shortcut.png

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

Après avoir ajouté la nouvelle option, la touche de raccourci atsortingbuée sera lue Désactivée . Cliquez sur Désactivé et lorsque vous êtes invité à atsortingbuer la clé, appuyez sur la touche Caps LocK .


Les lecteurs de musique comme VLC

Suivez les étapes de Gnome dans la section précédente, mais utilisez plutôt la commande suivante:

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

VLC ne reconnaît pas les touches multimédias: Comment faire en sorte que les touches multimédias du clavier fonctionnent avec VLC de manière globale? même intégré au clavier. Par conséquent, le raccourci clavier personnalisé vers XF86AudioPlay est inutile avec xdotool .


Définition de raccourcis clavier personnalisés à partir de la ligne de commande

Cette Q & A explique comment définir des raccourcis clavier personnalisés à partir de la ligne de commande: Comment définir des raccourcis clavier personnalisés à partir du terminal?


Désactiver les majuscules de façon permanente

La prochaine étape consiste à setxkbmap -option caps:none persistante lors des redémarrages. Cette réponse de Terdon aboutit à une recherche sur Google: enregistrez les parameters setxkbdmap :

Une solution simple consiste à append la commande à votre fichier $HOME/.profile (vous pouvez la créer si elle n’existe pas):

 setxkbmap -option caps:none 

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

Notez que vous devez utiliser $HOME/.profile plutôt que $HOME/.bash_profile , $HOME/.bashrc ou un autre fichier similaire. En effet, ce paramètre doit être lu par votre gestionnaire de connexion.

Cette réponse a été testée sur Ubuntu MATE 16.04.4 LTS dans une VM (mais le clavier était un clavier USB transparent, donc cela ne devrait pas faire de différence). De plus, il ne nécessite aucun logiciel supplémentaire et peut être effectué sur une installation vanilla sans installer de paquet. Il est persistant entre les démarrages.

Remapper le locking des majuscules

  1. Editez le fichier /usr/share/X11/xkb/symbols/pc tant que root. Veillez à ne pas vous tromper ici (par exemple, en oubliant la virgule), car vous risqueriez de ne plus pouvoir utiliser votre clavier si vous le faites. (Devinez ce que j’ai appris à la dure?;)

  2. Commentez la ligne

      key  { [ Caps_Lock ] }; 

    en plaçant deux barres obliques ( // ) au début de celle-ci.

  3. Ajoutez en dessous la ligne suivante:

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

      modifier_map Lock { Caps_Lock }; 

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

  5. Redémarrer.

Remarque: (crédit à danzel pour l’avoir signalé) Les mises à jour du paquet xkb-data peuvent écraser ce fichier. Une méthode raisonnablement sûre pour éviter cela consiste à détourner le chemin à l’aide de dpkg-divert . (Je dis “raisonnablement en sécurité” car la source amont de ce fichier n’a pas été modifiée depuis trois ans.)

Méthode alternative

Désactivez manuellement votre touche de locking des majuscules dans les parameters de disposition de votre clavier, puis utilisez l’approche de cette réponse pour append vos propres remappages de touches.

Problèmes?

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

Cependant, lorsque j’ai essayé, VLC n’a pas répondu à la touche Play / Pause.

Assurez-vous que le raccourci clavier est défini correctement

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

  2. Assurez-vous que “Play (ou Play / Pause)” est réglé sur “XF86AudioPlay”

  3. Si ce n’est pas le cas, 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 plusieurs fois pour faire bonne mesure. (C’est en fait ce que ça a réglé pour moi.)

Installez xbindkeys , xcape et playerctl . Assurez-vous que xcape (mappant CapsLock sur une clé de secours telle que Alt+F12 de xcape -e 'Caps_Lock=Alt_L|F12 ) et playerctl sont automatiquement playerctl lors de la connexion et ajoutez au fichier ~/.xbindkeysrc les deux lignes.

 "playerctl play-pause" Alt + F12 

Faites de votre touche Capslock une touche de lecture / pause

Cette solution remappera le scancode de votre clé Capslock en un autre code clé dans le pilote d’entrée du kernel, dans ce cas lecture / pause.

Les avantages

  • Pas besoin de modifier les fichiers système existants (un seul nouveau fichier doit être créé)
  • Les applications ne sauront pas qu’il s’agit en réalité d’une touche de locking mais verront si une vraie touche lecture / pause a été actionnée.
  • Pas besoin de désactiver capslock, pas de possibilité de gâcher la configuration de xkb

Désavantages

  • Doit être fait pour chaque clavier individuellement (ce qui, en fonction de la situation, peut également être un avantage)

Conditions préalables

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

Procédure

Dans un terminal, lancez 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. Rappelez-vous le numéro d’événement de l’appareil que vous avez sélectionné, nous en aurons besoin par la suite. Appuyez sur la touche de locking. Certaines lignes telles que les suivantes apparaissent:

 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 scancode de votre clavier est probablement différent.

Exécutez maintenant la commande suivante, mais remplacez le X par le numéro d’événement de périphérique que vous avez utilisé pour la commande evtest :

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

… cela bustype des caractères bustype , le product , le vendor et la version du clavier.

Créez un fichier nommé 65-keyboard-custom.hwdb dans /etc/udev/hwdb.d/ (permissions principales requirejses) 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 majuscules
  • [scancode] doit être en minuscule
  • evdev:... line 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, comstackz la nouvelle configuration dans la firebase database matérielle:

 sudo systemd-hwdb update 

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

 sudo udevadm sortinggger 

Si vous souhaitez annuler 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.

Peut-être xbindkeys utilisant xbindkeys ou XTE vous pourriez le faire. Mais avant d’être sûr de ce que sont les Keycodes, vous pouvez voir le code de la touche Capslock en utilisant la commande xev dans le terminal et en appuyant dessus (vous pouvez voir le keycode de n’importe quel bouton de keu ou de souris, y compris les souris Gaming). Avec capslock et le code clé des boutons de lecture en main, vous pouvez éditer le fichier confi de xbindkeys et y déposer vos modifications. utilisez touch ~/.xbindkeysrc pour créer le fichier de configuration (si le système ne le crée pas automatiquement) et nano ~/.xbindkeysrc pour le modifier. Je l’ai utilisé le mois dernier et voici un exemple. Jetez un coup d’œil à ces liens qui pourraient vous être très utiles.

https://help.ubuntu.com/community/MultimediaKeys

https://gist.github.com/jbonney/5743509

Remapper un bouton de ma souris de jeu sur une touche du clavier

https://matmunn.me/post/binding-volume-control-mouse-buttons-ubuntu/