Gardez NumLock toujours activé

29

J'ai un clavier standard avec des touches numériques sur le côté droit (je suppose que cela s'appelle un clavier à 104 touches). Je souhaite utiliser les touches numériques uniquement comme touches numériques. Cela signifie que je ne veux pas que les NumLocktouches numériques soient activées ou désactivées.

Cependant, il arrive parfois (je ne sais pas comment, peut-être en appuyant accidentellement sur la NumLocktouche) que le verrouillage numérique soit désactivé, et je dois appuyer à nouveau. C'est extrêmement ennuyeux.

Est-il possible de désactiver la désactivation du verrouillage numérique?

En d'autres termes: je veux que mes touches numériques agissent toujours comme des touches numériques et désactivent le commutateur de verrouillage numérique .

J'utilise Debian et LXDE (Openbox).

Martin Vegter
la source
@MartinVegter Souhaitez-vous publier ici le contenu de ~/.config/openbox/autostartet ~/.config/openbox/rc.xml?
Risto Salminen
Besoin d'un événement, qui déclenchera à nouveau le verrouillage numérique s'il a détecté que le verrouillage numérique est activé. Désactiver le verrouillage numérique est aussi simple que mentionné par xmodmap. La seule question qui reste est de savoir comment obtenir cet événement ......?
SHW

Réponses:

7

Après avoir lu toutes les réponses ici, j'ai été assez surpris de voir que vous pouvez faire ce qui suit.

<keybind key="Num_Lock">
  <action name="Execute">
    <command>numlockx on</command>
  </action>
</keybind>

Donc, chaque fois que vous appuyez sur Num, ce qui désactive le verrouillage numérique. Il s'exécutera numlockx on, ce qui réactivera le verrouillage numérique.

Le nom vient de ma sortie xevqui m'a donné le code clé 77 et le nomNum_Lock

Dans le cas @MartinVegters, il avait besoin d'attendre quelques secondes pour que l' numlockx onexécution soit définitivement exécutée après la gestion de l'événement Num. Puisqu'il y a une condition de concurrence entre la gestion de numlock dans le noyau et l'exécution numlockx.

Dans ce cas, vous pouvez écrire un petit script denumlock.shcomme

#!/bin/sh

sleep "$1"
numlockx on

et l'utiliser dans le raccourci clavier

<command>/bin/sh denumlock.sh 1</command>

C'est sale mais ça marche.

Ce que je recommande, c'est ce que je n'ai pas pu tester moi-même. Vous feriez mieux de suivre les premières réponses qui suggèrent d'utiliser

xmodmap -e 'keycode 77 = Escape'

Mais pour LXDE, vous devez utiliser le mécanisme de démarrage automatique de LXDE qui est différent de la manière d'Openbox de modifier le ~/.config/openbox/autostart.

Dans LXDE, vous devez apparemment modifier ~/.config/lxsession/LXDE/autostartou avec Lubuntu ~/.config/lxsession/Lubuntu/autostart, qui contient les commandes pour le démarrage. (Voir Arch docs et LXDE docs ) Vous devrez peut-être créer ce fichier et ajouter cette ligne.

@xmodmap -e 'keycode 77 = Escape'

Malheureusement, comme je l'ai dit, je ne peux pas tester si cela fonctionne, car je n'ai qu'une machine virtuelle fonctionnant avec LXDE.

Raphael Ahrens
la source
1
J'ai essayé votre solution <keybind key="Num_Lock">mais malheureusement elle ne fonctionne pas. Pendant l' numlockx onexécution de la commande , <kbd> NumLock </kbd> conserve toujours sa fonction de numlock. Je peux donc toujours activer / désactiver le verrouillage numérique.
Martin Vegter
Quant à l'autre solution, en utilisant xmodmap, lorsque j'ai essayé la solution suggérée par Risto Salminen, la commande a fonctionné, mais j'ai perdu toutes mes liaisons de touches.
Martin Vegter
@MartinVegter Mhh vous pouvez essayer un sleep 3; numlockx onpour le raccourci clavier. Pour la deuxième solution, l'avez-vous essayé avec le démarrage automatique?
Raphael Ahrens
Je ne comprends pas pourquoi, mais sleep 3; /usr/bin/numlockx onne fonctionne même pas. NumLockagit toujours comme un interrupteur marche / arrêt.
Martin Vegter
@MartinVegter /usr/bin/numlockx onfonctionne-t-il sur votre système?
Raphael Ahrens
13

