Mantenha o NumLock sempre ativado

29

Eu tenho um teclado padrão com teclas numéricas no lado direito (acho que é chamado de teclado com 104 teclas). Eu quero usar as teclas numéricas apenas como teclas numéricas. Isso significa que não quero NumLockligar e desligar as teclas numéricas.

No entanto, às vezes acontece (não sei como, talvez pressionando acidentalmente a NumLocktecla) que o numlock está desativado e tenho que pressioná-lo novamente. Isso é extremamente irritante.

É possível desativar a desativação do numlock?

Em outras palavras: quero que minhas teclas numéricas sempre atuem como teclas numéricas e desative a chave numlock .

Estou usando o Debian e o LXDE (Openbox).

Martin Vegter
fonte
@MartinVegter Gostaria de postar aqui o conteúdo de ~/.config/openbox/autostarte ~/.config/openbox/rc.xml?
Risto Salminen
Precisa de um evento que ative o Numlock novamente se detectar que o numlock está LIGADO. Desativar o numlock é tão fácil quanto mencionado por xmodmap. A única questão que resta é como obter esse evento ......?
SHW

Respostas:

7

Depois de ler todas as respostas aqui, fiquei bastante surpreso ao ver que você pode fazer o seguinte.

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

Então, toda vez que você pressiona Num, o que desativa o numlock. Será executado numlockx on, o que reativa o numlock.

O nome vem da minha saída xeve me deu o código-chave 77 e o nomeNum_Lock

No caso do @MartinVegters, ele precisava esperar alguns segundos para que numlockx ondefinitivamente fosse executado após o evento de Numser tratado. Como existe uma condição de corrida entre o manuseio do numlock no kernel e a execução numlockx.

Nesse caso, você pode escrever um pequeno script denumlock.shcomo

#!/bin/sh

sleep "$1"
numlockx on

e use-o na ligação de chave

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

Isso está sujo, mas funciona.

O que eu recomendo é o seguinte, que não pude testar. É melhor você seguir as primeiras respostas que sugerem usar

xmodmap -e 'keycode 77 = Escape'

Mas para o LXDE, você precisa usar o mecanismo de inicialização automática do LXDE, que é diferente da maneira de editar o Openbox ~/.config/openbox/autostart.

Aparentemente, no LXDE, você precisa editar ~/.config/lxsession/LXDE/autostartou com o Lubuntu ~/.config/lxsession/Lubuntu/autostart, que contém os comandos para a inicialização. (Consulte Arch docs e LXDE docs ) Talvez seja necessário criar esse arquivo e adicionar esta linha.

@xmodmap -e 'keycode 77 = Escape'

Infelizmente, como eu disse, não posso testar se isso funciona, pois só tenho uma VM executando com LXDE.

Raphael Ahrens
fonte
1
Eu tentei sua solução, <keybind key="Num_Lock">mas infelizmente ela não funciona. Enquanto o comando numlockx oné executado, o <kbd> NumLock </kbd> ainda retalha sua função como numlock. Para que eu ainda possa ligar / desligar o numlock.
Martin Vegter
Quanto à outra solução, usando xmodmap, quando tentei a solução sugerida por Risto Salminen, o comando funcionou, mas perdi todas as minhas associações de teclas.
Martin Vegter
@MartinVegter Mhh, você pode tentar um sleep 3; numlockx onpara ligar a chave. Para a segunda solução, você tentou com o arranque automático?
Raphael Ahrens
Eu não entendo o porquê, mas ainda sleep 3; /usr/bin/numlockx onnão funciona. NumLockainda atua como um botão liga / desliga.
Martin Vegter
@MartinVegter /usr/bin/numlockx onfunciona no seu sistema?
Raphael Ahrens
13

talvez por mim acidentalmente apertando a NumLocktecla

Se o teclado for seu (em vez do seu empregador, por exemplo), remova-o fisicamente do teclado .

Você ainda pode pressioná-lo com algo pontudo, se realmente precisar.

insira a descrição da imagem aqui


