web-dev-qa-db-fra.com

Je veux mapper les touches sur les raccourcis dans Lubuntu, mais la sortie de xev me laisse perplexe

J'utilise un Toshiba r835 avec Lubuntu. Après une installation propre, appuyer sur le bouton d'alimentation lorsque la machine est allumée ne fait rien. J'ai corrigé le bouton d'alimentation en suivant ce conseil :

J'ai ajouté ces lignes à ~/.config/openbox/lubuntu-rc.xml

<keybind key="XF86PowerOff">
<action name="Execute">
<command>lubuntu-logout</command>
</action>
</keybind>

Cela a du sens pour moi.

Je veux mapper plusieurs autres clés sur des raccourcis similaires. Par exemple, lorsque j'appuie sur Fn-F1, je souhaite verrouiller l'écran. J'imagine que j'ajouterais quelque chose comme

<keybind key="XF86ScreenSaver">
<action name="Execute">
<command>xscreensaver-command -lock</command>
</action>
</keybind>

Cependant, lorsque j'appuie sur Fn-F1, le menu Lubuntu s'ouvre, comme si j'avais appuyé sur la touche Super_L. Il tape également la lettre l si un terminal est ouvert. Mon raccourci souhaité xscreensaver-command -lock semble être ignoré. Que se passe-t-il? Pourquoi mon raccourci ne fonctionne-t-il pas?

Je pensais pouvoir comprendre cela avec xev, mais la sortie de xev me confond:

FocusOut event, serial 41, synthetic NO, window 0x2000001,
mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 41, synthetic NO, window 0x2000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 41, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   64  0   0   0   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

MappingNotify event, serial 41, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 41, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525549, (289,-138), root:(341,155),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525550, (289,-138), root:(341,155),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

MappingNotify event, serial 42, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyRelease event, serial 42, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525639, (289,-138), root:(341,155),
    state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (6c) "l"
    XFilterEvent returns: False

KeyRelease event, serial 43, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525646, (289,-138), root:(341,155),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

On dirait que je reçois le code d'activation 160, qui correspond à mon avis à XF86ScreenSaver, mais c'est également comme si j'avais appuyé sur la touche Super_L et sur la touche l. Je pense que toute cette sortie provient de la seule pression sur une touche Fn-F1. Cela me confond. Comment puis-je obtenir que Fn-F1 verrouille l'écran au lieu d'ouvrir le menu Lubuntu et de taper la lettre 'l'?

3
Andrew

Vous pouvez accomplir cela avec l'application xbindkeys. Ouvrez une fenêtre de terminal et tapez ce qui suit:

Sudo apt-get install xbindkeys

Une fois installé, vous voulez créer deux fichiers dans votre répertoire personnel appelé:

.xbindkeysrc

Ce fichier contiendra vos configurations pour vos raccourcis clavier

.xbindkeys.noauto

Ce sera juste un fichier vide, mais quand il existe, il empêche le serveur X de démarrer xbindkeys au démarrage. Bien que nous voulions qu'il démarre au démarrage, nous voulons le démarrer nous-mêmes via les applications de démarrage. La raison en est que le serveur X le démarre au début du processus de démarrage, ce qui empêche parfois les configs que nous avons insérées dans notre fichier .xbindkeysrc de fonctionner.


Ajoutez maintenant les lignes suivantes à votre fichier .xbindkeysrc

"xscreensaver-command -lock"
c:160

enregistrer le fichier

Maintenant, créez un petit script pour démarrer xbindkeys que nous allons mettre dans nos applications de démarrage:

Ouvrez votre éditeur de texte préféré et copiez-collez ou tapez les lignes suivantes:

#!/bin/bash

sleep 10
/usr/bin/xbindkeys &

Enregistrez-le dans votre répertoire personnel sous le nom xbstart.sh ou comme vous le souhaitez.

Le rendre exécutable

chmod 755 xbstart.sh

Ajoutez maintenant ce script à vos applications de démarrage et redémarrez.


Que se passe-t-il lorsque vous vous connectez, xbindkeys est appelé et lit votre fichier .xbindkeysrc et s’exécute en arrière-plan. Il surveille en permanence vos frappes au clavier et lorsque vous appuyez sur keycode 160, il l’intercepte avant que le serveur X ne puisse le forcer à exécuter xscreensaver-command -lock au lieu d’ouvrir votre menu.

2
Scott Stookey

J'ai ajouté ceci

<keybind key="C-A-L">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

alors quand je fais Crt+Alt+L mon début de screebscaver ... comme @fossfreedom me montre

donc je méfie vous devez faire quelque chose de similaire

<keybind key="C-F1">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

mais vérifiez d'abord si ce raccourci clavier n'est pas déjà utilisé.

... A propos de l'option fn que vous vouliez: je citerai wikipedia .

Contrairement aux autres touches de modification, telles que Ctrl, Shift et AltGr, le microcontrôleur situé à l'intérieur du clavier envoie généralement un code de touche différent selon que la touche Fn est enfoncée ou non. Cela permet au clavier d'émuler un clavier de taille normale, de sorte qu'il n'est pas nécessaire de créer des keymaps spécialisées. le système d'exploitation peut utiliser des keymaps standard conçues pour un clavier de taille normale. Le système d'exploitation n'ayant aucune notion de la touche Fn, cette dernière ne peut pas être remappée dans un logiciel, contrairement à toutes les autres touches du clavier standard.

2
maniat1k