Behalten Sie NumLock immer bei


29

Ich habe eine Standardtastatur mit numerischen Tasten auf der rechten Seite (ich denke, sie hat 104 Tasten). Ich möchte die Zifferntasten nur als Zifferntasten verwenden. Das heißt, ich möchte nicht, dass die NumLockZifferntasten ein- und ausgeschaltet werden.

Manchmal kommt es jedoch vor (ich weiß nicht wie, vielleicht NumLockweil ich versehentlich auf die Taste drücke), dass der Numlock ausgeschaltet wird und ich ihn erneut drücken muss. Das ist extrem nervig.

Ist es möglich, das Ausschalten von Numlock zu deaktivieren?

Mit anderen Worten: Ich möchte, dass meine Zifferntasten immer als Zifferntasten fungieren und den Nummernschalter deaktivieren .

Ich benutze Debian und LXDE (Openbox).



@MartinVegter Möchten Sie hier den Inhalt von ~/.config/openbox/autostartund posten ~/.config/openbox/rc.xml?
Risto Salminen

Benötigen Sie ein Ereignis, das den Numlock wieder auslöst, wenn festgestellt wird, dass der Numlock eingeschaltet ist. Das Deaktivieren von Numlock ist so einfach wie von beschrieben xmodmap. Die einzige Frage, die noch offen ist, ist, wie man an dieses Ereignis kommt.
SHW

Antworten:


7

Nachdem ich die Antwort hier gelesen hatte, war ich ziemlich überrascht zu sehen, dass Sie Folgendes tun können.

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

Also jedes Mal Num, wenn Sie drücken , wird die Numlock deaktiviert. Es wird ausgeführt numlockx on, wodurch die Numlock-Funktion reaktiviert wird.

Der Name stammt aus meiner Ausgabe, xevdie mir den Schlüsselcode 77 und den Namen gabNum_Lock

In @MartinVegters Fall musste er einige Sekunden warten, damit das numlockx ondefinitiv ausgeführt wird, nachdem das Ereignis von Numbehandelt wurde. Da gibt es eine Racebedingung zwischen dem Umgang mit Numlock im Kernel und der Ausführung numlockx.

Für diesen Fall können Sie ein kleines Skript denumlock.shwie schreiben

#!/bin/sh

sleep "$1"
numlockx on

und verwenden Sie es in der Schlüsselbindung

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

Das ist schmutzig, aber es funktioniert.

Was ich empfehle, ist das Folgende, das ich selbst nicht testen konnte. Befolgen Sie besser die ersten Antworten, die Sie verwenden möchten

xmodmap -e 'keycode 77 = Escape'

Für LXDE müssen Sie jedoch den LXDE-Autostart-Mechanismus verwenden, der sich von der Openbox-Methode zum Bearbeiten der unterscheidet ~/.config/openbox/autostart.

In LXDE müssen Sie anscheinend ~/.config/lxsession/LXDE/autostartoder mit Lubuntu bearbeiten ~/.config/lxsession/Lubuntu/autostart, das die Befehle für den Start enthält. (Siehe Arch-Dokumente und LXDE-Dokumente. ) Möglicherweise müssen Sie diese Datei erstellen und diese Zeile hinzufügen.

@xmodmap -e 'keycode 77 = Escape'

Leider kann ich, wie gesagt, nicht testen, ob dies funktioniert, da ich nur eine VM mit LXDE habe.


1
Ich habe deine Lösung ausprobiert, <keybind key="Num_Lock">aber leider funktioniert es nicht. Während der numlockx onAusführung des Befehls wird die Funktion von <kbd> NumLock </ kbd> weiterhin als Numlock ausgeführt. So kann ich Numlock immer noch ein- / ausschalten.
Martin Vegter

Als xmodmapich die von Risto Salminen vorgeschlagene Lösung ausprobierte, hat der Befehl funktioniert, aber ich habe alle meine Tastenkombinationen verloren.
Martin Vegter

@MartinVegter Mhh du könntest mal eine sleep 3; numlockx onfür die Schlüsselbindung probieren . Für die zweite Lösung haben Sie es mit dem Autostart versucht?
Raphael Ahrens

