web-dev-qa-db-fra.com

Puis-je remapper la touche de verrouillage majuscule pour lire de l'audio?

J'essaie de réutiliser la clé de verrouillage 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!

16
2BFrank

evtest et dbus

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

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

  • Ajoutez votre compte d'utilisateur au groupe inputname__. Déconnectez-vous et connectez-vous à nouveau. (Cela est nécessaire car 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 du groupe inputname__. Nous pourrions exécuter le script en tant que root, mais nous devrons trouver un moyen de le dire. à quelle instance dbus de l'utilisateur il 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.

  • Stockez le script suivant quelque part, e. g. $HOME/bin/capshack et le rendre 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 verrouillage. 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 ajuster la variable KEYBOARDpour 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 clé , vous pouvez modifier la variable EVENTdans le script de sorte qu'elle se termine par value 0 au lieu de value 1.

De plus, il est possible que le code clé de la clé de verrouillage soit différent de 58. Vous pouvez le vérifier en exécutant evtestname__, 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 à partir du triggerhappy package (quelque chose comme thd --dump /dev/input/* donnerait un résultat 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=Abuse capslock key
    
    [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é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 triggerhappy pour le faire. C’est la méthode recommandée pour les personnes qui souhaitent jouer moins avec le système et qui préfèrent une solution plus solide.

  • Ajouter un utilisateur au groupe inputcomme ci-dessus

  • Installez le paquet: Sudo apt install triggerhappy

  • Ajoutez une configuration pour triggerhappy à ~/.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-le courir pour votre utilisateur de la même manière que décrit 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 par pression sur une 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.

11
Sebastian Stark

Dans Ubuntu 16.04, après avoir passé des heures à googler et à tripoter 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 verrouillage des majuscules est toujours reconnu mais ne bascule pas la casse des lettres
  • Fonctionne avec les paramètres de raccourci personnalisés du clavier Ubuntu standard

Si vous avez besoin de l’aide de Gnome XF86AudioPlay, vous avez besoin de xdotool (non nécessaire pour VLC comme indiqué par OP):

Sudo apt install xdotool

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

Utilisez cette méthode pour désactiver le verrouillage 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 xdotool key XF86AudioPlay
  • Puis cliquez sur le Apply bouton

Après avoir ajouté la nouvelle option, la touche de raccourci attribuée s’affiche désactivée . Cliquez sur Désactivé et lorsque le système vous demandera la clé à attribuer, appuyez sur la touche Caps LocK clé.


Les lecteurs de musique comme VLC

Suivez les étapes pour Gnome dans la section précédente, mais pour la commande , utilisez ceci à 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 en sorte que les touches multimédias du clavier fonctionnent avec VLC de manière globale? même lorsque 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 à rendre ce setxkbmap -option caps:none persistant lors des redémarrages. Cette réponse de Terdon a été recherchée sur Google: Enregistrer les paramètres setxkbdmap :

Une solution simple consiste à ajouter 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.

9
WinEunuuchs2Unix

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

Remapper le verrouillage des majuscules

  1. Editez le fichier /usr/share/X11/xkb/symbols/pc en 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> {    [ Caps_Lock     ]   };
    

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

  3. Ajoutez en dessous la ligne suivante:

        key <CAPS> {    [ 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 avoir signalé cela). Les mises à jour du package 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 sûr" car la source amont de ce fichier n'a pas été modifiée depuis trois ans.)

Méthode alternative

Désactivez manuellement la touche de verrouillage des majuscules dans les paramètres de disposition de votre clavier, puis utilisez l’approche de cette réponse pour ajouter vos propres remappages de touches.

Problèmes?

Votre touche de verrouillage 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 reste 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. helpful screenshot

  4. Si cela ne fonctionne toujours pas, redémarrez plusieurs fois pour faire bonne mesure. (C'est en fait ce qui l'a corrigé pour moi.)

3
Nonny Moose

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

"playerctl play-pause"
  Alt + F12
1
Enno

Peut-être que vous pouvez utiliser xbindkeysou XTEname__. Mais avant d’être sûr de ce que sont les codes clés, vous pouvez voir le code de la touche majuscule à l’aide de la commande xevname__dans le terminal et en l’appuyant (vous pouvez voir le code clé de tout bouton keu ou de la souris, y compris la 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

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

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

0

Faites de votre touche de majuscule 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 noyau, dans ce cas play/pause.

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 verrouillage mais verront si une vraie touche lecture/pause a été enfoncée
  • Pas besoin de désactiver capslock, pas de possibilité de gâcher la configuration de xkbname__

Inconvénients

  • Doit être fait pour chaque clavier individuellement (ce qui, en fonction de 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 appareil. Rappelez-vous le numéro d'événement de périphérique que vous avez sélectionné, nous en aurons besoin par la suite. Appuyez sur la touche de verrouillage. 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 qui précède 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 evtestname__:

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

... ceci affichera bustypename__, productname__, vendoret versiondu 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], [fournisseur], [produit] et [version] ont exactement 4 caractères et les lettres doivent être en majuscules
  • [scancode] doit être en minuscule
  • la ligne evdev:... n'a aucun 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 annuler les modifications, supprimez simplement le fichier que vous avez créé et redémarrez.

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

0
danzel