Mantieni NumLock sempre attivo


29

Ho una tastiera standard con tasti numerici sul lato destro (immagino si chiami tastiera a 104 tasti). Voglio usare i tasti numerici solo come tasti numerici. Ciò significa che non voglio NumLockaccendere e spegnere i tasti numerici.

Tuttavia, a volte capita (non so come, forse da me accidentalmente NumLockpremere il tasto) che il blocco numerico sia disattivato e devo premerlo di nuovo. Questo è estremamente fastidioso.

È possibile disabilitare lo spegnimento del numlock?

In altre parole: voglio che i miei tasti numerici fungano sempre da tasti numerici e disabilitino il selettore numerico .

Sto usando Debian e LXDE (Openbox).



@MartinVegter Vuoi pubblicare qui i contenuti di ~/.config/openbox/autostarte ~/.config/openbox/rc.xml?
Risto Salminen,

È necessario un evento che attiverà nuovamente il blocco numerico se rileverà che il blocco numerico è ATTIVO. Disabilitare il blocco numerico è facile come indicato da xmodmap. L'unica domanda rimasta è come ottenere quell'evento ......?
SHW,

Risposte:


7

Dopo aver letto tutta la risposta qui, sono rimasto piuttosto sorpreso di vedere che puoi fare quanto segue.

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

Quindi ogni volta che si preme Num, che disattiva il blocco numerico. Verrà eseguito numlockx on, che riattiva il blocco numerico.

Il nome deriva dal mio output di xevcui mi ha dato il codice chiave 77 e il nomeNum_Lock

Nel caso di @MartinVegters, ha dovuto attendere qualche secondo, quindi numlockx onviene eseguito definitivamente dopo che l'evento di Numè stato gestito. Poiché esiste una condizione di competizione tra la gestione del numlock nel kernel e l'esecuzione numlockx.

Per questo caso puoi scrivere una piccola sceneggiatura denumlock.shcome

#!/bin/sh

sleep "$1"
numlockx on

e utilizzarlo nell'associazione chiave

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

Questo è sporco ma funziona.

Quello che raccomando è il seguente che non sono riuscito a mettermi alla prova. È meglio seguire le prime risposte che suggeriscono di usare

xmodmap -e 'keycode 77 = Escape'

Ma per LXDE è necessario utilizzare il meccanismo di avvio automatico LXDE che è diverso dal modo Openbox di modificare il file ~/.config/openbox/autostart.

In LXDE apparentemente devi modificare ~/.config/lxsession/LXDE/autostarto con Lubuntu ~/.config/lxsession/Lubuntu/autostart, che contiene i comandi per l'avvio. (Vedi Documenti Arch e LXDE ) Potrebbe essere necessario creare quel file e aggiungere questa riga.

@xmodmap -e 'keycode 77 = Escape'

Purtroppo, come ho detto, non posso verificare se funziona, poiché ho solo una macchina virtuale in esecuzione con LXDE.


1
Ho provato la tua soluzione <keybind key="Num_Lock">ma sfortunatamente non funziona. Mentre il comando numlockx onviene eseguito, <kbd> NumLock </kbd> continua a funzionare come numlock. Quindi posso ancora attivare / disattivare il blocco numerico.
Martin Vegter,

Per quanto riguarda l'altra soluzione, usando xmodmap, quando ho provato la soluzione suggerita da Risto Salminen, il comando ha funzionato, ma ho perso tutte le mie combinazioni di tasti.
Martin Vegter,

@MartinVegter Mhh potresti provare a sleep 3; numlockx onper il key binding. Per la seconda soluzione l'hai provato con l'avvio automatico?
Raphael Ahrens,

Non capisco perché, ma nemmeno sleep 3; /usr/bin/numlockx onfunziona. NumLockfunge ancora da interruttore on / off.
Martin Vegter,

@MartinVegter /usr/bin/numlockx onfunziona sul tuo sistema?
Raphael Ahrens,

13

forse da me colpire accidentalmente la NumLockchiave

Se la tastiera è tua (anziché, ad esempio, il tuo datore di lavoro), rimuovila fisicamente dalla tastiera .

Puoi ancora premerlo con una cosa appuntita se mai ne hai davvero bisogno.

inserisci qui la descrizione dell'immagine


4
Sì, +1. Semplice è elegante
ypercubeᵀᴹ

