Raspberry com Epiphany em modo kioski

Chromium em modo kioski | Epiphany em modo kioski | Midori em modo kioski

O Raspberry já é utilizado como servidor de mídia em diversos lugares; elevadores, restaurantes, shopping centers, consultórios médicos etc. Um dos casos de uso é a INRADIO (visite o site para compreender a solução), que oferece o serviço de rádio interna personalizada. Não é apenas colocar um Raspberry para tocar mp3, é um serviço de streaming, onde os royalties são devidamente pagos, as playlists são personalizáveis e utilidades públicas ou comerciais são tocados entre determinados intervalos de música, conforme a personalização efetuada na programação. O Raspberry é o computador da ponta e não interativo fisicamente (pois o player tem “controle remoto” online), mas uma das características é rodar o browser em modo kioski – que é quando o browser ocupa toda a tela, como se não houvesse outro componente de um desktop. Decidi escrever a respeito, mostrando como fazê-lo em diversos modos, com diversos browsers, começando por esse artigo com Epiphany em modo kioski.

Navegador Epiphany

O Epiphany não é o navegador padrão do Raspberry Pi OS (ou, “Raspbian”, antes da mudança de nome), mas está disponível no repositório de pacotes, assim como outros que disporei em artigos posteriores. Ele é um navegador leve, consegue executar flash (utilizando uma biblioteca, por padrão) e aparentemente consome menos do que o Chromium (do qual também escreverei posteriormente). O Epiphany é um browser do Gnome. Para quem não conhece o Gnome, trata-se de um desktop manager, cujo acrônimo significa “GNU Network Object Model Environment”, sendo GNU mais um acrônimo – dessa vez, recursivo – que significa “GNU is Not Unix”. Surgiu em idos de 1999, fazendo frente ao KDE. Mas encurtando a história, o Epiphany é um browser mais recente. Saber que faz parte do projeto GNOME subentende-se que foi programado em GTK. Projetos da base do KDE são programados em Qt. Essas são as informações relevantes relacionadas aos desktops manager.

Não é por fazer parte de um desktop que seja fundamental rodá-lo sobre ele, mas os programas feitos em GTK tem dependências menos significativas do que os feito em Qt – particularmente, para o KDE, que acaba tendo uma base de dependências grande e por fim, pode consumir recursos demasiados do sistemas para executar tarefas menos complexas.

Cache do browser

Por padrão a maioria dos browsers fazem cache no diretório ~/.config, que é o home do usuário (/home/pi). O problema é que se estivermos usando o browser em um serviço de streaming, gravar nesse diretório destruirá rapidamente o SD. Mas existem diferentes soluções para esse problema.

Antes de executarmos o Epiphany em modo kioski, devemos acautelarmo-nos em relação ao cache. Onde gravar se não no SD? No melhor lugar possível; diretamente na memória RAM. Para isso, utilizaremos o recurso do Linux chamado ramfs, ou, “sistema de arquivos em memória RAM”. Já escrevi sobre a utilização do ramfs de outro modo, nesse artigo. Agora vamos utilizar um recurso transparente, que é o dispositivo de sistema /dev/shm. Aqui não temos limitação de uso, o que pode ser negativo. Esgotar o shm significa esgotar a RAM do sistema. Se no seu caso for necessário mais cuidado com essa questão, utilize o recurso desse artigo.

Para executar o Epiphany em modo kioski e apontar o cache diretamente para /dev/shm, faça um script com o seguinte conteúdo:

#!/bin/bash
mkdir /dev/shm/epiphany
XDG_CACHE_HOME=/dev/shm/epiphany WEBKIT_DISABLE_TBS=1 epiphany-browser -a --profile /home/pi/.config/ https://url.do.servidor.com.br &

Se deseja evitar o desligamento da tela (quase sempre é desejado), adicione isso ao início do script:

xset -dpms
xset s off
xset s noblank

Depois, torne o script executável e execute-o:

chmod 750 seuScript.sh
./seuScript.sh

Dependendo da IDE que estiver utilizando, pode ser necessário forçar o fullscreen. Nesse caso, temos duas opções.

xautomation

Esse é um programa para interagir com o servidor gráfico através da linha de comando. Considerando que exclusivamente o browser estará aberto e portanto, a janela em foco, podemos colocar o Epiphany em modo kioski no LXDE adicionando uma linha após a chamada do browser. Para instalar o recurso, utilize:

