Autor Tópico: Controle de brilho (Brightness Control) Dell - Ubuntu  (Lida 4975 vezes)

Offline rodrigo.saraiva

  • Usuário Ubuntu
  • *
  • Mensagens: 1
    • Ver perfil
Controle de brilho (Brightness Control) Dell - Ubuntu
« Online: 01 de Novembro de 2007, 10:05 »
Alguém sabe alguma maneira para conseguir fazer funcionar o controle do brilho nos notebooks dell vostro utilizando linux (Ubuntu)? Está insuportável a busca na net por essa solução. Faltam informações oficiais da Dell e também da Canonical a respeito disso. Acho um absurdo um problema que vem sendo reclamado em todas as versões da distribuições não ter sido resolvido ainda.
Se é pra lançar uma versão a cada 6 meses, pelo menos corrijam os problemas da versão anterior.

Offline clcampos

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 10.790
  • .:: User Linux #439596 ::.
    • Ver perfil
Re: Controle de brilho (Brightness Control) Dell - Ubuntu
« Resposta #1 Online: 01 de Novembro de 2007, 10:27 »
Fazendo uma pesquisa encontrei muitos tópicos tratando deste assunto. Talvez não estejam resolvidos, mas vale mesmo olhar, vou até deixar alguns para você:

Programa para controle de brilho, contraste
Controle de brilho lcd notebook Hp
Itautec W7635 - Problemas com som e controle de brilho do LCD
Controle de Brilho/Contraste

Existem outros tópicos além destes aqui, passe pela pesquisa, de uma lida, tente entrar em contato com quem teve o mesmo problema através dos tópicos já abertos.

[]'s

Cristiano.

-- EDIT --

Qual é o modelo do seu note? Vi hoje mesmo alguém falando que instalou o Gutsy em um note Dell e esta perfeito, de repente ele pode te ajudar, passar informações de configuração do note dele.
« Última modificação: 01 de Novembro de 2007, 10:28 por clcampos »
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Offline mathdelic

  • Usuário Ubuntu
  • *
  • Mensagens: 20
    • Ver perfil
Re: Controle de brilho (Brightness Control) Dell - Ubuntu
« Resposta #2 Online: 06 de Novembro de 2007, 00:31 »
De fato, eu resolvi essa parada. Eu vinha escrevendo com cuidado, para lembrar bem todos os passos.

Apertem os cintos...


Dica: Congurando as teclas de controlhe de brilho do notebook.


Isso foi feito em um Dell Vostro 1000, sobre o Gutsy, mas muito pode ser adaptado para outros contextos. Principalmente para outros notebooks da DELL.

Não vou entrar em explicações técnicas pois o texto ficaria muito longo. Segue o que eu fiz aqui para botar as teclas de controlhe de brilho para funcinar.

Basedo nesta dica:
http://blog.eduardosouza.net/2007/09/21/teclas-de-funcao-no-vostro-1000-com-o-fedora-7-parte-1/

Usei o "xev" para ver como as teclas estavam mapeadas (veja a dica se quizer entender). A tecla para diminuir o brilho aqui ficou com keymap 101, e a de aumentar ficou com keymap 212.

Escolhi duas funções, não utilizadas para outras ações, para associar às teclas por meio do Xmodmap. Há também uma dependência, o pacote "libsmbios".
Segue o passo a passo:

Código: [Selecionar]
# Instalando dependência
sudo apt-get install libsmbios

# Associando as teclas de controle de brilho à funções disponíveis
sudo echo 'keycode 101 = SunVideoLowerBrightness' >> /etc/X11/Xmodmap
sudo echo 'keycode 212 = SunVideoRaiseBrightness' >> /etc/X11/Xmodmap

# Liberando permição para todos os usuários poderem mudar o brilho
sudo echo '#!/bin/sh' >> /etc/init.d/brightness
sudo echo 'chmod 777 /proc/acpi/video/VGA/LCD/brightness' >> /etc/init.d/brightness
sudo chmod +x /etc/init.d/brightness
sudo ln /etc/init.d/brightness /etc/rc2.d/S99brightness