1
purtroppo lo stato predefinito del mio NumLuck è quello sbagliato :(
MichaelChirico,

6

Sulla tastiera del mio laptop (Ubuntu 10.04) il blocco tastiera è attualmente attivo.

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

Ecco ! il blocco numerico è ora disabilitato.

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

Lo restituisce di nuovo. (Forse greping per Num_lock sarebbe stata un'idea migliore, ma hai capito bene).

Rispondi al commento di @Martin Vegter.

Ok , in risposta al tuo commento xmodmap rovina i tuoi attacchi, capito.

Ho appena controllato la documentazione di Openbox

Dai un'occhiata a ~ / .config / openbox / lxde-rc.xml

ls -l lxde-rc.xml (hai anche un rc.xml?, controlla).

prendine una copia come backup

(usa un editor) cerca numlock (forse nmlk).

Vedi qualcosa del genere?

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

Commentalo O modifica il valore-chiave del keybind in un'alternativa, ad esempio Alt-Numlock, per attivare / disattivare

key="A-Numlock"

Per esempio

Per Commentare

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

o

Passa a Alt + Attiva / Disattiva Numlock

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

salvare le modifiche e disconnettersi / accedere o riavviare.


Il problema è che qualsiasi xmodmapcomando (ovvero xmodmap -e 'keycode 77 = Escape') distrugge i miei tasti già esistenti che sono definiti in.config/openbox/lxde-rc.xml
Martin Vegter

1
Ho risposto sopra per ottenere una migliore formattazione.
X Tian,

grazie per la tua risposta. Tuttavia, nel mio .config/openbox/lxde-rc.xml, non esiste alcuna riga contenente Numlocko Num_Lock. Quando ne creo uno, non ha alcun effetto: <keybind key = "Num_Lock"> <action name = "Execute"> <command> / bin / true </command> </action> </keybind>
Martin Vegter

1
Deve essere presente un altro file di configurazione prima di quello nella directory home. due posti che suggerisco di cercare, / etc / xdg / openbox e / usr / share / ... Se questo non è di aiuto, dovrò rinunciare - scusa.
X Tian,

da 3.4.7 registro modificato (casella aperta) "Correggi i collegamenti chiave persi se non è possibile tradurre più collegamenti allo stesso livello (corregge VMWare causando l'interruzione dei collegamenti dei tasti Openbox)"
X Tian

5

Trova il tuo codice di blocco numerico con xev. Ad esempio, qui, Num_Lock è 77.

Usa xmodmap per rimappare il codice chiave:

  • Per le sessioni X correnti, all'interno di una shell, utilizzare xmodmap -e 'keycode 77 = '.
  • A tutte le future sessioni X, al suo ~/.xprofileposto xmodmap -e 'keycode 77 = '.

    EDIT: Nota: non funziona se un software sta cambiando lo stato Bloc Num.


1
Il comando xmodmap -e 'keycode 77 = 'funziona, ma causa un grave problema: tutte le mie
combinazioni di

Bene, puoi provare a mapparlo su una chiave valida e innocua. Come xmodmap -e 'keycode 77 = Escape'(YMMV, ESC mi sembra sicuro). Hai un file ~ / .Xmodmap? In caso affermativo, invece di ~/.xprofile, posizionare il keycode 77 = Escapealla fine di questo file.
emp.justine,

1
Il problema è che qualsiasi xmodmapcomando (ad es. xmodmap -e 'keycode 77 = Escape') Distrugge i miei tasti già esistenti che sono definiti in.config/openbox/lxde-rc.xml
Martin Vegter

4

Basta rimuovere il mapping dei tasti di NumLock mappandolo a nulla: prima eseguire xeve premere Bloc Num (probabilmente stamperà 77), quindi eseguire il comando:

xmodmap -e "keycode # = """

dove # è il codice chiave di NumLock.

Lo metti anche ~/.xprofileper disabilitare NumLock in x sessioni.


Nel caso in cui la mia domanda originale non fosse chiara: non desidero disattivare il blocco numerico. Voglio il contrario. Voglio assicurarmi che non possa essere disattivato (voglio che il numlock sia sempre attivo)
Martin Vegter,

Ah, ovviamente ho avuto un errore nel mio pensiero, grazie per avermelo fatto notare. :) Vedrò se posso migliorare la mia risposta.
Risto Salminen,

questo non ha alcun effetto sul mio sistema:xmodmap -e "remove Lock = Num_Lock"
Martin Vegter,

Ora il comando funziona, ma distrugge tutti i miei tasti. Tutte le combinazioni di tasti smettono di funzionare.
Martin Vegter,

Bene, non dovrebbe, secondo questa risposta su superutente .
Risto Salminen,

4

foto delle opzioni della tastieracon LinuxMint 17.2 e immagino altre versioni di Ubuntu puoi andare alle impostazioni della TASTIERA e poi LAYOUT su quella pagina troverai un piccolo pulsante "opzioni".

Da lì vai a "opzioni di compatibilità varie" e seleziona "i tasti numerici immettono sempre le cifre"

Questo è un vero toccasana per me. Mi dà fastidio digitare un numero ed essere spostato da qualche altra parte nella pagina. Saluti! ;)


