Mantenha o NumLock sempre ligado

8

Já removi fisicamente a tecla Num Lock, por isso não a pressiono acidentalmente (uso um teclado muito compacto). Mas eu entendo que há um bug no xorg que muda o Num Lock para off quando eu troco o layout do teclado .

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

Aqui é uma resposta Unix que parece resolver isso, mas para o LXDE. O que eu precisaria fazer para fazer essa ideia funcionar no Ubuntu 15.04 e no Unity?

Eu não sei como monitorar ou consultar o estado Num Lock, ou como alterar programaticamente o estado Num Lock, mas aqui é 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?

    
por Torben Gundtofte-Bruun 29.11.2015 / 16:32

1 resposta

9

O mais claro seria, claro, para corrigir o bug, mas como uma solução alternativa, o script de plano de fundo 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
  • Teste-o em segundo plano com o comando:

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

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

Explicação

Podemos obter o estado atual Num Lock de mais de uma forma:

  • executando o comando:

    xset q
    

    que fornecerá 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 usá-lo em um script de segundo plano para verificar uma vez por segundo e definir o valor como 'on' , se necessário, com o comando:

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

e assim acontece ...

Editar

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

Puramente teoricamente, sempre tenho um problema com scripts que cegamente (re-) aplicam configurações, sem verificar o estado atual. Existe poderia ser um argumento para fazer isso, se o comando

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

para pegar o valor atual, seria mais exigente que simplesmente rodasse

numlockx on

para (re) definir numlockx on .
Olhando para o tempo que ambos os comandos precisam terminar (o que é pelo menos uma indicação), é no entanto o contrário; o comando

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

parece ser mais "leve".

A execução de um script de segundo plano é uma má ideia?

Claro, se você não tiver motivos para executar um script de plano de fundo, não o faça. Ao mesmo tempo, se um script de segundo plano é bem escrito, completamente testado, os procedimentos são otimizados de maneira inteligente e se não adiciona nenhum efeito perceptível à ocupação do processador, Seria bobagem não usar como solução alternativa se adicionar funcionalidades importantes ou economizar 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 meu sistema de idosos. Tenha em mente que seu sistema está executando vários loops de qualquer maneira.

    
por Jacob Vlijm 29.11.2015 / 18:06

Tags