# Exibindo o PATH
echo $PATH

 Se a pasta "$HOME/bin" não existir, ou se ela não estiver em seu PATH (olhe na saida do último comando acima), execute também:

Código: [Selecionar]
mkdir -p $HOME/bin
echo 'PATH=$PATH:$HOME/bin' >> $HOME/.bashrc

No lugar de $HOME/bin vc pode usar outra pasta dentro do PATH.

Examine agora a saída do seguinte comando:

Código: [Selecionar]
cat /proc/acpi/video/VGA/LCD/brightness

Se a lista de levels que aparecer for esta: 100 37 12 25 37 50 62 75 87 100, então está igual a minha. O level 100 não funcionou aqui e note que o level 37 está repetido, restando então 7 levels. A lista real, ordenada, é portanto: 12 25 37 50 62 75 87. Veja como fica a sua ai e, se for o caso, altere o comando que carrega esta lista no scrit abaixo, na linha 8 (brightness=(12 25 37 50 62 75 87)).

Salve este script a seguir como "$HOME/bin/brightness".

Código: [Selecionar]
#!/bin/bash
# By fabiolimath em gmail ponto com

logfile="$HOME/.brightness.log"

(

brightness=(12 25 37 50 62 75 87)

actual=`cat /proc/acpi/video/VGA/LCD/brightness | tail -n 1 | sed 's/current\:\ \([1-9][0-9]\)/\1/'`
echo "Actual = $actual"

for((i=0;i<${#brightness[*]};i++)); do

if [[ "${brightness[i]}" = "$actual" ]]; then

break;

fi;

done

echo "Level = $i"
echo

if [[ "$1" = "down" ]]; then

if [[ "$i" = "0" ]]; then

new="0"

else

new="${brightness[i-1]}"

fi

echo "Down: new = $new"
echo $new | dd of=/proc/acpi/video/VGA/LCD/brightness

fi

if [[ "$1" = "up" ]]; then

last=$((${#brightness[*]}-1))
echo "last = $last"

if [[ "$i" = "$last" ]]; then

new="$last"

else

new=${brightness[i+1]}

fi

echo "Up: new = $new"
echo $new | dd of=/proc/acpi/video/VGA/LCD/brightness

fi

) > $logfile  2>&1 &

Se tudo correu bem, basta o comando "brightness up" para aumentar o brilho e "brightness down" para diminuir. Para ver como andam as coisas é só olhar o log:

Código: [Selecionar]
cat $HOME/.brightness.log

Falta agora ligar esses comandos às funções mapeadas para as teclas de controlhe de brilho, ou seja, criar atalhos de teclado para esses comandos.

No KDE, eu criei dois itens pelo kmenuedit, que permite a escolha de atalhos de teclado. Neste caso, eu desmarquei a opção de histórico de lançamento, para não dar saida nenhuma na tela.

Com eu não uso gnome, não sei dizer como fazer atalhos nele, mas não deve ser mais difícil que os passos que vc seguiu até aqui :) Eu li por ai, que no gnome vc pode usar o Sistema>Preferências>Atalhos de Teclado, embora eu não tenha tentado.

Nota: quando eu troquei de gdm para kdm (veja no link mais abaixo) o xmodmap parou de ler o arquivo /etc/X11/Xmodmap. Para resolver isso (se vc usa kde), basta:

Código: [Selecionar]
echo 'xmodmap /etc/X11/Xmodmap' >> $HOME/.kde/Autostart/brightness
chmod +x $HOME/.kde/Autostart/brightness

Todo executável na pasta $HOME/.kde/Autostart/ será iniciado junto com a sesão do kde, seja um binário, um script ou um atalho (um arquivo de texto ".desktop" com determinada sintaxe, como todos os atalhos do kde).

Link explicando com trocar o gdm pelo kdm no boot:
http://ubuntuforum-br.org/index.php/topic,27537.msg157959.html#msg157959

Outros links úteis...

A saga do ArKanjo e cia:
http://ubuntuforum-br.org/index.php/topic,10324.0.html

A questão da vida útil dos hds:
http://alexblog.eeol.org/linux/aumentando-a-vida-util-dos-hds/

Tela preta (sem splash) e lentidão:
http://ubuntuforum-pt.org/index.php/topic,26729.msg157356.html#msg157356

Para o driver da ATI:
http://ubuntuforum-br.org/index.php/topic,27077.0.html



« Última modificação: 06 de Novembro de 2007, 12:33 por mathdelic »
Ubuntu 7.10 # Com KDE.
DELL Vostro 1000
Sempron Mobile 3500+ (1,8 GHz, 512 KB)
2 GB de SDRAM DDR2 de 533 MHz
80GB SATA
Integrada ATI Radeon® Xpress 1150 HyperMemoryTM

Chipset ATI RS485M / SB600
WXGA (1280x800) Widescreen de 15,4"

Offline jose_edil

  • Usuário Ubuntu
  • *
  • Mensagens: 2
    • Ver perfil
Re: Controle de brilho (Brightness Control) Dell - Ubuntu
« Resposta #3 Online: 14 de Janeiro de 2008, 03:45 »
Formatei o notebook esses dias e estava colocando pra funcionar isso de novo qd resolvi postar e achei a dica do colega mathdelic. Também tenho um Vostro 1000 e esse problema do brilho me impurtunou por um bom tempo, até que "resolvi resolver" na marra... O jeito mais rápido foi através de um script também.

Eu desenvolvi uma solução bastante parecida com a do colega, porém meu script não ficou tão elegante... Segue a transcrição.

Código: [Selecionar]
#!/bin/sh

BRIGHTNESS_FILE="/proc/acpi/video/VGA/LCD/brightness"

# Uses proc interface to get the lcd brightness level.
if [ /proc/acpi/video/VGA/LCD/brightness ]; then
value="`cat /proc/acpi/video/VGA/LCD/brightness | grep current: | awk '{printf $2;}'`"
else
echo "Could not read /proc/acpi/video/VGA/LCD/brightness"
exit 1
fi

case $value in
12)
# echo "Entering 12"
if [ "$1" = up ]; then
echo 25 > $BRIGHTNESS_FILE
exit 0
elif [ "$1" = down ]; then
echo "LCD brightness at minimun value"
exit 0
else
echo "Invalid argument."
echo "Usage: lcd-set-brightness {up|down}"
exit 1
fi
;;

25)
# echo "Entering 25"
if [ "$1" = up ]; then
echo 37 > $BRIGHTNESS_FILE
exit 0
elif [ "$1" = down ]; then
echo 12 > $BRIGHTNESS_FILE
exit 0
else
echo "Invalid argument."
echo "Usage: lcd-set-brightness {up|down}"
exit 1
fi
;;

37)
# echo "Entering 37"
if [ "$1" = up ]; then
echo 50 > $BRIGHTNESS_FILE
exit 0
elif [ "$1" = down ]; then
echo 25 > $BRIGHTNESS_FILE
exit 0
else
echo "Invalid argument."
echo "Usage: lcd-set-brightness {up|down}"
exit 1
fi
;;

50)
# echo "Entering 50"
if [ "$1" = up ]; then
echo 62 > $BRIGHTNESS_FILE
exit 0
elif [ "$1" = down ]; then
echo 37 > $BRIGHTNESS_FILE
exit 0
else
echo "Invalid argument."
echo "Usage: lcd-set-brightness {up|down}"
exit 1
fi
;;

62)
# echo "Entering 62"
if [ "$1" = up ]; then
echo 75 > $BRIGHTNESS_FILE
exit 0
elif [ "$1" = down ]; then
echo 50 > $BRIGHTNESS_FILE
exit 0
else
echo "Invalid argument."
echo "Usage: lcd-set-brightness {up|down}"
exit 1
fi
;;