1
Questa risposta dovrebbe avere molti più punti!
Carlos Gant,

Questo può essere fatto anche da linea di comando per setxkbmap -option numpad:maco impostando Option "XkbOptions" "numpad:mac"in xorg.conf.
j123b567

2

Altre risposte qui suggerite di usare numlockx oncon xmodmap -e 'keycode 77 =', ma numlockx onnon funzionerebbero sul mio sistema insieme a quel xmodmapcomando, mostrandomi un messaggio di errore:

$ 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

E anche ambientazione xmodmap -e 'keycode 77 =' per qualche motivo rimuove tutte le mie combinazioni di tasti fatte con xbindkeys.

Questa risposta a una domanda simile mi ha aiutato, tuttavia. Parte del mio ~/.xinitrc:

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

In questo modo NumLock non fa nulla da solo, ma se premuto con Shift serve al suo scopo originale (per lo più inutile), e soprattutto non impedisce numlockx ondi lavorare sul mio sistema o incasinare i miei xbindkeystasti.


1

Un altro modo, se si desidera disabilitare il numlock disabilitare permanentemente chiave. Puoi farlo modificando il tuo file keymap corrente modificando il codice chiave 77.

Impostare questo valore su "nessuno", in modo che la pressione accidentale del tasto non faccia nulla.

Utilizzare numlockxall'avvio per avviarlo e utilizzare il file keymap modificato in uno degli script di avvio, ad esempio ~/.bashrco in /etc/profile.

NOTA: non l'ho provato, ma dovrebbe funzionare.


1

Su OpenSuse 13.x con KDE, questo ha funzionato per me:

  • installa numlockx
  • Aggiungi scorciatoia personalizzata:
    • Collegamenti personalizzati -> Modifica -> Nuovo -> Collegamento globale -> Comando / URL:
    • Nome azione: NumLockOn
    • Commento: mantenere attivo il blocco numerico
    • Trigger: impostato su NumLockk
    • Azione-> Comando / URL: sh -c 'sleep 0.5; numlockx on'
    • Hit applica
    • (fatto)

Se NumLock deve essere abilitato perché è spento, basta usare % numlockx on.


Questo è quello di cui ho bisogno. Lavorando su Xubuntu 16.04.
Kodmanyagha,


0

Potrebbe non essere la soluzione migliore, ma questo ha funzionato per me:

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

Dove 11 è l'id della tastiera. Fai un xinputelenco per determinare l'ID della tua tastiera (nel mio caso è 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)]

Ovviamente, numlockxdeve essere installato affinché funzioni.

Spiegazione:

  • stdbuf -oL modifica le operazioni di buffering del flusso di output su buffer di linea
  • xinput test 11 stampa i tasti premuti su stdout
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}'per ogni riga stampata e contenente 77 (tasto numerico), crea un comando /usr/bin/numlockx on...
  • | bash ... e pipe per colpire per eseguirlo.

È possibile inserire questo oneliner in uno degli script iniziali degli ambienti desktop o eseguirlo in background.


0

Voglio anche che i tasti numerici del tastierino numerico siano sempre numeri, nessuna delle cose di KP _....

La mia soluzione fa parte della mia tastiera Apple Remapping per l'utilizzo con repository Linux .

Fondamentalmente, rimpiazza Num_Lock come F20 e i numeri come se stessi.

Questa soluzione fornisce sempre il risultato desiderato e un tasto funzione aggiuntivo come vantaggio marginale.


-1

Creare il seguente script e renderlo eseguibile con chmod +x <filename>

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

Inserisci il percorso del file .config/openbox/autostart

Oppure posizionalo come cron job che controlla ogni paio di minuti ed esegue lo script se i blocchi numerici sono disattivati.

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

O semplicemente eseguire lo script in un ciclo.

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

Se non hai il numlockx dovresti riuscire a ottenerlo sudo apt-get install numlockx


No, questa non è certamente una buona soluzione.
Ci

1
Puoi spiegare perché no?
Jeight

1
Bene, perché è una soluzione molto sporca. Non risolve il problema di fondo, si limita a spazzare i sintomi sotto il tappeto.
Martin Vegter,

Sfortunatamente, se xmodmap non funziona, in realtà non hai altre opzioni. Scrivere una sceneggiatura per controllare e abilitare il blocco numerico, non sta spazzando il problema sotto il tappeto. Pensalo come un controllo per bilanciare la chiave con il grasso. Non ci sono effetti collaterali e lo script può essere facilmente interrotto / avviato in qualsiasi momento. Non è poi così sporco di una soluzione alternativa. Ho visto molto peggio fatto nell'attuale codice sorgente dei programmi che usi tutti i giorni.
Jeight

come puoi esserne così sicuro, non ho altre opzioni?
Martin Vegter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.