Ich verstehe nicht warum, aber auch sleep 3; /usr/bin/numlockx onnicht funktioniert. NumLockwirkt immer noch als Ein / Aus-Schalter.
Martin Vegter

@MartinVegter funktioniert /usr/bin/numlockx onauf Ihrem System?
Raphael Ahrens

13

Vielleicht, indem ich versehentlich die NumLockTaste drücke

Wenn die Tastatur Ihnen gehört (und nicht zum Beispiel Ihrem Arbeitgeber), entfernen Sie sie einfach physisch von der Tastatur .

Sie können es immer noch mit einem spitzen Gegenstand drücken, wenn Sie es jemals wirklich brauchen.

Bildbeschreibung hier eingeben


4
Ja, +1. Einfach ist elegant.
ypercubeᵀᴹ

1
Leider ist der Standardzustand von NumLuck der falsche :(
MichaelChirico

6

Bei meiner Laptop-Tastatur (Ubuntu 10.04) ist die Tastatursperre derzeit aktiviert.

$ 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 ist jetzt deaktiviert.

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

Setzt es wieder zurück. (Vielleicht wäre es eine bessere Idee gewesen, nach Num_lock zu greifen, aber Sie verstehen alles).

Antworte auf @Martin Vegters Kommentar.

Ok , als Antwort auf deinen Kommentar ruiniert xmodmap deine Bindungen, verstanden.

Ich habe gerade die Openbox-Dokumentation überprüft

Schauen Sie sich ~ / .config / openbox / lxde-rc.xml an

ls -l lxde-rc.xml (Haben Sie auch eine rc.xml? Bitte überprüfen).

Nehmen Sie eine Kopie davon als Backup

(benutze einen Editor) suche nach numlock (vielleicht nmlk).

Sehen Sie so etwas?

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

Kommentiere es aus ODER ändere den Keybind Key-Wert zu einer Alternative, zB Alt-Numlock zum Umschalten

key="A-Numlock"

Z.B

Um auf Kommentar

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

oder

Wechseln Sie zu Alt + Numlock

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

Änderungen speichern und abmelden / einloggen oder neu starten.


Das Problem ist, dass jeder xmodmapBefehl (dh xmodmap -e 'keycode 77 = Escape') meine vorhandenen Tastenkombinationen zerstört, die in.config/openbox/lxde-rc.xml
Martin Vegter,

1
Ich habe oben geantwortet, um eine bessere Formatierung zu erhalten.
X Tian

Danke für deine Antwort. In my .config/openbox/lxde-rc.xmlgibt es jedoch keine Zeile mit Numlockoder Num_Lock. Wenn ich einen erstelle, hat dies keine Auswirkungen: <keybind key = "Num_Lock"> <action name = "Execute"> <command> / bin / true </ command> </ action> </ keybind>
Martin Vegter

1
Es muss eine andere Konfigurationsdatei vor der in Ihrem Home-Verzeichnis gelesen werden. Ich schlage vor, an zwei Stellen nachzuschauen: / etc / xdg / openbox und / usr / share / ... Wenn dies keine Hilfe ist, muss ich aufgeben - Entschuldigung.
X Tian

von 3.4.7 geändertes Protokoll (openbox) "Fix, dass Schlüsselbindungen verloren gehen, wenn mehrere Bindungen auf der gleichen Ebene nicht übersetzt werden konnten (Fixes VMWare, was Openbox-Schlüsselbindungen zum Funktionieren brachte)"
X Tian

5

Finden Sie Ihren Nummernschlüsselcode mit xev. In diesem Beispiel ist Num_Lock 77.

Verwenden Sie xmodmap, um den Schlüsselcode neu zuzuordnen:

  • Verwenden Sie für aktuelle X-Sitzungen in einer Shell xmodmap -e 'keycode 77 = '.
  • Für alle zukünftigen X-Sessions, inside ~/.xprofileplace xmodmap -e 'keycode 77 = '.

    BEARBEITEN: Hinweis: Funktioniert nicht, wenn eine Software den Num Lock-Status ändert.


1
Der Befehl xmodmap -e 'keycode 77 = 'funktioniert, aber er verursacht ein ernstes Problem: Alle meine Tastenkombinationen funktionieren nicht mehr
Martin Vegter,

Nun, Sie können versuchen, es einem gültigen, harmlosen Schlüssel zuzuordnen. Wie xmodmap -e 'keycode 77 = Escape'(YMMV, ESC scheint sicher für mich). Haben Sie eine ~ / .Xmodmap-Datei? Wenn ja, platzieren Sie stattdessen ~/.xprofiledas keycode 77 = Escapeam Ende dieser Datei.
Justine

1
Das Problem ist, dass jeder xmodmapBefehl (dh xmodmap -e 'keycode 77 = Escape') meine vorhandenen Tastenkombinationen zerstört, die in.config/openbox/lxde-rc.xml
Martin Vegter,

4

Entfernen Sie einfach die NumLock-Tastenzuordnung, indem Sie sie zu nichts zuordnen: Führen Sie zunächst NumLock aus xevund drücken Sie die Num- Taste (es wird wahrscheinlich 77 ausgegeben ), und führen Sie dann den Befehl aus:

xmodmap -e "keycode # = """

Dabei ist # der Schlüsselcode von NumLock.

Sie würden dies auch verwenden ~/.xprofile, um NumLock in x-Sitzungen zu deaktivieren.


Falls meine ursprüngliche Frage nicht klar ist: Ich möchte Numlock nicht ausschalten. Ich will das Gegenteil. Ich möchte sicherstellen, dass es nicht ausgeschaltet werden kann (ich möchte, dass die Nummersperre immer eingeschaltet ist)
Martin Vegter

Ah, ich hatte offensichtlich einen Denkfehler, danke, dass Sie mich informiert haben. :) Ich werde sehen, ob ich meine Antwort verbessern kann.
Risto Salminen