75)
# echo "Entering 75"
if [ "$1" = up ]; then
echo 87 > $BRIGHTNESS_FILE
exit 0
elif [ "$1" = down ]; then
echo 62 > $BRIGHTNESS_FILE
exit 0
else
echo "Invalid argument."
echo "Usage: lcd-set-brightness {up|down}"
exit 1
fi
;;

87)
# echo "Entering 87"
if [ "$1" = up ]; then
echo "LCD brightness at maximum value"
exit 0
elif [ "$1" = down ]; then
echo 75 > $BRIGHTNESS_FILE
exit 0
else
echo "Invalid argument."
echo "Usage: lcd-set-brightness {up|down}"
exit 1
fi
;;

esac

exit 0

O meu script faz o mesmo que o do mathdelic, mas ficou bem mais extenso e menos portável, utilizando a interface /proc para controlar o brilho nesse modelo de notebook. No meu caso, ficou uma solução bem especifica pro Vostro 1000, já que outros modelos podem apresentar diferentes índices no controle do brilho.

Coloquei esse script na pasta /usr/bin e dei permissão de execução (chmod +x)...

No arquivo rc.local, adicionei as seguintes linhas:

Código: [Selecionar]
chmod 0666 /proc/acpi/video/VGA/LCD/brightness
echo 87 > /proc/acpi/video/VGA/LCD/brightness

