Mantenga NumLock siempre activado

8

Ya he quitado físicamente la tapa de la tecla Bloq Num, así que no la presiono accidentalmente (uso un teclado muy compacto). Pero entiendo que hay un error en xorg que alterna el bloqueo numérico offcuando cambio la distribución del teclado.

Por lo tanto, necesito algo que evite que el Bloq Num esté "desactivado" o que, alternativamente (¿quizás sea más fácil?) Supervise el estado del Bloq Num y lo active "tan pronto como se dé cuenta de que está" desactivado ".

Aquí hay una respuesta de Unix que parece abordar esto, pero para LXDE. ¿Qué necesitaría hacer para que esta idea funcione en Ubuntu 15.04 y Unity?

No sé cómo monitorear o consultar el estado de Num Lock, o cómo cambiar programáticamente el estado de Num Lock, pero aquí hay una solución que usa un script simple que se ejecuta todo el tiempo. Parece que funcionaría, pero no estoy seguro de que sea inteligente tener eso funcionando todo el tiempo.

Torben Gundtofte-Bruun
fuente

Respuestas:

9

Por supuesto, lo más limpio sería corregir el error, pero como solución alternativa, el script de fondo a continuación hará el trabajo:

#!/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'"])

Cómo utilizar

  • Copie el script anterior en un archivo vacío, guárdelo como NM_on.py
  • Pruébelo en segundo plano con el comando:

    python3 /path/to/NM_on.py
    
  • Si todo funciona bien, agréguelo a Aplicaciones de inicio: Tablero> Aplicaciones de inicio> Agregar, agregue el comando:

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

Explicación

Podemos obtener el Num Lockestado actual de más de una manera:

  • ejecutando el comando:

    xset q
    

    que dará una salida 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
    .....
    

    o con el comando:

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

    que simplemente regresa 'on', 'off'o 'unknown'.

    Dado que este último es extremadamente liviano, podemos usarlo en un script de fondo para verificar una vez por segundo y establecer el valor 'on', si es necesario, con el comando:

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

y así es ...


Editar

Por alguna razón, me perdí tu último párrafo, en el que te referías a otra respuesta con una solución similar.

Teóricamente, siempre tengo un problema con los scripts que ciegamente (re) aplican configuraciones, sin verificar el estado actual. No podría ser un argumento para hacerlo, si el comando

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

para obtener el valor actual, sería más exigente que simplemente ejecutar

numlockx on

para (re) configurar numlockx on .
Mirando el momento en que ambos comandos deben terminar (que es al menos una indicación), es al revés; El comando

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

parece ser más "ligero".

¿Ejecutar un script de fondo es una mala idea?

Por supuesto, si no tiene ninguna razón para ejecutar un script de fondo, entonces no lo haga. Al mismo tiempo, si un script de fondo está bien escrito, probado exhaustivamente, los procedimientos están optimizados de manera inteligente, y si no agrega ningún efecto notable en la ocupación del procesador, sería una tontería no usarlo como una solución alternativa si agrega importantes funcionalidad o le ahorra tiempo.

Constantemente tengo al menos 4-8 scripts de fondo ejecutándose. La mayoría de ellos durante semanas sin reiniciar. Nunca noté ningún efecto en mi (s) sistema (s) de edad avanzada. Tenga en cuenta que su sistema ejecuta numerosos bucles de todos modos.

Jacob Vlijm
fuente
Esto es brillante, y maravillosamente explicado. ¡Muchas gracias!
Torben Gundtofte-Bruun
@ TorbenGundtofte-Bruun ¡De nada! Si la respuesta es lo que está buscando, ¿consideraría aceptarlo?
Jacob Vlijm
2
Claro, solo quería implementarlo y probarlo primero :-) y ahora es parte de mi libro de cocina para futuras instalaciones.
Torben Gundtofte-Bruun
Con mi bloqueo numérico apagado, gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-stateaún regresa 'on'.
Rodrigo