Sem luz indicadora de caps lock?

1

Desde que eu primeiro Ubuntu dual-booted 16.04 no meu Surface Pro 3, o meu LED indicador de Caps Lock no meu teclado não funcionou. Eu decidi tentar fazer algo sobre isso recentemente. Quando eu digito o comando

echo 1 | sudo tee /sys/class/leds/input45\:\:capslock/brightness

A luz acende, então é pelo menos acessível. Eu não tenho certeza do que fazer para ligar ou desligar a luz, dependendo do estado do caps lock. Qualquer ajuda seria muito apreciada.

    
por Leandro 18.11.2016 / 23:00

1 resposta

2

Aparentemente, de alguma forma, o led não é definido automaticamente. O plano de fundo abaixo cuidará disso:

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

led = "/sys/class/leds/input45::capslock/brightness"

while True:
    time.sleep(1)
    ledstate = open(led).read().strip() == "1"
    capstate = "Caps Lock:   on" in \
            subprocess.check_output(["xset", "-q"]).decode("utf-8")
    if ledstate != capstate:
        newled = "0" if capstate == False else "1"
        open(led, "wt").write(newled)

Como usar:

  • Copie o script em um arquivo vazio, salve-o como fix_led (sem extensão) em /usr/local/bin e torne-o executável .
  • Como você precisa editar o arquivo /sys/class/leds/input45::capslock/brightness , é necessário adicionar o script ao arquivo sudoers, conforme explicado, por exemplo, aqui .
  • Teste- execute o script executando

    sudo /usr/local/bin/fix_led
    

    em um terminal, teste sua tecla Caps Lock .

  • Agora adicione o script aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    /bin/bash -c "sleep 10 && sudo /usr/local/bin/fix_led"
    

É isso. Na próxima reinicialização (log in), deve funcionar.

Notas

  • Naturalmente, o patch deve funcionar em todas as situações em que o led não está funcionando. a localização exata do arquivo capslock/brightness pode variar no entanto. Defina, se necessário, a localização na linha:

    led = "/sys/class/leds/input45::capslock/brightness"
    

    na cabeça do script (não escape do : in python ). Eu testei o script fazendo com que ele definisse o led da maneira errada :) (foi desligado quando Caps Lock estava ligado, ligado quando estava desligado).

  • A carga extra do script não é nenhuma.

Explicação

Informações sobre o estado atual do podem ser buscadas pelo comando:

xset -q

Uma vez por segundo, o script verifica se Caps Lock: on está na saída. O script também verifica se o estado atual corresponde ao estado de led (1 ou 0), conforme lido no arquivo capslock/brightness .

Se estes dois não corresponderem, o script define o estado do led de acordo com o estado real Caps Lock .

    
por Jacob Vlijm 19.11.2016 / 08:43