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!
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 input
name__. 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 input
name__. 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 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 clé , vous pouvez modifier la variable EVENT
dans 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 evtest
name__, 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.
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 input
comme 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.
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:
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
Ensuite, dans Ubuntu 16.04, allez dans Paramètres >> Clavier >> Raccourcis >> Raccourcis personnalisés :
Audio Play
xdotool key XF86AudioPlay
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é.
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
.
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?
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.
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.
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?;)
Commentez la ligne
key <CAPS> { [ Caps_Lock ] };
en plaçant deux barres obliques (//
) au début de celle-ci.
Ajoutez en dessous la ligne suivante:
key <CAPS> { [ XF86AudioPlay, XF86AudioPause ] };
Commentez la ligne
modifier_map Lock { Caps_Lock };
de la même manière que ci-dessus.
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.)
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.
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.
Ouvrir les raccourcis clavier (Système → Préférences → Matériel → Raccourcis clavier)
Assurez-vous que "Play (ou Play/Pause)" est réglé sur "XF86AudioPlay"
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.
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.)
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
Peut-être que vous pouvez utiliser xbindkeys
ou XTE
name__. 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 xev
name__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/
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
xkb
name__Inconvénients
Prérequis
Sudo apt-get install evtest
)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 evtest
name__:
grep "" /sys/class/input/eventX/device/id/*
... ceci affichera bustype
name__, product
name__, 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ù
evdev:...
n'a aucun espace précédent 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.