Mantenha o NumLock sempre ativado

8

Já removi fisicamente a tampa da tecla Num Lock, para não pressioná-la acidentalmente (uso um teclado muito compacto). Mas eu entendo que há um bug no xorg que alterna o Num Lock para offquando eu alterno o layout do teclado.

Então, eu preciso de algo que impeça o Num Lock "desligar", ou alternativamente (talvez seja mais fácil?) Monitore o estado do Num Lock e o ative assim que perceber que está "desligado".

Aqui está uma resposta do Unix que parece resolver isso, mas para o LXDE. O que preciso fazer para que essa ideia funcione no Ubuntu 15.04 e no Unity?

Não sei como monitorar ou consultar o estado do Num Lock ou como alterar programaticamente o estado do Num Lock, mas aqui está uma solução que usa um script simples que é executado o tempo todo. Parece que funcionaria, mas não tenho certeza se é inteligente ter isso funcionando o tempo todo?

Torben Gundtofte-Bruun
fonte

Respostas:

9

O mais limpo seria, obviamente, corrigir o erro, mas como solução alternativa, o script em segundo plano abaixo fará o trabalho:

#!/usr/bin/env python3
import subprocess
import time

key = "org.gnome.settings-daemon.peripherals.keyboard numlock-state"
while True:
    time.sleep(1)
    state = subprocess.check_output([
        "/bin/bash", "-c", "gsettings get "+key]).decode("utf-8").strip()
    if state != "'on'":
        subprocess.Popen([
            "/bin/bash", "-c", "gsettings set "+key+" 'on'"])

Como usar

  • Copie o script acima em um arquivo vazio, salve-o como NM_on.py
  • Execute o teste em segundo plano com o comando:

    python3 /path/to/NM_on.py
    
  • Se tudo funcionar bem, adicione-o a Aplicativos de inicialização: Dash> Aplicativos de inicialização> Adicionar, adicione o comando:

    /bin/bash -c "sleep 10 && python3 /path/to/NM_on.py"
    

Explicação

Podemos obter o Num Lockestado atual de mais de uma maneira:

  • executando o comando:

    xset q
    

    que dará uma saída como:

    Keyboard Control:
      auto repeat:  on    key click percent:  0    LED mask:  00000000
      XKB indicators:
        00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
        03: Compose:     off    04: Kana:        off    05: Sleep:       off
        06: Suspend:     off    07: Mute:        off    08: Misc:        off
        09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
        12: Group 2:     off    13: Mouse Keys:  off
      auto repeat delay:  500    repeat rate:  33
    .....
    

    ou com o comando:

    gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
    

    que simplesmente retorna 'on', 'off'ou 'unknown'.

    Como o último é extremamente leve, podemos muito bem usá-lo em um script em segundo plano para verificar uma vez por segundo e definir o valor 'on', se necessário, com o comando:

    gsettings set org.gnome.settings-daemon.peripherals.keyboard numlock-state 'on'
    

e assim faz ...


Editar

Por alguma razão, perdi seu último parágrafo, no qual você se referiu a outra resposta com uma solução semelhante.

Teoricamente, sempre tenho um problema com scripts que (re) aplicam cegamente as configurações, sem verificar o estado atual. Não poderia ser um argumento para fazê-lo, se o comando

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

para obter o valor atual, seria mais exigente do que simplesmente executar

numlockx on

para (re) definir numlockx on .
Observando a hora em que ambos os comandos precisam terminar (o que é pelo menos uma indicação), é o contrário; o comando

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

parece ser mais "leve".

Executando um script em segundo plano é uma má idéia?

Obviamente, se você não tiver motivos para executar um script em segundo plano, não o faça. Ao mesmo tempo, se um script em segundo plano for bem escrito, exaustivamente testado, os procedimentos forem otimizados de maneira inteligente e, se não adicionar nenhum efeito perceptível à ocupação do processador, seria bobagem não usar como solução alternativa, se adicionar importantes funcionalidade ou economiza seu tempo.

Eu constantemente tenho pelo menos 4-8 scripts em segundo plano em execução. A maioria deles por semanas sem reiniciar. Nunca notei nenhum efeito no (s) meu (s) sistema (s) idoso (s). Lembre-se de que seu sistema está executando vários loops de qualquer maneira.

Jacob Vlijm
fonte
Isso é brilhante - e maravilhosamente explicado. Muito obrigado!
Torben Gundtofte-Bruun 29/11
@ TorbenGundtofte-Bruun De nada! Se a resposta é o que você procura, você considera aceitá-la?
Jacob Vlijm
2
Claro, eu só queria implementá-lo e testá-lo primeiro :-) e agora faz parte do meu livro de receitas para futuras instalações.
Torben Gundtofte-Bruun 29/11
Com o meu Num Lock desligado, gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-stateainda retorna 'on'.
Rodrigo