Dies hat keine Auswirkungen auf mein System:xmodmap -e "remove Lock = Num_Lock"
Martin Vegter

Jetzt funktioniert der Befehl, aber er zerstört alle meine Tastenkombinationen. Alle Tastenbelegungen funktionieren nicht mehr.
Martin Vegter


4

Bild der TastaturoptionenMit LinuxMint 17.2 und anderen Ubuntu-Versionen können Sie zu Ihrer KEYBOARD-Einstellung gehen, und dann finden Sie auf dieser Seite eine kleine Schaltfläche "Optionen".

Gehen Sie von dort zu "Verschiedene Kompatibilitätsoptionen" und aktivieren Sie "Zifferntasten geben immer Ziffern ein".

Das ist ein Lebensretter für mich. Es nervt mich, eine Zahl einzugeben und an eine andere Stelle auf der Seite verschoben zu werden. Prost! ;)


1
Diese Antwort sollte viel mehr Punkte haben!
Carlos Gant

Dies kann auch über die Befehlszeile von setxkbmap -option numpad:macoder durch Einstellen Option "XkbOptions" "numpad:mac"von erfolgen xorg.conf.
j123b567

2

Andere Antworten hier schlugen die Verwendung von numlockx onmit vor xmodmap -e 'keycode 77 =', numlockx onfunktionierten aber nicht mit diesem xmodmapBefehl auf meinem System und zeigten mir eine Fehlermeldung an:

$ 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

Und auch das Einstellen xmodmap -e 'keycode 77 ='würde aus irgendeinem Grund alle meine mit vorgenommenen Tastenkombinationen entfernen xbindkeys.

Diese Antwort auf eine ähnliche Frage hat mir jedoch geholfen. Teil meines ~/.xinitrc:

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

Auf diese Weise macht das NumLock nichts für sich, aber wenn es mit Shift gedrückt wird, erfüllt es seinen ursprünglichen (meist unbrauchbaren) Zweck und verhindert vor allem nicht, dass es numlockx onauf meinem System funktioniert oder meine xbindkeysTastenkombinationen durcheinander bringt .


1

Eine andere Möglichkeit, wenn Sie die numlockTastensperre dauerhaft deaktivieren möchten . Sie können dies tun, indem Sie Ihre aktuelle Keymap-Datei ändern, indem Sie den Keycode 77 ändern.