peut-être en frappant accidentellement la NumLockclé

Si le clavier est le vôtre (plutôt que celui de votre employeur par exemple), retirez-le simplement physiquement du clavier .

Vous pouvez toujours appuyer dessus avec une chose pointue si vous en avez vraiment besoin.

entrez la description de l'image ici


la source
4
Oui, +1. Simple est élégant.
ypercubeᵀᴹ
1
malheureusement, l'état par défaut de mon NumLuck est le mauvais :(
MichaelChirico
6

Sur mon clavier d'ordinateur portable (Ubuntu 10.04), le verrouillage du clavier est actuellement activé.

$ xmodmap -pke|grep 77
keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys
keycode 177 = XF86Phone NoSymbol XF86Phone
$ xmodmap -e "keycode 77 ="

Voila! numlock est maintenant désactivé.

xmodmap -e "keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys"

Le remet à nouveau. (Peut-être que greping pour Num_lock aurait été une meilleure idée, mais vous obtenez l'essentiel).

Répondre au commentaire de @Martin Vegter.

Ok , en réponse à votre commentaire, xmodmap ruine vos fixations, compris.

Je viens de vérifier la documentation Openbox

Jetez un œil dans ~ / .config / openbox / lxde-rc.xml

ls -l lxde-rc.xml (avez-vous également un fichier rc.xml?, veuillez vérifier).

en prendre une copie de sauvegarde

(utilisez un éditeur) recherchez numlock (peut-être nmlk).

Voyez-vous quelque chose comme ça?

<keybind key="Numlock">
<action name="whatEverItSays"/>
</keybind>

Commentez-le OU changez la valeur-clé du raccourci clavier à une alternative, par exemple Alt-Numlock pour basculer

key="A-Numlock"

Par exemple

Pour commenter

<!-Commented out from here
    <keybind key="Numlock">
    <action name="whatEverItSays"/>
    </keybind>
To Here -->

ou

Passer à la bascule Alt + Numlock

<keybind key="A-Numlock">
  <action name="whatEverItSays"/>
</keybind>

enregistrer les modifications et se déconnecter / se connecter ou redémarrer.

X Tian
la source
Le problème est que toute xmodmapcommande (ie xmodmap -e 'keycode 77 = Escape') détruit mes raccourcis clavier existants qui sont définis dans.config/openbox/lxde-rc.xml
Martin Vegter
1
J'ai répondu ci-dessus pour obtenir un meilleur formatage.
X Tian
Merci pour votre réponse. Cependant, dans my .config/openbox/lxde-rc.xml, il n'y a pas de ligne contenant Numlockou Num_Lock. Lorsque j'en crée un, cela n'a aucun effet: <keybind key = "Num_Lock"> <action name = "Execute"> <command> / bin / true </command> </action> </keybind>
Martin Vegter
1
Il doit y avoir un autre fichier de configuration en cours de lecture avant celui de votre répertoire personnel. deux endroits que je suggère de rechercher, / etc / xdg / openbox et / usr / share / ... Si cela ne vous aide pas, je devrai abandonner - désolé.
X Tian
à partir de 3.4.7 journal modifié (openbox) "Correction des raccourcis clavier perdus si plusieurs liaisons au même niveau ne pouvaient pas être traduites (Corrige VMWare provoquant l'arrêt des raccourcis clavier Openbox)"
X Tian
5

Trouvez votre code de touche numlock avec xev. Par exemple, ici, Num_Lock est 77.

Utilisez xmodmap pour remapper le code clé:

  • Pour les sessions X en cours, à l'intérieur d'un shell, utilisez xmodmap -e 'keycode 77 = '.
  • Pour toutes les futures sessions de X, à l' intérieur ~/.xprofilelieu xmodmap -e 'keycode 77 = '.

    EDIT: Remarque: ne fonctionne pas si un logiciel modifie l'état de verrouillage numérique.

emp.justine
la source
1
La commande xmodmap -e 'keycode 77 = 'fonctionne, mais elle cause un problème grave: toutes mes liaisons de touches cessent de fonctionner
Martin Vegter
Eh bien, vous pouvez essayer de le mapper à une clé valide et inoffensive. Comme xmodmap -e 'keycode 77 = Escape'(YMMV, ESC semble sûr pour moi). Avez-vous un fichier ~ / .Xmodmap? Si oui, au lieu de ~/.xprofile, placez le keycode 77 = Escapeà la fin de ce fichier.
emp.justine
1
Le problème est que toute xmodmapcommande (ie xmodmap -e 'keycode 77 = Escape') détruit mes raccourcis clavier existants qui sont définis dans.config/openbox/lxde-rc.xml
Martin Vegter
4

Supprimez simplement le mappage de la clé NumLock en le mappant sur rien: exécutez d'abord xevet appuyez sur Num Lock (il imprimera probablement 77), puis exécutez la commande:

xmodmap -e "keycode # = """

où # est le code clé de NumLock.

Vous devez également mettre ceci ~/.xprofilepour désactiver NumLock dans x sessions.

Risto Salminen
la source
Dans le cas où ma question d'origine n'est pas claire: je ne veux pas désactiver le verrouillage numérique. Je veux le contraire. Je veux m'assurer qu'il ne peut pas être désactivé (je veux que le verrouillage numérique soit toujours activé)
Martin Vegter
Ah, j'ai évidemment eu une erreur dans ma pensée, merci de me l'avoir fait savoir. :) Je vais voir si je peux améliorer ma réponse.
Risto Salminen
cela n'a aucun effet sur mon système:xmodmap -e "remove Lock = Num_Lock"
Martin Vegter
Maintenant, la commande fonctionne, mais elle détruit tous mes raccourcis clavier. Tous les raccourcis clavier cessent de fonctionner.
Martin Vegter
Eh bien, cela ne devrait pas, selon cette réponse sur le superutilisateur .
Risto Salminen
4

