Colocar o Chromium em modo kioski no Raspberry

No artigo anterior vimos como colocar o Epiphany em modo kioski, trocando também o gerenciador de janelas padrão, LXDE, pelo matchbox-window-manager. Dessa vez vamos manter o LXDE e focar em colocar o Chromium em modo kioski.

Chromium browser

O Chromium é um navegador criado pelo Google. Na documentação foi descrito que “Chromium” seria o nome do projeto, enquanto o produto final seria o Chrome. Daí temos o navegador google-chrome para arquiteturas x86, mas utilizando o código original, acabamos tendo forks com o nome Chromium mesmo, como é no caso do Raspberry.

O Chromium, assim como o Epiphany, conta com o mesmo plugin flash para suprir a necessidade nos casos de servidores que ainda o utilizam.

Autostart do LXDE

Utilizando o LXDE, uma forma simples de iniciar o browser é através do arquivo /home/pi/.config/lxsession/LXDE-pi/autostart. Mas invés de passar a chamada diretamente para ele, fiz um script onde posso adicionar mais interação, sendo necessário em alguns casos.

Nesse arquivo adicionei a linha:

@/home/pi/bin/browserStart.sh

Chromium em modo kioski

O Chromium tem alguns recursos extras que o difere da maioria dos browsers. Por conta disso, também não é o mais leve, mas pode ser necessário em casos específicos relacionados a compatibilidade.

Do mesmo modo que qualquer outro browser, quereremos evitar a escrita no SD, portanto precisamos redirecionar o cache do browser assim como fizemos no artigo anterior, apontando-o diretamente para o sistema de arquivos na memória RAM.  Acontece que o Chromium tem parâmetros de linha de comando que nos permite definir tamanho de cache, diretório de cache e outras coisas mais. Assim sendo, o conteúdo do script de inicialização do browser ficou assim:

#!/bin/bash
cp /home/pi/bin/Preferences /home/pi/.config/chromium/Default/

/usr/bin/chromium-browser --noerordialogs --disable-session-crashed-bubble --disable-infobars --disk-cache-dir=/dev/shm/chromium --disk-cache-size=400000000 --kiosk https://url.do.srv.com.br
sleep 5


WID=$(xdotool search --onlyvisible --class chromium|head -1)
xdotool windowactivate ${WID}  key Alt+F11 sleep 1 key Alt+F11

WID=$(xdotool search --onlyvisible --class chromium|head -1)
xdotool windowactivate ${WID} sleep 1 key Ctrl+F5  
xdotool windowactivate ${WID} sleep 1 key Alt+F5  

É, no Chromium foi dureza resolver um problema que provavelmente a maioria das pessoas não terá, mas a URL começa a ser carregada antes mesmo do browser renderizar a janela, e isso é péssimo. Se houver um javascript que renderiza algo dependendo do tamanho da janela, a renderização ficará esquisita, por isso dei umas “chacoalhadas” no browser para as coisas irem para seu devido lugar. Deixei no código de exemplo porque pode ser útil para mais alguém.

Uma outra forma de resolver um problema de renderização é abrir a URL após o browser ser devidamente carregado. Para isso, o xdotool também pode fazer o preenchimento do endereço que deve ser carregado, mas preferi assim mesmo.

Desabilitar restore session no Chromium

O Chromium tem outra característica que acaba sendo um problema. Quando o sistema ou a interface gráfica é interrompida abruptamente, uma caixa de diálogo de restaurar sessão é aberta. O problema é que quando se está em modo kioski tudo que se quer é que a URL específica abra sem delongas. Em um email trocado com os desenvolvedores, vi a recusa de um código que permitiria desabilitar esse diálogo por linha de comando para quem usar o modo kioski. Pela rispidez do desenvolvedor, decidi abandonar o browser, e foi a partir daí que fiz testes com diversos outros. Enfim, há quem o use por opção, por isso escrevi esse artigo.

Essa pode ser a solução para a questão do restaurador de sessão. Funcionou em alguns, mas não em outros Raspberry.

sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences 
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences

Pelo browser tem uma opção que hipoteticamente deveria funcionar:

chrome://flags/#infinite-session-restore

Autoplay no Chromium

Há ainda mais um problema inconveniente; o autoplay precisa ser configurado. Abra o browser e digite:

chrome://flags/#autoplay-policy

Troque a opção para No user Gesture.

“Se tudo der certo e nada der errado”, a imagem de destaque deve ser o resultado. Vamos para o próximo browser, no próximo artigo – e espero que não prefira (ou não precise) usar o Chromium em modo kioski.

 

Revisão: Ricardo Amaral de Andrade

Djames Suhanko

Sobre o autor: Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.