Setzen Sie diesen Wert auf "none", damit das versehentliche Drücken der Taste nichts bewirkt.

Verwenden Sie numlockxbeim Booten, um es zu starten, und verwenden Sie die geänderte Keymap-Datei in einem der Startskripts, z . B. ~/.bashrcoder in /etc/profile.

HINWEIS: Ich habe das nicht getestet, aber es sollte funktionieren.


1

Unter OpenSuse 13.x mit KDE funktionierte das für mich:

  • Installiere numlockx
  • Benutzerdefinierte Verknüpfung hinzufügen:
    • Benutzerdefinierte Verknüpfungen -> Bearbeiten -> Neu -> Globale Verknüpfung -> Befehl / URL:
    • Aktionsname: NumLockOn
    • Kommentar: Lass die Nummersperre an
    • Trigger: auf NumLockk setzen
    • Aktion-> Befehl / URL: sh -c 'sleep 0.5; numlockx on'
    • Hit anwenden
    • (getan)

Wenn NumLock aktiviert werden muss, weil es deaktiviert ist, verwenden Sie einfach % numlockx on.


Das ist das, was ich benötige. Arbeiten an Xubuntu 16.04.
Kodmanyagha


0

Es ist vielleicht nicht die beste Lösung, aber das hat bei mir funktioniert:

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

Wobei 11 die ID Ihrer Tastatur ist. Führen Sie eine xinputListe durch, um die ID Ihrer Tastatur zu ermitteln (in meinem Fall 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)]

Natürlich numlockxmuss installiert sein, damit das funktioniert.

Erläuterung:

  • stdbuf -oL Ändert die Pufferoperationen des Ausgabestreams in zeilengepufferte
  • xinput test 11 druckt die gedrückten Tasten auf stdout
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}'Erstellen Sie für jede Zeile, die gedruckt wird und 77 (die Num-Taste) enthält, einen Befehl /usr/bin/numlockx on...
  • | bash ... und leite es an bash, um es auszuführen.

Sie können diesen Oneliner in eines der ersten Skripts der Desktop-Umgebung einfügen oder im Hintergrund ausführen.


0

Ich möchte auch, dass die Zifferntasten der Zehnertastatur immer Zahlen sind, keines der KP _...-Dinge.

Meine Lösung ist Teil meiner Remapping-Apple-Tastatur für die Verwendung mit Linux Repo.

Grundsätzlich werden Num_Lock als F20 und die Zahlen als sich selbst neu zugeordnet.

Diese Lösung liefert immer das gewünschte Ergebnis und eine zusätzliche Funktionstaste als Randnutzen.


-1

Erstellen Sie das folgende Skript und machen Sie es mit ausführbar chmod +x <filename>

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

Geben Sie den Dateipfad ein .config/openbox/autostart

Oder platzieren Sie ihn als Cron-Job, der alle paar Minuten überprüft und das Skript ausführt, wenn die Num-Sperre deaktiviert ist.

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

Oder führen Sie das Skript einfach in einer Schleife aus.

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

Wenn Sie kein Numlockx haben, sollten Sie in der Lage sein, es zu bekommen sudo apt-get install numlockx


Nein, das ist sicher keine gute Lösung. Entschuldigung
Martin Vegter

1
Kannst du erklären warum nicht?
Jeight

1
Nun, weil es eine sehr schmutzige Umgehung ist. Es behebt nicht das zugrunde liegende Problem, sondern fegt nur die Symptome unter den Teppich.
Martin Vegter

Wenn xmodmap nicht funktioniert, stehen Ihnen leider keine weiteren Optionen zur Verfügung. Das Schreiben eines Skripts zum Überprüfen und Aktivieren der Numlock-Funktion ist kein Problem. Stellen Sie sich das als Check-and-Balance für das fette Fingern des Schlüssels vor. Es gibt keine Nebenwirkungen und das Skript kann jederzeit einfach gestoppt / gestartet werden. Es ist wirklich kein so schmutziger Workaround. Ich habe viel Schlimmeres im Quellcode von Programmen gesehen, die Sie jeden Tag benutzen.
Jeight

Wie können Sie so sicher sein, dass ich keine anderen Optionen habe?
Martin Vegter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.