image des options du clavieravec LinuxMint 17.2 et j'imagine que d'autres versions d'Ubuntu vous pouvez aller à votre paramètre KEYBOARD puis LAYOUTS sur cette page, vous trouverez un petit bouton "options".

De là, allez dans "options de compatibilité diverses" et cochez "les touches numériques entrent toujours des chiffres"

C'est une bouée de sauvetage pour moi. Cela me dérange de taper un numéro et d'être déplacé ailleurs sur la page. À votre santé! ;)

flyingdrifter
la source
1
Cette réponse devrait avoir beaucoup plus de points!
Carlos Gant
Cela peut être fait aussi de la ligne de commande par setxkbmap -option numpad:macou en mettant Option "XkbOptions" "numpad:mac"en xorg.conf.
j123b567
2

D'autres réponses suggèrent d'utiliser numlockx onavec xmodmap -e 'keycode 77 =', mais numlockx onne fonctionneraient pas sur mon système avec cette xmodmapcommande, me montrant un message d'erreur:

$ numlockx on
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  132 (XTEST)
  Minor opcode of failed request:  2 (X_XTestFakeInput)
  Value in failed request:  0x0
  Serial number of failed request:  17
  Current serial number in output stream:  20

Et aussi le réglage xmodmap -e 'keycode 77 ='supprimerait pour une raison quelconque toutes mes liaisons de touches faites avec xbindkeys.

Cette réponse à une question similaire m'a cependant aidé. Une partie de mon ~/.xinitrc:

numlockx on
xmodmap -e 'keycode 77 = NoSymbol Num_Lock'

De cette façon, le NumLock ne fait rien par lui-même, mais s'il est pressé avec Shift, il remplit sa fonction d'origine (la plupart du temps inutile), et surtout il n'empêche pas numlockx onde travailler sur mon système ou de gâcher mes xbindkeysraccourcis clavier.

jojman
la source
1

Une autre façon, si vous souhaitez numlockdésactiver définitivement la clé. Vous pouvez le faire en modifiant votre fichier de keymap actuel en modifiant le keycode 77.

Réglez cette valeur sur "none", de sorte qu'une pression accidentelle sur la touche ne fasse rien.

Utilisez numlockxau démarrage pour le démarrer et utilisez le fichier de carte de touches modifié dans l'un des scripts de démarrage, par exemple ~/.bashrcou dans /etc/profile.

