Trzymaj NumLock zawsze włączony


29

Mam standardową klawiaturę z klawiszami numerycznymi po prawej stronie (chyba nazywa się to klawiaturą 104-klawiszową). Chcę używać klawiszy numerycznych tylko jako klawiszy numerycznych. Oznacza to, że nie chcę NumLockwłączać i wyłączać klawiszy numerycznych.

Czasami jednak zdarza się (nie wiem jak, być może przeze mnie przypadkowo uderzyłem w NumLockklawisz), że numlock jest wyłączony i muszę go ponownie nacisnąć. To jest bardzo denerwujące.

Czy można wyłączyć wyłączenie numlock?

Innymi słowy: chcę, aby moje klawisze numeryczne zawsze działały jak klawisze numeryczne i aby wyłączały przełącznik numlock .

Używam Debiana i LXDE (Openbox).



@MartinVegter Czy chcesz zamieścić tutaj treść ~/.config/openbox/autostarti ~/.config/openbox/rc.xml?
Risto Salminen

Potrzebujesz zdarzenia, które ponownie wyłączy Numlock, jeśli wykryje, że Numlock jest WŁĄCZONY. Wyłączenie numlocka jest tak proste, jak wspomniane przez xmodmap. Pozostaje tylko pytanie, jak zdobyć to wydarzenie ......?
SHW

Odpowiedzi:


7

Po przeczytaniu wszystkich odpowiedzi tutaj byłem zaskoczony, widząc, że możesz wykonać następujące czynności.

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

Więc za każdym razem, gdy naciskasz Num, co dezaktywuje numlock. Wykona się numlockx on, co reaktywuje numlock.

Nazwa pochodzi od moich danych wyjściowych, xevktóre dały mi kod klucza 77 i nazwęNum_Lock

W przypadku @MartinVegters musiał poczekać kilka sekund, aby na numlockx onpewno został wykonany po zakończeniu zdarzenia Num. Ponieważ istnieje warunek wyścigu między obsługą numlocka w jądrze a wykonywaniem numlockx.

W tym przypadku można napisać mały skrypt, denumlock.shjak

#!/bin/sh

sleep "$1"
numlockx on

i użyj go w powiązaniu klucza

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

To jest brudne, ale działa.

Polecam następujące, których sam nie mogłem przetestować. Lepiej postępuj zgodnie z pierwszymi odpowiedziami, które sugerują użycie

xmodmap -e 'keycode 77 = Escape'

Ale w przypadku LXDE musisz użyć mechanizmu autostartu LXDE, który różni się od sposobu edycji Openbox ~/.config/openbox/autostart.

W LXDE najwyraźniej musisz edytować ~/.config/lxsession/LXDE/autostartlub w Lubuntu ~/.config/lxsession/Lubuntu/autostart, który przechowuje polecenia do uruchomienia. (Zobacz Dokumenty Arch i Dokumenty LXDE ) Może być konieczne utworzenie tego pliku i dodanie tej linii.

@xmodmap -e 'keycode 77 = Escape'

Niestety, jak powiedziałem, nie mogę przetestować, czy to działa, ponieważ mam tylko maszynę wirtualną działającą z LXDE.


1
Wypróbowałem Twoje rozwiązanie, <keybind key="Num_Lock">ale niestety nie działa. Podczas wykonywania polecenia numlockx on<kbd> NumLock </kbd> nadal zmienia funkcję na numlock. Więc nadal mogę włączać / wyłączać numlock.
Martin Vegter

Jeśli chodzi o inne rozwiązanie, używając xmodmap, kiedy wypróbowałem rozwiązanie sugerowane przez Risto Salminena, polecenie zadziałało, ale straciłem wszystkie moje powiązania klawiszy.
Martin Vegter

@MartinVegter Mhh możesz spróbować sleep 3; numlockx onpowiązania klawiszy. W przypadku drugiego rozwiązania wypróbowałeś to z autostartem?
Raphael Ahrens