Ta certo que assim o brilho sempre inicia no máximo, mas foi um jeito rápido de fazer a coisa funcionar.

OBS: no script do mathdelic, talvez seja melhor utilizar o valor 0666 para a permissão do arquivo /proc/acpi/video/VGA/LCD/brightness. 777 Abre geral... Sou adepto da teoria de que quanto menor a permissão necessária para realizar uma tarefa melhor.

OBS2: não sei bem porque, mas para funcionar o script sem ter que executar como root, preciso sempre fazer uma primeira escrita no aruivo, por isso a linha "echo 87 > /proc/acpi/video/VGA/LCD/brightness". Talvez tenha a ver com o 0666/777 acima... Vou testar pra ver.

De resto foi só associar as teclas no KDE como o colega citado fez, inclusive me inspirei no tutorial no mesmo blog.

O único problema desse tipo de solução é que o KPowerSave não consegue controlar o brilho da tela... Por isso tenho estudado algum módulo do kernel que possa fazer esse trabalho, mas ainda não andei muito pra frente...

Bem, sem mais... Abraços e obrigado mathdelic pelo tutorial... Ficou muito bom teu trabalho.

Offline mathdelic

  • Usuário Ubuntu
  • *
  • Mensagens: 20
    • Ver perfil
Re: Controle de brilho (Brightness Control) Dell - Ubuntu
« Resposta #4 Online: 14 de Janeiro de 2008, 10:16 »

No arquivo rc.local, adicionei as seguintes linhas:

Código: [Selecionar]
chmod 0666 /proc/acpi/video/VGA/LCD/brightness
echo 87 > /proc/acpi/video/VGA/LCD/brightness

Ta certo que assim o brilho sempre inicia no máximo, mas foi um jeito rápido de fazer a coisa funcionar.


Eu tentei colocar no rc.local mas não deu certo, pois este aquivo é criado acada boot quando o módulo de vídeo é carregado. Na verdade o problema é justamente nesse módulo, antes dele ser carregado o controle de brilho funciona, por exemplo, no menu do grub funciona  ???

Essa é mais uma questão de portabilidade. O momento em que o módulo de vídeo é carregado pode variar depndendo do sistema. Acho que o ideal é criar um cript próprio e incluí-lo na sequência de boot de modo que ele seja um ds últimos a ser chamado (o nome do arquivo começando com "S99"). Um modo prático de fazer isso é salvar o script em /etc/init.d/ e depois ativa-lo com o sysv-rc-conf.

