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.