Nie rozumiem dlaczego, ale nawet sleep 3; /usr/bin/numlockx onnie działa. NumLocknadal działa jak włącznik / wyłącznik.
Martin Vegter

@MartinVegter /usr/bin/numlockx ondziała w twoim systemie?
Raphael Ahrens

13

być może przeze mnie przypadkowo uderzyłem w NumLockklucz

Jeśli klawiatura jest twoja (a nie na przykład pracodawca), po prostu wyjmij ją fizycznie z klawiatury .

Nadal możesz naciskać go spiczastą rzeczą, jeśli naprawdę potrzebujesz.

wprowadź opis zdjęcia tutaj


4
Tak, +1. Proste jest eleganckie.
ypercubeᵀᴹ

1
niestety domyślny stan mojego NumLucka jest zły :(
MichaelChirico

6

Na klawiaturze laptopa (Ubuntu 10.04) blokada klawiatury jest obecnie włączona.

$ 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 jest teraz wyłączony.

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

Odkłada to z powrotem. (Może lepszym pomysłem byłoby Num_lock, ale masz sens).

Odpowiedz na komentarz @Martin Vegter.

Ok , w odpowiedzi na twój komentarz, xmodmap rujnuje twoje powiązania, zrozumiałe.

Właśnie sprawdziłem dokumentację Openbox

Zajrzyj do ~ / .config / openbox / lxde-rc.xml

ls -l lxde-rc.xml (czy masz także plik rc.xml ?, sprawdź).

weź kopię jako kopię zapasową

(użyj edytora) wyszukaj numlock (może nmlk).

Czy widzisz coś takiego?

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

Skomentuj lub LUB Zmień Klucz-wartość klucza na alternatywną, np. Alt-Numlock, aby przełączyć

key="A-Numlock"

Na przykład

Aby skomentować

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

lub

Zmień na Alt + Numlock

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

zapisz zmiany i wyloguj się / zaloguj lub uruchom ponownie.


Problem polega na tym, że każde xmodmappolecenie (tj. xmodmap -e 'keycode 77 = Escape') Niszczy moje istniejące powiązania klawiszy, które są zdefiniowane w.config/openbox/lxde-rc.xml
Martin Vegter,

1
Odpowiedziałem powyżej, aby uzyskać lepsze formatowanie.
X Tian

dzięki za odpowiedź. Jednak u mnie .config/openbox/lxde-rc.xmlnie ma linii zawierającej Numlocklub Num_Lock. Kiedy go utworzę, nie działa: <keybind key = "Num_Lock"> <action name = "Execute"> <command> / bin / true </command> </action> </keybind>
Martin Vegter

1
Przed plikiem w katalogu domowym musi być odczytany inny plik konfiguracyjny. dwa miejsca, które sugeruję szukać, / etc / xdg / openbox i / usr / share / ... Jeśli to nie pomoże, będę musiał się poddać - przepraszam.
X Tian

z 3.4.7 zmieniono dziennik (openbox) „Napraw zgubione powiązania klawiszy, jeśli wiele powiązań na tym samym poziomie nie mogło zostać przetłumaczonych (Naprawiono VMWare powodujące, że przestały działać skróty klawiszowe Openbox)”
X Tian

5

Znajdź swój kod numeryczny za pomocą xev. Na przykład tutaj Num_Lock to 77.

Użyj xmodmap, aby ponownie przypisać kod klucza:

  • Do bieżących sesji X w powłoce użyj xmodmap -e 'keycode 77 = '.
  • Do wszystkich przyszłych sesji X, na ~/.xprofilemiejscu xmodmap -e 'keycode 77 = '.

    EDYCJA: Uwaga: Nie działa, jeśli oprogramowanie zmienia stan Num Lock.


1
Polecenie xmodmap -e 'keycode 77 = 'działa, ale powoduje poważny problem: wszystkie moje
skróty

Możesz spróbować zmapować go na prawidłowy, nieszkodliwy klucz. Podobnie jak xmodmap -e 'keycode 77 = Escape'(YMMV, ESC wydaje mi się bezpieczny). Czy masz plik ~ / .Xmodmap? Jeśli tak, zamiast ~/.xprofileumieść keycode 77 = Escapena końcu tego pliku.
emp. Justine

1
Problem polega na tym, że każde xmodmappolecenie (tj. xmodmap -e 'keycode 77 = Escape') Niszczy moje istniejące powiązania klawiszy, które są zdefiniowane w.config/openbox/lxde-rc.xml
Martin Vegter

4

Po prostu usuń mapowanie klawisza NumLock, mapując go na nic: najpierw uruchom xevi naciśnij Num Lock (prawdopodobnie wydrukuje 77), a następnie uruchom polecenie:

xmodmap -e "keycode # = """

gdzie # to kod klawiszy NumLock.

Ustawiłbyś to również, ~/.xprofileaby wyłączyć NumLock w sesjach x.


W przypadku, gdy moje pierwotne pytanie nie jest jasne: nie chcę wyłączać Numlocka. Chcę czegoś przeciwnego. Chcę się upewnić, że nie można go wyłączyć (chcę, aby numlock był zawsze włączony)
Martin Vegter,

Ach, oczywiście miałem błąd w myśleniu, dzięki za poinformowanie mnie. :) Zobaczę, czy mogę poprawić swoją odpowiedź.
Risto Salminen

