Deaktivieren Sie die Numlock-Funktion, wobei die Tastenkombinationen der Maustasten erhalten bleiben

1859
Smile4ever

Ich habe Probleme beim Deaktivieren der Numlock-Taste (lassen Sie die Taste nichts tun, damit die Numpad-Nummern immer funktionieren), während Sie gleichzeitig zusätzliche Maustasten (an der Seite meiner Maus) Verknüpfungen zuordnen, um benutzerdefinierte Aktionen auszuführen.

Ich benutze Arch Linux und Xfce und der Login Manager ist LightDM.

Ich benutze diesen Code, füge eine Bash-Datei ein, um meine Nummer beim Start zu deaktivieren:

xmodmap -e "keycode 77 = NoSymbol" 

Und ich habe eine .xbindkeysrc-Datei in meinem Home-Verzeichnis mit:

"xdotool key ctrl+w" b:8 + Release  "xdotool key ctrl+d" b:9 + Release 

(Tab & Lesezeichen schließen)

Wenn ich den Code "disable Numlock" beim Start aktiviere, hat die .xbindkeysrc-Datei keine Auswirkungen mehr. Dies scheint mit dem Befehl numlockx onin Zusammenhang zu stehen, der sich in derselben Bash-Datei befindet wie der Befehl xmodmap (davor). Wie kann ich es lösen?

Hinzufügen

"NoCommand" c:77 

zu .xbindkeysrc hat auch nicht die gewünschte Wirkung. Das Ändern von c in m, weil Numlock theoretisch ein Modifiziererkey ist, hilft nicht. Die Verwendung von Num_Lock anstelle von c: 77 funktioniert ebenfalls nicht.

5

3 Antworten auf die Frage

4
Michał Górny

Beginnen wir mit einer Erklärung, was passiert und warum Ihre Idee nicht funktioniert. Sehen Sie sich zuerst die Modifizierer-Map an:

$ xmodmap xmodmap: up to 3 keys per modifier, (keycodes in parentheses):  shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3  mod4 Super_L (0x85), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb) 

Wie Sie sehen können, Num_Lockist mod2hier. Wenn es eingeschaltet ist, werden alle Tastendruckereignisse mit mod2Bit aktiviert .

Wenn Sie es so deaktivieren:

$ xmodmap -e "keycode 77 = NoSymbol" $ xmodmap  xmodmap: up to 3 keys per modifier, (keycodes in parentheses):  shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Meta_L (0xcd) mod2 BadKey (0x4d) mod3  mod4 Super_L (0x85), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb) 

Beachten Sie, dass mod2jetzt damit BadKeyzu tun ist, und dies scheint Xorg sehr zu verwirren. Tatsächlich scheinen die meisten Modifier-Map-Änderungen X11 für mich zu brechen.


Im Moment kann ich keine gute Lösung finden, bei der mit Modifier-Map gespielt wird. Ich habe aber noch eine andere Idee: Sie können alle Tasten auf dem Tastenfeld so belegen, dass die Num-Taste sowohl ein- als auch ausgeschaltet ist. Das ist:

xmodmap -e "keysym KP_Up = KP_8" xmodmap -e "keysym KP_Left = KP_4" # ... 

usw. Wenn Sie das getan haben, ist der Zustand der Num-Sperre nicht mehr wichtig.

Sie können den Modifikator sogar entfernen, um die LED auszuschalten:

xmodmap -e "remove mod2 = Num_Lock" 
Wenn ich den Numlock-Modifikatorschlüssel entferne, brechen zumindest meine alt- und altgr-Schlüssel. Ich denke, ich muss mit dem Numlock-Licht leben. Vielen Dank, es funktioniert. Ich werde posten, was ich jetzt verwende. Smile4ever vor 9 Jahren 0
4
ideasman42

Basierend auf der Antwort von @ Michał Górny. Hier sind die Befehle zum Deaktivieren der Num-Sperre, zum Verwenden von Nummern und zum Zuordnen von Numlock zu F13 (möglicherweise nützlich, um eine spezielle Funktion in Ihrem Fenstermanager zu binden).

# NumLock is F13 xmodmap -e "remove mod2 = Num_Lock" \ -e "keycode 77 = F13"  # Use numbers even when numlock is off xmodmap -e "keysym KP_End = KP_1" \ -e "keysym KP_Down = KP_2" \ -e "keysym KP_Next = KP_3" \ -e "keysym KP_Left = KP_4" \ -e "keysym KP_Begin = KP_5" \ -e "keysym KP_Right = KP_6" \ -e "keysym KP_Home = KP_7" \ -e "keysym KP_Up = KP_8" \ -e "keysym KP_Prior = KP_9" \ -e "keysym KP_Insert = KP_0" \ -e "keysym KP_Delete = KP_Decimal" 

