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).



@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.


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


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.


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.


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.


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! ;)


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.


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.


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.


Isto é o que eu preciso. Trabalhando no Xubuntu 16.04.
Kodmanyagha


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.


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.


-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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.