sudo apt-get -f install xautomation

E em seu script, adicione essa linha ao final:

xte "key F11" -x:0

A segunda opção é utilizar o xdotool, do qual já escrevi a respeito algumas vezes, como nesse artigo. O que precisaremos fazer é pegar o ID da janela, tornar a janela ativa e então executar o Alt+F11. Se optar por essa ferramenta, adicione essas linhas ao final do script:

WID=`xdotool search --onlivisible --class epiphany|head -n1`
xdotool windowactivate ${WID} sleep 2 key Alt+F11

Servidor gráfico mínimo

Por padrão, o Raspberry utiliza LXDE como interface gráfica. Ele é leve, mas já experimentei componentes da barra de tarefas matando o sistema, como o wicd. Se fez a configuração de rede pelo wpa_supplicant (para o wifi) ou pelo /etc/network/interfaces (para ethernet), então não há razão para utilizar o LXDE, uma vez que tudo o que se deseja é ver o browser ocupando toda a tela. Se tiver essa opção, instale o Raspbian (ou Raspberry Pi OS) mínimo, então proceda como a seguir:

sudo apt-get update
sudo apt-get install epiphany-browser matchbox-window-manager xserver-xorg x11-xserver-utils unclutter xinit

Instalados os pacotes, devemos relacionar o pi com a tty. Podemos fazer:

gpasswd -a pi tty
sed -i '/^exit 0/c\chmod g+rw /dev/tty?\nexit 0' /etc/rc.local

Crie ou edite um dos arquivos; .bashrc ou .profile, então adicione:

if [ -z "${SSH_TTY}" ]; then
  xinit ~/seuScript.sh
fi

Trocar o LXDE pelo matchbox-window-manager

Se você já tem um sistema e só pretende melhorá-lo, inicie fazendo um backup do cartão de memória, então siga daqui.

Instalar o matchbox-window-manager

O servidor gráfico já estará em seu sistema, obviamente. Apenas instale o window manager dessa maneira:

sudo su
apt-get update
apt-get install -y matchbox-window-manager libmatchbox1

Precisaremos editar o arquivo de configuração do lightdm:

nano /etc/lightdm/lightdm.conf

E remover o comentário da user-session e autlogin-user, deixando-os assim:

user-session = matchbox-window-manager
autologin-user = pi

Tentei configurar o matchbox utilizando o update-alternatives:

sudo update-alternatives --config x-session-manager

Porém, se não estava entre as opções, então segui os processos descritos nesse artigo.

Configurando o autologin pela ferramenta de sistema, não obtive sucesso, mas você pode experimentar primeiro o programa raspi-config:

sudo raspi-config

Entre na opção 3:

 Epiphany em modo kioski

Depois, escolha a opção B4:

 Epiphany em modo kioski

Ainda em Boot Options, selecione a opção Wait for Network at Boot, para não iniciar o Epiphany em modo kioski antes de haver conectividade.

O script final deverá ficar assim:

#!/bin/bash
xset -dpms
xset s off
xset s noblank
export DISPLAY=:0
matchbox-window-manager -use_titlebar no &

export XDG_CACHE_HOME=/dev/shm/epiphany/
DISPLAY=:0 WEBKIT_DISABLE_TBS=1 epiphany-browser -a --profile /home/pi/.config/ https://url.do.servidor.com.br &

No arquivo /home/pi/.profile (o escolhido para execução única após a carga do sistema), adicionei essa linha ao final:

/home/pi/seuScript.sh

Criei também o arquivo .xinitrc com a execução do matchbox:

exec matchbox-window-manager

Não sei a razão, confesso, mas em uma das inicializações me apareceu o lxpanel. Procurei pela inicialização do LXDE, mas ele não foi inicializado, então, não faço ideia do que chamou o painel, uma vez que não está em nenhum arquivo do home do usuário. Então, entrei no diretório /usr/bin e fiz apenas isso:

sudo su
cd /usr/bin
mv lxpanel lxpanel-old
echo "exit 0" >lxpanel
chmod 755 lxpanel

No final, deve aparecer uma tela como a da imagem de destaque.

Agora vamos ao próximo browser; mas no próximo artigo!

 

Revisão: Ricardo Amaral de Andrade