fonte
4
Sim, +1. Simples é elegante.
ypercubeᵀᴹ
1
Infelizmente, o estado padrão do meu NumLuck é o errado :( #
1959 MichaelChirico
6

No teclado do meu laptop (Ubuntu 10.04), o bloqueio de teclado está ativado.

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

Voila! agora o numlock está desativado.

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

Coloca de volta. (Talvez torcer por Num_lock teria sido uma idéia melhor, mas você entendeu a essência).

Responda ao comentário de @Martin Vegter.

Ok , em resposta ao seu comentário, o xmodmap arruina suas ligações, entendido.

Acabei de verificar a documentação do Openbox

Dê uma olhada em ~ / .config / openbox / lxde-rc.xml

ls -l lxde-rc.xml (você também tem um rc.xml ?, verifique).

tire uma cópia dele como backup

(use um editor) procure por numlock (talvez nmlk).

Você vê algo assim?

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

Comente OU altere O valor-chave do atalho de teclas para uma alternativa, por exemplo, Alt-Numlock para alternar

key="A-Numlock"

Por exemplo

Para comentar

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

ou

Altere para alternar Alt + Numlock

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

salve as alterações e efetue logout / login ou reinicie.

X Tian
fonte
O problema é que qualquer xmodmapcomando (ou seja xmodmap -e 'keycode 77 = Escape') destrói minhas associações de teclas existentes, definidas em.config/openbox/lxde-rc.xml
Martin Vegter 11/11/13
1
Eu respondi acima para obter uma melhor formatação.
X Tian
Obrigado pela sua resposta. No entanto, no meu .config/openbox/lxde-rc.xml, não há linha contendo Numlockou Num_Lock. Quando crio um, ele não tem efeito: <keybind key = "Num_Lock"> <nome da ação = "Execute"> <comando> / bin / true </command> </action> </keybind>
Martin Vegter
1
Deve haver outro arquivo de configuração sendo lido antes daquele no seu diretório pessoal. dois lugares que sugiro procurar, / etc / xdg / openbox e / usr / share / ... Se isso não ajudar, terei que desistir - desculpe.
X Tian
de 3.4.7 log alterado (openbox) "Corrigir ligações de teclas sendo perdidas se várias ligações no mesmo nível não pudessem ser convertidas (corrige o VMWare fazendo com que as ligações de teclas do Openbox parem de funcionar)"
X Tian
5

Encontre o seu código numlock com xev. Por exemplo, aqui, Num_Lock é 77.

Use xmodmap para remapear o código da chave:

  • Para sessões X atuais, dentro de um shell, use xmodmap -e 'keycode 77 = '.
  • Para todas as futuras sessões X, dentro do ~/.xprofilelocal xmodmap -e 'keycode 77 = '.

    EDIT: Nota: Não funciona se um software estiver alterando o estado do Num Lock.

emp.justine
fonte
1
O comando xmodmap -e 'keycode 77 = 'funciona, mas ele faz com que um problema grave: todas as minhas combinações de teclas parar de trabalhar
Martin Vegter
Bem, você pode tentar mapeá-lo para uma chave válida e inofensiva. Como xmodmap -e 'keycode 77 = Escape'(YMMV, ESC parece seguro para mim). Você tem um arquivo ~ / .Xmodmap? Se sim, em vez de ~/.xprofile, coloque o keycode 77 = Escapeno final deste arquivo.
emp.justine
1
O problema é que qualquer xmodmapcomando (ou seja xmodmap -e 'keycode 77 = Escape') destrói minhas associações de teclas existentes que são definidas em.config/openbox/lxde-rc.xml
Martin Vegter 11/11/13
4

Apenas remova o mapeamento da tecla NumLock, mapeando-o para nada: primeiro execute xeve pressione Num Lock (provavelmente imprimirá 77) e, em seguida, execute o comando:

xmodmap -e "keycode # = """

onde # é o código-chave do NumLock.

Você também colocaria isso ~/.xprofilepara desativar o NumLock em x sessões.

Risto Salminen
fonte
Caso minha pergunta original não seja clara: não quero desativar o numlock. Eu quero o oposto Eu quero garantir que ele não pode ser desligado (Eu quero numlock sempre ligado)
Martin Vegter
Ah, obviamente tive um erro no meu pensamento, obrigado por me avisar. :) Vou ver se posso melhorar minha resposta.
Risto Salminen 06/11
isso não tem efeito no meu sistema:xmodmap -e "remove Lock = Num_Lock"
Martin Vegter 07/11
Agora o comando funciona, mas destrói todas as minhas combinações de teclas. Todas as ligações de teclas param de funcionar.
Martin Vegter 7/11
Bem, não deveria, de acordo com esta resposta no superusuário .
Risto Salminen
4

foto das opções do tecladocom o LinuxMint 17.2 e imagino outras versões do Ubuntu, você pode acessar a configuração do TECLADO e, em seguida, LAYOUTS nessa página, encontrará um pequeno botão "opções".

A partir daí, vá para "várias opções de compatibilidade" e marque "as teclas numéricas sempre digitam dígitos"

Este é um salva-vidas para mim. Me incomoda digitar um número e ser movido para outro lugar da página. Felicidades! ;)

flyingdrifter
fonte
1
Esta resposta deve ter muito mais pontos!
Carlos Gant
Isso pode ser feito também a partir de linha de comando, setxkbmap -option numpad:macou através da criação Option "XkbOptions" "numpad:mac"de xorg.conf.
j123b567 29/05
2

