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 Lock
estado 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.
gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
ainda retorna'on'
.