setpci - Criando um script para alterar manualmente o brilho

3

Eu posso usar algo como

setpci -s 00:02.0 F4.B=XX

substituindo 00: 02.0 pelo endereço do dispositivo (obtido via lspci | grep VGA) e XX com um valor entre 00 e FF (FF = 100%, 7F = 50%, etc ...) para alterar manualmente meu brilho de o terminal (como root, ou com chmods apropriados).

Eu gostaria de criar um script para alterar manualmente meu brilho por meio de pressionamentos de teclas. Para fazer isso, preciso obter o estado atual (XX acima) para transmitir ao script o brilho atual da tela.

Como posso obter o estado atual?

    
por MarkovCh1 15.05.2011 / 06:03

4 respostas

3

Acabei fazendo alguns scripts para resolver o meu problema.

  • Eu limitei os três scripts a seguir a teclas convenientes (CTRL + ALT + PGUP para brilho acima, CTRL + ALT + PGDN para brigthtness down e CTRL + ALT + HOME para restaurar o brigtness para um valor padrão).
  • Os scripts requerem setpci sudoless (provavelmente você pode jogar com alguns chmods depois de ver os erros que você recebe executando setpci para evitar a edição de sudoers) por meio de uma linha como:

    androith ALL = (todos) NOPASSWD: / usr / bin / setpci

  • Finalmente, você terá que manter um "arquivo de estado" em algo parecido com /home/androith/.scripts/brightness/ state contendo apenas um estado (BF para começar é OK).

brightness-up.sh

#!/bin/bash

# Get the stored state from file
exec < /home/androith/.scripts/brightness/state # stdin replaced by this file
read state # first line of file goes to state variable

# Increase the state, up to FF
new_state=$(echo "$[0x$state+0x10]") # in decimal
if [ "$new_state" -gt 255 ] # 255 = FF in hex
then
    echo "Already at maximal brightness."
else
    state=$(echo "obase=16; $new_state" | bc) # put into hex
    echo "Setting brightness to $state and storing state..."
    sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
    echo $state > /home/androith/.scripts/brightness/state
fi

brightness-down.sh

#!/bin/bash

# Get the stored state from file
exec < /home/androith/.scripts/brightness/state # stdin replaced by this file
read state # first line of file goes to state variable

# Decrease the state, down to FF
new_state=$(echo "$[0x$state-0x10]") # in decimal
if [ "$new_state" -lt 15 ] # 15 = 0F in hex
then
    echo "Already at minimal brightness."
else
    state=$(echo "obase=16; $new_state" | bc) # update and put into hex
    echo "Setting brightness to $state and storing state..."
    sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
    echo $state > /home/androith/.scripts/brightness/state
fi

brightness-default.sh

#!/bin/bash

# Set brightness to default value
state=AF
sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
echo $state > /home/androith/.scripts/brightness/state
    
por 16.05.2011 / 01:37
2

O Xbacklight não funciona no meu netbook; a luz de fundo não é visível para o subsistema ACPI. Eu hackeei esses dois scripts juntos, apesar de:

brightup.sh:

#!/bin/bash
var1='sudo setpci -s 00:02.0 f4.b | tr [:lower:] [:upper:]';
var2=$(echo "obase=16;ibase=16;${var1} + 8" |bc)
sudo setpci -s 00:02.0 f4.b=$var2

brightdown.sh:

#!/bin/bash
var1='sudo setpci -s 00:02.0 f4.b | tr [:lower:] [:upper:]';
var2=$(echo "obase=16;ibase=16;${var1} - 8" |bc)
sudo setpci -s 00:02.0 f4.b=$var2

O problema que estou tendo é que requer sudo. O objetivo final disso é configurar esses dois shell scripts para serem executados como atalhos de teclado, portanto, preciso descobrir como configurar o setpci para poder executar sem uma senha com o sudo. Eu sei, é provavelmente inseguro, e um kludge, mas eu não vejo nenhuma outra opção neste momento.

também, peço desculpas por necroar este tópico, mas estes são dois scripts que eu tenho procurado nas interwebs desde que voltei a usar o Linux diariamente.

    
por 25.12.2012 / 14:47
1

Existe um pequeno programa chamado xbacklight. Pode obter e definir o brilho da sua tela. Se você tem uma webcam, pode até definir o brilho automaticamente tirando uma foto, obtendo o brilho médio e ajustando o brilho da tela de acordo.

image='/home/kim/brightness.jpeg'
streamer -c /dev/video0 -b 16 -o $image >/dev/null 2>/dev/null && \
meanline='convert $image -colorspace gray -verbose info: | grep '^\s*mean: ''
if [[ $meanline =~ \((.*)\) ]]; then
    brightness="${BASH_REMATCH[1]}"
    brightness='echo "$brightness * 200" | bc'
    echo $brightness
    xbacklight -set $brightness
    xbacklight
fi
rm -f "$image"
    
por 15.05.2011 / 09:01
0

Eu sei que isso não é uma maneira muito segura de fazer isso ... mas funciona.

#!/bin/bash

password="your_password_here"

set_value_to=$(zenity --title="Brightness control" --scale --text="Adjust the     brightness value" --min-value=5 --max-value=95 --value=50)

echo $password | sudo -S setpci -s 00:02.0 f4.b=$set_value_to
    
por 22.10.2012 / 01:53