Es ist schön, nicht die ganze Zeit über das Numlock-Licht zu haben :)

Funktioniert wunderbar, danke. Wie kann ich dies beim Start automatisieren? Das Hinzufügen des Skripts zu meinem Startup funktioniert nicht. Für das, was es wert ist, verwende ich systemd. Smile4ever vor 8 Jahren 0
Update: Es funktioniert mit Schlaf 7 und Numlockx über Ihrem Skript. Wenn Sie jedoch die Numlock-Taste drücken, erlischt das LED-Licht wieder :( Dies ist nur der Fall, wenn ich es als Startskript verwende. Smile4ever vor 8 Jahren 0
Durch das Entfernen des Modifizierers wird Alt + Tab unterbrochen. Kann ich diese Befehle in .Xmodmap einfügen? Smile4ever vor 8 Jahren 0
@ Smile4ever, ich habe dies in meine `.xinitrc` eingefügt, aber es könnte wahrscheinlich auch in` ~ / .Xmodmap` gehen. Seltsam, Alt + Tab funktioniert immer noch für mich. ideasman42 vor 8 Jahren 1
@ Smile4ever. * "Durch Betätigen der Numlock-Taste geht das LED-Licht wieder aus" *, ich hatte auch dieses Problem, aber "remove mod2 = Num_Lock" `behebt dies für mich. ideasman42 vor 8 Jahren 0
Wenn Sie die Num-Taste erneut zuweisen oder die Schlüsselmodifizierer-Funktion entfernen, werden meine Tastenkombinationen abgebrochen. Stattdessen werde ich nur den unteren Teil der Lösung verwenden. Ich werde versuchen, das Numlock-Licht zu beheben, um bei einer anderen Lösung immer eingeschaltet zu sein. :) Smile4ever vor 8 Jahren 0
Okay, ich habe die Lösung gefunden, um meinen Numlock-Schlüssel neu zuzuweisen und meine Tastenkombinationen nicht zu brechen :) Ich habe xmodmap -e "keycode 77 = F13 Num_Lock F13" nach der letzten Zeile eingefügt und es scheint zu funktionieren :) Smile4ever vor 8 Jahren 0
0
Smile4ever
  • Xfce-Tastatureinstellungen: Deaktivieren Sie den Numlock-Status für die Wiederherstellung (dies schaltet das Licht aus, wenn es bereits eingeschaltet ist)
  • Xfce-Starteinstellungen: Fügen Sie dem Skript eine Erwähnung hinzu: sh /home/$USER/numlockalwayson.sh

Skript:

#timeout, otherwise it will not work upon boot/login (make two variants of the script. Use sleep 2 for the login variant) sleep 20 xmodmap -e "keysym KP_Up = KP_8" xmodmap -e "keysym KP_Left = KP_4" xmodmap -e "keysym KP_Right = KP_6" xmodmap -e "keysym KP_Down = KP_2" # xmodmap -e "keysym KP_Begin = KP_5" # xmodmap -e "keysym KP_Home = KP_7" xmodmap -e "keysym KP_Next = KP_3" xmodmap -e "keysym KP_Prior = KP_9" xmodmap -e "keysym KP_End = KP_1" # xmodmap -e "keysym KP_Insert = KP_0" xmodmap -e "keysym KP_Delete = KP_Decimal" # numlockx on 

Dieses Licht wird ausgeschaltet, wenn Sie Num_Lock drücken. Das ist das einzige Manko dieser Lösung und ist eine enorme Verbesserung gegenüber dem, was ich hatte. Diese Lösung unterbricht andere Zusatztasten wie Alt nicht.

Vielen Dank an Michał Górny für diese Lösung.

Bonus

Wenn Sie sich abmelden und erneut anmelden, funktioniert das Skript nicht mehr (Sie müssen neu starten, damit es wieder funktioniert). Um dies zu beheben, bearbeiten Sie /etc/lightdm/lightdm.conf (den Ort, an dem sich die Datei in Manjaro Linux befindet) und fügen Sie die Anmeldevariante des Skripts hinzu:

session-setup-script=sh /home/$USER/numlockalwayson-login.sh 

Außerdem deaktiviert LightDM die Nummernsperre, wenn Sie sich abmelden. Um dies zu korrigieren, fügen Sie zur gleichen Datei hinzu:

greeter-setup-script=/usr/bin/numlockx on 

Vergiss nicht zu speichern.

Sie benötigen sowohl den Xfce-Start als auch diese Konfiguration, damit es immer funktioniert.