Usando Raspberry com ElectronJS em modo Quiosque

Não é desse tipo de quiosque que estamos falando

Temos um Raspberry e um desafio de fazer um sistema de senhas de atendimento que rode em qualquer plataforma.

Então instalamos node, um boilerplate do electron, uma interface gráfica e o YeAPF para fornecer um webservice acessível por um consumidor qualquer com uma tela tipo quiosque.

Instalando as coisas.

Estamos partindo do suposto que seu raspbian está já configurado com o mínimo de recursos possíveis (leia-se: sem GUI nem nada extra)

Instalando node

Primeiro usamos ssh para entrar no Raspberry e poder instalar de lá o node assim:

cd ~/
mkdir tmp-node
cd tmp-node
wget https://nodejs.org/dist/v8.2.1/node-v8.2.1-linux-armv7l.tar.xz
tar xfv node-v8.2.1-linux-armv7l.tar.xz
cd node-v8.2.1-linux-armv7l
sudo cp -R * /usr/local/

Instalando electron

Depois usando o mesmo terminal, instalamos o ElectronJS assim:

sudo npm install -g electron --unsafe-perm=true --allow-root

Instalando a interface gráfica

Como bom filho de peixe, esta truta aqui não tem interface gráfica. Então tivemos que instalar uma interface gráfica para alguém consiga enxergar alguma coisa e não apenas imaginar.

sudo apt-get update -y
sudo apt-get install --no-install-recommends -y xserver-xorg xinit
sudo apt-get install -y xfce4 xfce4-terminal
#vamos precisar desta livraria
sudo apt install libgconf2-4

Brincando com ElectronJS

Agora podemos clonar o electron-quick-start e começar a brincar com ele (Se está em MAC, Linux, Windows é a mesma coisa).

Só que isto deve ser feito do console do próprio RaspBerry para evitar uma alma angustiada.

cd ˜/
git clone https://github.com/electron/electron-quick-start quiosque
cd quiosque
npm install
export DISPLAY=:0
npm start

Feito isso, queremos que nosso aplicativo rode em modo Quiosque (se é que essa é a melhor tradução de

Kiosk) para tanto, vamos modificar o main.js

Então na função createWindow() vamos a acrescentar a seguinte linha logo após do mainWindow.loadFile(‘index.html’)

echo "Meu primeiro teste" > /dev/usb/lp0
echo 'Meu primeiro Teste' > /dev/usb/lp0
stat /dev/usb/lp1

 

Com isso, o aplicativo deve passar a rodar em tela cheia.

 

Configurando a inicialização do dispositivo

Configurando o Raspbian para fazer login automático

Agora precisamos modificar o /etc/lightdm/lightdm.conf para que o Raspberry não pare na tela de login. Ele deve ficar assim:

[Seat:*]
pam-service=lightdm
pam-autologin-service=lightdm-autologin
autologin-user=pi
autologin-user-timeout=0
session-wrapper=/etc/X11/Xsession
greeter-session=lightdm-greeter

No meu caso o usuário é pi mesmo, por isso que está pi.

Faça um reboot para ver se está tudo ok

Caso não funcione, pode ser que precise adicionar o usuário ao auto-login assim:

groupadd -r autologin
gpasswd -a pi autologin

Rodando nosso programa no login

Vamos precisar de um pequeno programa que inicie nosso programa. Isto facilitará as coisas para monitorar o programa por exemplo, ou para rodarmos outras coisas que não são do npm.

O chamaremos quiosque.sh e o colocaremos na pasta principal do usuário pi. Ou seja, ~pi/quiosque.sh (ou /home/pi/quiosque.sh que é a mesma coisa) com o seguinte conteúdo:

#!/bin/bash

logger Iniciando Quiosque
cd ~pi/quiosque && npm start
logger Finalizando Quiosque

Com isso, toda vez que chamar-mos ~pi/quiosque.sh, ele vai indicar que entrou em funcionamento e assim que ele finalizar (normalmente ou não) também o fará.

Podemos ver isso no /var/log/messages usando o tail

Criamos um arquivo em /home/pi/Desktop/ chamado quiosque.desktop com o seguinte conteúdo:

[Desktop Entry]
Name=meu-aplicativo
Comment=Quiosque
Exec=cd ~/quiosque && npm start
TryExec=cd ~/quiosque && npm start
Type=Application

E mudamos os direitos dele para poder ser executado

chmod +x /home/pi/Desktop/quiosque.desktop

Com isso, poderemos clicar duas vezes no atalho que deve ter aparecido no Desktop.

Finalmente, fazemos com que esse arquivo desktop seja chamado toda vez que fizermos login:

cd ~/.config/autostart/
ln -s ~/Desktop/quiosque.desktop .

Com isso, ao reiniciar o raspberry, o aplicativo deve aparecer em tela cheia.

Obvio que qualquer purista vai dizer que precisamos substituir o desktop. Mas isso já é farinha de outro saco. Para desenvolvimento, teste e demonstração está muito mais do que bom

Nosso desenvolvimento seguirá neste post mostrando como acessar o hardware diretamente