nie ma to wpływu na mój system:xmodmap -e "remove Lock = Num_Lock"
Martin Vegter

Teraz polecenie działa, ale niszczy wszystkie moje skróty klawiszowe. Wszystkie powiązania klawiszy przestają działać.
Martin Vegter,

Cóż, nie powinno, zgodnie z odpowiedzią na superużytkownika .
Risto Salminen

4

pic opcji klawiaturyz LinuxMint 17.2 i wyobrażam sobie inne wersje Ubuntu, możesz przejść do ustawień KLAWIATURY, a następnie UKŁADY na tej stronie znajdziesz mały przycisk „opcji”.

Następnie przejdź do „różnych opcji zgodności” i zaznacz „Klawisze numeryczne zawsze wprowadzają cyfry”

To dla mnie ratownik. Wkurza mnie to, że wpisuję liczbę i przenoszę się gdzie indziej na stronie. Twoje zdrowie! ;)


1
Ta odpowiedź powinna mieć znacznie więcej punktów!
Carlos Gant,

Można to zrobić również z wiersza poleceń, setxkbmap -option numpad:maclub poprzez ustawienie Option "XkbOptions" "numpad:mac"w xorg.conf.
j123b567

2

Inne odpowiedzi tutaj sugerowały użycie numlockx onz xmodmap -e 'keycode 77 =', ale numlockx onnie działałyby w moim systemie razem z tym xmodmappoleceniem, pokazując mi komunikat o błędzie:

$ 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

Również ustawienie xmodmap -e 'keycode 77 ='z jakiegoś powodu usunie wszystkie moje skróty klawiszowe wykonane xbindkeys.

Ta odpowiedź na podobne pytanie pomogła mi jednak. Część moich ~/.xinitrc:

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

W ten sposób NumLock sam nic nie robi, ale po naciśnięciu Shift służy swojemu pierwotnemu (przeważnie bezużytecznemu) celowi, a co najważniejsze, nie przeszkadza w numlockx onpracy w moim systemie ani nie psuje moich xbindkeysklawiszy.


1

Innym sposobem jest numlocktrwałe wyłączenie klawisza. Możesz to zrobić, modyfikując bieżący plik mapy klawiszy, modyfikując kod 77.

Ustaw tę wartość na „none”, aby przypadkowe naciśnięcie klawisza nic nie zrobiło.