REMARQUE: je n'ai pas testé cela, mais cela devrait fonctionner.

SHW
la source
1

Sur OpenSuse 13.x avec KDE, cela a fonctionné pour moi:

  • installer numlockx
  • Ajouter un raccourci personnalisé:
    • Raccourcis personnalisés -> Modifier -> Nouveau -> Raccourci global -> Commande / URL:
    • Nom de l'action: NumLockOn
    • Commentaire: Keep numlock on
    • Déclencheur: défini sur NumLockk
    • Action-> Commande / URL: sh -c 'sleep 0.5; numlockx on'
    • Appuyez sur Appliquer
    • (terminé)

Si NumLock doit être activé car il est désactivé, utilisez simplement % numlockx on.

Timothy C. Quinn
la source
C'est de quoi j'ai besoin. Travailler sur Xubuntu 16.04.
kodmanyagha
0

Ce n'est peut-être pas la meilleure solution, mais cela a fonctionné pour moi:

stdbuf -oL xinput test 11 | mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}' | bash

Où 11 est l'ID de votre clavier. Faites une xinputliste pour déterminer votre identifiant de clavier (dans mon cas, c'est 11):

user@host:~$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DualPoint Stick                           id=12   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Sony Vaio Keys                            id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ USB 2.0 Camera                            id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]

De toute évidence, numlockxdoit être installé pour que cela fonctionne.

Explication:

  • stdbuf -oL modifie les opérations de mise en mémoire tampon du flux de sortie en ligne mise en mémoire tampon
  • xinput test 11 imprime les touches enfoncées sur stdout
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}'pour chaque ligne imprimée et contenant 77 (la touche numlock), créez une commande /usr/bin/numlockx on...
  • | bash ... et le diriger vers bash pour l'exécuter.

Vous pouvez insérer ce oneliner dans l'un des scripts initiaux des environnements de bureau ou l'exécuter en arrière-plan.

le chaos
la source
0

Je veux également que les touches numériques du pavé numérique soient toujours des chiffres, aucune des choses KP _....

Ma solution fait partie de mon remappage du clavier Apple pour une utilisation avec Linux repo.

Fondamentalement, il remappe simplement Num_Lock en F20 et les nombres en tant que tels.

Cette solution fournit toujours le résultat souhaité et une touche de fonction supplémentaire comme avantage marginal.

guivho
la source
-1

Créez le script suivant et rendez-le exécutable avec chmod +x <filename>

#!/bin/bash
if [ -x /usr/bin/numlockx ];then
/usr/bin/numlockx on
fi

Mettez le chemin du fichier dans .config/openbox/autostart

Ou placez-le comme un travail cron qui vérifie toutes les deux minutes et exécute le script si numlocks est désactivé.

crontab -e 
*/1 * * * * <path-to-file>

Ou exécutez simplement le script en boucle.

#!/bin/bash
  x=0
  while [ x -eq 0 ];do
    if [ -x /usr/bin/numlockx ];then
    /usr/bin/numlockx on
    fi
  done

Si vous n'avez pas numlockx, vous devriez pouvoir l'obtenir avec sudo apt-get install numlockx

Jeight
la source
Non, ce n'est certainement pas une bonne solution. Désolé
Martin Vegter
1
Pouvez-vous expliquer pourquoi non?
Jeight
1
Eh bien, parce que c'est une solution de contournement très sale. Il ne résout pas le problème sous-jacent, il ne fait que balayer les symptômes sous le tapis.
Martin Vegter
Malheureusement, si xmodmap ne fonctionne pas, vous n'avez pas vraiment d'autres options. Écrire un script pour vérifier et activer le verrouillage numérique ne fait pas disparaître le problème sous le tapis. Considérez-le comme un contrôle et un équilibre pour que la graisse touche la clé. Il n'y a pas d'effets secondaires et le script peut facilement être arrêté / démarré à tout moment. Ce n'est vraiment pas si sale d'une solution de contournement. J'ai vu bien pire dans le code source des programmes que vous utilisez quotidiennement.
Jeight
comment pouvez-vous être si sûr, je n'ai pas d'autres options?
Martin Vegter