OBS: no script do mathdelic, talvez seja melhor utilizar o valor 0666 para a permissão do arquivo /proc/acpi/video/VGA/LCD/brightness. 777 Abre geral... Sou adepto da teoria de que quanto menor a permissão necessária para realizar uma tarefa melhor.

 ;D É bem provável, mas fiquei com preguiça de testar, todavia no meu esquema é necessário dar permissão de leitura e escrita para todos os usuários. A permisão de execução "talvez" seja superflua, mas não testei.

OBS2: não sei bem porque, mas para funcionar o script sem ter que executar como root, preciso sempre fazer uma primeira escrita no aruivo, por isso a linha "echo 87 > /proc/acpi/video/VGA/LCD/brightness". Talvez tenha a ver com o 0666/777 acima... Vou testar pra ver.

A taxa de brilho é "lida" do arquivo /proc/acpi/video/VGA/LCD/brightness antes de ser aplicada pelo hardware. Por isso é necessário a permisão de escrita nele, para todos os usuários que irão poder modificar o brilho, sem executar como root.

Em matéria de segurança, acho melhor "abrir" as permições do arquivo /proc/acpi/video/VGA/LCD/brightness ao invéz de ter que dar permisão de root para uma tarefa de usuário. 

O único problema desse tipo de solução é que o KPowerSave não consegue controlar o brilho da tela...

Aqui funciona. Quando passo a usar a bateria o brilho diminue automáticamente. É disso que vc estava falando?

Por isso tenho estudado algum módulo do kernel que possa fazer esse trabalho, mas ainda não andei muito pra frente...

É, eu já vi alguns trabalhos nesse sentido, mas tudo muito experimental e passando por recompilar o kernel. Desculpe mas nem cheguei a guardar as referêncas...

Bem, sem mais... Abraços e obrigado mathdelic pelo tutorial... Ficou muito bom teu trabalho.

Valeu, mas acho que acabei rebuscando demais e acabou que ninguém tentou usar ainda.
« Última modificação: 14 de Janeiro de 2008, 10:19 por mathdelic »
Ubuntu 7.10 # Com KDE.
DELL Vostro 1000
Sempron Mobile 3500+ (1,8 GHz, 512 KB)
2 GB de SDRAM DDR2 de 533 MHz
80GB SATA
Integrada ATI Radeon® Xpress 1150 HyperMemoryTM

Chipset ATI RS485M / SB600
WXGA (1280x800) Widescreen de 15,4"

Offline jose_edil

  • Usuário Ubuntu
  • *
  • Mensagens: 2
    • Ver perfil
Re: Controle de brilho (Brightness Control) Dell - Ubuntu
« Resposta #5 Online: 14 de Janeiro de 2008, 20:04 »
Citar
Citação de: jose_edil em Hoje às 03:45
O único problema desse tipo de solução é que o KPowerSave não consegue controlar o brilho da tela...

Aqui funciona. Quando passo a usar a bateria o brilho diminue automáticamente. É disso que vc estava falando?

Era exatamente disso que eu estava falando... Vou testar a tua solução e ver se muda alguma coisa.


Citar
Citação de: jose_edil em Hoje às 03:45
Por isso tenho estudado algum módulo do kernel que possa fazer esse trabalho, mas ainda não andei muito pra frente...

É, eu já vi alguns trabalhos nesse sentido, mas tudo muito experimental e passando por recompilar o kernel. Desculpe mas nem cheguei a guardar as referêncas...

A minha idéia inicial foi trabalhar no módulo de vídeo do acpi... É ele quem permite controlar o bilho nos notes Vostro pelo /proc... Depois descobri que tem uns scripts que são chamados pelo acpi e que não funcionam aqui... É isto que estou estudando agora pra ver se alguma modificação neles resolve o problema, sem recompilar nada... Quando chegar em casa, posto a pasta pra quem quiser ver.

Abraços.