Melhorando a velocidade de execução do script de brilho da tela

3
xrandr --output LVDS-1 --brightness $(bc -l <<<"$(sed 's/Brightness: //' <<<$(xrandr --prop --verbose | grep Brightness)) $(if [ "$1" = "+" ];then echo +;else echo -;fi) 0.1")

Atualmente tenho este código configurado para um atalho de teclado no XFCE no meu sistema Arch, e funciona muito bem para ajustar o brilho para cima ou para baixo em 0,1 pontos. O único problema é que é lento o suficiente para levar um segundo ou mais para executar, e pressionar várias vezes é pior e pode retardar um pouco o computador inteiro.

Como você melhoraria o código? (Sou muito novo no shell de scripts, então também estou pedindo a ele para ver o processo pelo qual o código que escrevo será otimizado.)

EDIT: Ok, então eu segui sugestão de drewbenn de perfil e tenho isso:
hora xrandr -q --verbose > / dev / null
real 0m1.746s
usuário 0m0.007s
sys 0m0.000s

A consulta, então, foi o maior problema. Eu mudei para que ele armazenasse o nível de brilho atual em um arquivo em algum lugar e as teclas de atalho executassem o seguinte código:

#!/bin/bash
val=$(cat ~/.bright_key_folder/lvl)
if ( [ "$1" == "+" ] && [[ $(bc -l  ~/.bright_key_folder/lvl
    xrandr --output LVDS-1 --brightness $(cat ~/.bright_key_folder/lvl)
elif ( [ "$1" == "-" ] && [[ $(bc -l  0") == 1 ]] )
then
    bc -l  ~/.bright_key_folder/lvl
    xrandr --output LVDS-1 --brightness $(cat ~/.bright_key_folder/lvl)
fi

Em seguida, na inicialização, redefine o brilho e o valor do arquivo para 1.

    
por CalvinSchwa 12.05.2016 / 00:37

2 respostas

1

Se o código já estiver funcionando , mas rodando muito devagar, o próximo passo é iniciar a criação de perfil. Quando o script de shell, você pode usar time (tente help time para ver sua página de ajuda) para ver quanto tempo cada comando leva para ser executado.

Acho que bc deve ser muito rápido; sed contra uma linha também deve ser muito rápido; e grep também deve ser bastante rápido, então decidi testar os dois comandos xrandr no meu sistema. Eu só queria algumas estimativas rápidas, então tentei executar os comandos individualmente (em vez de, digamos, envolvê-los em um script para executá-los dezenas de vezes para obter uma média):

$ time xrandr --prop --verbose >/dev/null

real    0m0.428s
user    0m0.004s
sys     0m0.004s
$ time xrandr --output LVDS1 --brightness 0.9

real    0m0.117s
user    0m0.000s
sys     0m0.008s
$ 

Se obtiver resultados semelhantes, a sua consulta poderá estar a demorar mais tempo.

    
por 12.05.2016 / 00:46
2

Bem, por um lado, você está executando três programas externos separados quando um seria o suficiente. Você poderia fazer toda a análise e aritmética em awk , por exemplo:

xrandr --output LVDS-1 --brightness $(xrandr --prop --verbose | 
    awk "/Brightness:/{print \ $1 0.1; exit}")

O exit no script awk garante que não é necessário analisar toda a saída de xrandr --prop --verbose e sai após a primeira correspondência de Brightness: . Então, como o comando awk está entre aspas duplas, o $1 é expandido para o argumento fornecido ao script, enquanto o \ refere-se ao segundo campo em awk porque ele é de escape.

Você também pode tentar usar um shell mais rápido. Se o seu padrão for bash , tente executar o script com dash .

    
por 12.05.2016 / 11:41