Outras respostas aqui sugeriram o uso numlockx oncom xmodmap -e 'keycode 77 =', mas numlockx onnão funcionariam no meu sistema junto com esse xmodmapcomando, mostrando uma mensagem de erro:

$ 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 também a configuração xmodmap -e 'keycode 77 ='removeria, por algum motivo, todos os meus atalhos de teclado feitos com xbindkeys.

Esta resposta a uma pergunta semelhante me ajudou, no entanto. Parte do meu ~/.xinitrc:

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

Dessa forma, o NumLock não faz nada por si só, mas se pressionado com Shift, ele serve ao seu propósito original (principalmente inútil) e, o mais importante, não impede o numlockx ontrabalho no meu sistema, nem atrapalha xbindkeysas combinações de teclas.

jojman
fonte
1

Outra maneira, se você deseja desativar a numlockchave, desative permanentemente. Você pode fazer isso modificando seu arquivo de mapa de teclas atual, modificando o código de chave 77.

Defina esse valor como "none", para que pressione acidentalmente a tecla não faça nada.

Use numlockxna inicialização para iniciá-lo e use o arquivo de mapa de teclas modificado em um dos scripts de inicialização, por exemplo, ~/.bashrcou em /etc/profile.

NOTA: Não testei isso, mas deve funcionar.

SHW
fonte
1

No OpenSuse 13.x com o KDE, isso funcionou para mim:

  • instalar numlockx
  • Adicionar atalho personalizado:
    • Atalhos personalizados -> Editar -> Novo -> Atalho global -> Comando / URL:
    • Nome da ação: NumLockOn
    • Comentário: mantenha o numlock ativado
    • Gatilho: defina como NumLockk
    • Ação-> Comando / URL: sh -c 'sleep 0.5; numlockx on'
    • Clique em Aplicar
    • (feito)

Se o NumLock precisar ser ativado porque está desativado, basta usar % numlockx on.

Timothy C. Quinn
fonte
Isto é o que eu preciso. Trabalhando no Xubuntu 16.04.
Kodmanyagha
0

Uma solução alternativa é adicionar um crontrabalho que execute o seguinte comando

setleds +num

a cada 30 segundos para ativar o NumLock.

Veja também

Joseph R.
fonte
0

Pode não ser a melhor solução, mas funcionou para mim:

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

Onde 11 é o ID do seu teclado. Faça uma xinputlista para determinar a identificação do seu teclado (no meu caso, são 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)]

Obviamente, numlockxdeve ser instalado para que isso funcione.

Explicação:

  • stdbuf -oL modifica as operações de armazenamento em buffer do fluxo de saída para a linha armazenada em buffer
  • xinput test 11 imprime as teclas pressionadas em stdout
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}'para cada linha impressa e contendo 77 (a tecla numlock), crie um comando /usr/bin/numlockx on...
  • | bash ... e canalize-o para o bash para executá-lo.

Você pode inserir esse oneliner em um dos scripts iniciais dos ambientes da área de trabalho ou executá-lo em segundo plano.

caos
fonte
0

Também quero que as teclas numéricas do teclado numérico sejam sempre números, nenhum dos itens do KP _....

Minha solução faz parte do meu Remapping Apple Keyboard para uso com o repositório Linux .

Basicamente, ele apenas remapeia Num_Lock como F20 e os números como eles mesmos.

Essa solução sempre fornece o resultado desejado e uma tecla de função extra como benefício adicional.

guivho
fonte
-1

Crie o script a seguir e torne-o executável com chmod +x <filename>

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

Coloque o caminho do arquivo .config/openbox/autostart

Ou coloque-o como um trabalho cron que verifica a cada dois minutos e executa o script se o numlocks estiver desativado.

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

Ou apenas execute o script em um loop.

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

Se você não tiver o numlockx, poderá obtê-lo com sudo apt-get install numlockx

Jeight
fonte
Não, essa certamente não é uma boa solução. Desculpe
Martin Vegter
1
Você pode explicar por que não?
8133 Jeight
1
Bem, porque é uma solução muito suja. Não resolve o problema subjacente, apenas varre os sintomas para debaixo do tapete.
Martin Vegter 11/11
Infelizmente, se o xmodmap não funcionar, você realmente não terá outras opções. Escrever um script para verificar e ativar o numlock, não está varrendo o problema para debaixo do tapete. Pense nisso como uma verificação e equilíbrio para digitar a tecla com força. Não há efeitos colaterais e o script pode ser facilmente parado / iniciado a qualquer momento. Realmente não é uma solução tão suja. Eu já vi muito pior no código-fonte real dos programas que você usa todos os dias.
11116 Jeight
como você pode ter tanta certeza que não tenho outras opções?
Martin Vegter