Monitor para exibição contínua com Raspberry Pi

Um monitor é bem útil para exibir continuamente uma tela de monitoramento ou mesmo um conjunto de imagens para decoração. Uma “smartTV” muitas vezes acaba sendo uma opção limitada, principalmente por não oferecer atualizações depois de um certo tempo, e um computador consome uma energia considerável se ficar ligado o tempo todo para controlar a apresentação das imagens. Assim, uma raspberry pi conectada a um monitor pode ser uma boa alternativa.

O monitor a ser utilizado deve trabalhar com conexão HDMI (ou usar um conversor), já que a rasp usa essa interface de vídeo. Dependendo da sua localização, é interessante conectar a raspberry a uma rede (wi-fi ou cabo) para evitar o uso de cabos muito longos no acesso ao sistema (o que muitas vezes pode ser bem complicado ou mesmo inviável).

O exemplo a seguir tem como objetivo abrir um navegador web e manter uma página de internet aberta, que em seu código HTML existe uma atualização a cada minuto. Além disso, devem ser feitas algumas configurações para resolver certos problemas inerentes a esse tipo de utilização.

Configurações

Para ganhar espaço na rasp, é recomendável desinstalar alguns programas que não serão utilizados, como esses:

sudo apt-get purge wolfram-engine minecraft-pi python-minecraftpi python-pygame

O sistema deve logar no usuário (pi, por exemplo) automaticamente e estar com o protetor de tela (“screen saver”) desabilitados. Essas opções podem ser incluídas no arquivo “/etc/lightdm/lightdm.conf” conforme segue:

[SeatDefaults]
autologin-user=pi
xserver-command=X -s 0 -dpms

O navegador a ser utilizado é o Chromium (navegador web de código aberto no qual o Google Chrome baseia o seu código-fonte), instalado através do comando “apt-get install chromium-browser”.

Para fazer o navegador abrir na inicialização (supondo que esteja usando LXDE) e também definir a página a ser exibida no monitor, você pode editar o arquivo “/etc/xdg/lxsession/LXDE/autostart” e inserir no final do arquivo as seguintes linhas:

@chromium-browser --kiosk --disable-translate --safebrowsing-disable-auto-update http://www.monolitonimbus.com.br

A opção “–safebrowsing-disable-auto-update” desabilita o “Safe Bloom Brwosing” (serviço de lista negra fornecido pelo Google que fornece listas de URLs para recursos da Web que contêm conteúdo de malware ou phishing), que acaba ocupando muito espaço em disco.

Quando o navegador fica aberto por muito tempo seguido, ele começa a acumular muita coisa no cache e pode lotar o espaço em disco em alguns dias. Para evitar esse problema, deve-se incluir no crontab uma linha para apagar o cache todo dia em um determinado horário. Para isso, execute a edição do agendamento de tarefas através do comando “crontab -e” e insira as seguintes linhas:

00 23 * * * sudo rm -rf  ~/.cache/chromium/Default/Cache/*
30 23 * * * sudo shutdown -r now

A segunda é opcional, para reiniciar o sistema operacional no fim do dia. Ao reiniciar corretamente, a resolução de tela volta ao normal e também desaparece aquela barra superior amarela dizendo que o programa foi fechado incorretamente, se for o caso. Essa mensagem também pode ser apagada editando o arquivo “/home/pi/.config/chromium/Default/Preferences” antes de abrir o Chromium, de modo a substituir “exited_cleanly:false” para “true” e “exit_type:Crashed” para “Normal”.

Desligamento/Religamento programado

O CEC é um protocolo que permite que dispositivos conectados por HDMI controlem uns aos outros de várias maneiras. Ele permite desligar e ligar o monitor automaticamente, por exemplo. Para isso, instale algumas dessas funcionalidades na rasp através do comando “sudo apt-get install cec-utils”. Também verifique se a TV está com os controles de ligar e desligar ativados. Para ligar e desligar a TV, a libCEC já tem alguns comandos diretos mais intuitivos:

echo 'standby 0' | cec-client -s <device>
echo 'on 0' | cec-client -s <device>

onde o dispositivo (“device”) pode ser encontrado executando “cec-client -l”. Esses comandos podem ser colocados em scripts a serem executados através do crontab em determinados horários. Nesse exemplo, a TV desliga às 9h da noite e religa às 7h da manhã:

00 21 * * * sudo /home/pi/tv_screen_off.sh 2>&1
00 07 * * * sudo /home/pi/tv_screen_on.sh 2>&1

Segue o script para desligar o monitor (tv_screen_off.sh):

#!/bin/bash
tvservice -o
echo "standby 0" | cec-client -s -d 1
#export DISPLAY=:0
#xset -dpms
#xset dpms force off
exit 1

E também o script para ligar o monitor (tv_screen_on.sh):

#!/bin/bash
tvservice -p
echo "on 0" | cec-client -s -d 1
#export DISPLAY=:0
#xset dpms force on
#xset +dpms
killall xscreensaver
exit 1

Esse esquema pode ser aplicado para o caso da fonte de energia da rasp for independente. Ou seja, caso ela esteja sendo alimentada pelo USB do monitor, ela também vai desligar quando for dado o comando para desligar o monitor. (Esse esquema tem as vantagens de não precisar de uma tomada extra pra rasp, que consome pouca energia, e também ser desligada através do controle remoto do monitor.) Nesse caso, pode-se simplesmente colocar a tela preta, dado pelos comandos “xset” comentados no código.

Por fim, você pode gravar uma imagem do cartão SD como backup, a ser usada no caso de corromper o cartão, para testes ou mesmo replicar em novas aplicações.

Agradecimento ao colega de laboratório Pedro Augusto Ribeiro pelas contribuições, principalmente na parte de desligamento/religamento programado.

Fontes

O’Brien Labs – Setup a Raspberry Pi Kiosk with Chromium

One comment

  1. Adorei seu artigo, unica coisa que faltaria pra mim, é uma forma de ao abrir o chorme, digitar um usuário e senha poir o sistema pro monitor uqe vou usar requer autenticação. sabe como poderia resolver isto?

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.