Użyj numlockxpodczas uruchamiania, aby go uruchomić i użyj zmodyfikowanego pliku mapy klawiszy w jednym ze skryptów startowych np. ~/.bashrcLub w /etc/profile.

UWAGA: Nie testowałem tego, ale powinno działać.


1

Na OpenSuse 13.x z KDE, to zadziałało dla mnie:

  • zainstaluj numlockx
  • Dodaj niestandardowy skrót:
    • Skróty niestandardowe -> Edytuj -> Nowy -> Globalny skrót -> Polecenie / adres URL:
    • Nazwa działania: NumLockOn
    • Komentarz: Trzymaj numlock włączony
    • Wyzwalacz: ustaw na NumLockk
    • Action-> Command / URL: sh -c 'sleep 0.5; numlockx on'
    • Hit zastosować
    • (gotowy)

Jeśli NumLock musi być włączony, ponieważ jest wyłączony, po prostu użyj % numlockx on.


To jest to, czego potrzebuję. Praca na Xubuntu 16.04.
kodmanyagha


0

To może nie być najlepsze rozwiązanie, ale to zadziałało dla mnie:

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

Gdzie 11 to identyfikator twojej klawiatury. Zrób xinputlistę, aby określić swój identyfikator klawiatury (w moim przypadku jest to 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)]

Oczywiście, numlockxaby to działało , musi być zainstalowane.

Wyjaśnienie:

  • stdbuf -oL modyfikuje operacje buforowania strumienia wyjściowego na buforowane liniowo
  • xinput test 11 wypisuje wciśnięte klawisze na standardowe wyjście
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}'dla każdej linii, która jest drukowana i zawiera 77 (klawisz numlock), zbuduj polecenie /usr/bin/numlockx on...
  • | bash ... i potokuj go, aby go uruchomić.

Możesz wstawić ten oneliner do jednego ze skryptów początkowych środowiska graficznego lub uruchomić go w tle.


0

Chcę również, aby klawisze numeryczne zawsze były cyframi, a żadna z KP _... rzeczy.

Moje rozwiązanie jest częścią mojej Ponownej klawiatury Apple do użytku z repozytorium Linux .

Zasadniczo po prostu odwzorowuje Num_Lock na F20, a same liczby na siebie.

To rozwiązanie zawsze zapewnia pożądany wynik i dodatkowy klawisz funkcyjny jako dodatkową korzyść.


-1

Utwórz następujący skrypt i wykonaj go za pomocą chmod +x <filename>

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

Umieść ścieżkę do pliku .config/openbox/autostart

Lub umieść go jako zadanie crona, które sprawdza co kilka minut i uruchamia skrypt, jeśli numlocks jest wyłączony.

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

Lub po prostu uruchom skrypt w pętli.

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

Jeśli nie masz numlockxa, powinieneś być w stanie go zdobyć sudo apt-get install numlockx


Nie, to z pewnością nie jest dobre rozwiązanie. Przepraszamy
Martin Vegter,

1
Czy możesz wyjaśnić, dlaczego nie?
Jeight

1
Cóż, ponieważ jest to bardzo brudne obejście. Nie rozwiązuje podstawowego problemu, tylko zamiata objawy pod dywan.
Martin Vegter,

Niestety, jeśli xmodmap nie działa, tak naprawdę nie masz żadnych innych opcji. Napisanie skryptu, aby sprawdzić i włączyć numlock, nie zamiata problemu pod dywan. Pomyśl o tym jak o sprawdzeniu i wyważeniu palców tłuszczu. Nie ma żadnych skutków ubocznych, a skrypt można łatwo zatrzymać / uruchomić w dowolnym momencie. To naprawdę nie jest takie brudne z obejścia. Widziałem znacznie gorsze rzeczy w kodzie źródłowym programów, z których korzystasz na co dzień.
Jeight

skąd możesz mieć pewność, że nie mam innych opcji?
Martin Vegter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.