Modo Quiosque com Raspberry Pi – Configuração 67

O modo quiosque (kiosk mode) é um recurso que permite que apenas um aplicativo seja executado dentro de um sistema operacional, limitando a navegação do usuário por uma página web específica.

No modo quiosque a página é vista em tela cheia, não é possível acessar o menu do browser ou mudar a URL pela barra de endereços. Também não é possível clicar com o botão direito do mouse e usar o menu. Ou seja, o usuário tem a navegação limitada a uma página específica e só consegue ir para outras páginas caso a página que ele esteja usando possua um link que o direcione para tal.

O modo quiosque, por exemplo, pode bloquear um aplicativo de ponto de venda para que evitar que os clientes saiam do aplicativo e naveguem em outros aplicativos ou fechem o mesmo. Já em um ambiente de negócios, o modo quiosque pode fornecer uma aplicação para execução uma tarefa específica, melhorando a eficiência durante a execução da tarefa.

YouTube video

Nesse primeiro post será abordada a configuração do Modo Quiosque. No próximo post vamos mostrar como acessar remotamente seu Raspberry Pi Quiosque.

Instalação do Raspbian

Pra configurar Raspberry Pi como Modo Quiosque é necessário ter um sistema operacional já instalado. Nesse tutorial foi usado o Raspbian e o passo-a-passo da instalação do mesmo pode ser vista aqui. O download do sistema operacional usado nesse tutorial pode ser feito no site oficial da Raspberry Pi Foundation.

Preparando o Raspbian para o Modo Quiosque

Abra o Terminal (crtl+alt+t).

Antes de tudo é recomendável remover alguns pacotes que não são necessários no seu Raspberry Pi Quiosque. A remoção desses pacotes liberará espaço na memória e reduzirá o número de pacotes que serão atualizados sempre que seu Raspberry Pi for atualizado. Para isso, basta executar os seguintes comandos:

sudo apt-get purge wolfram-engine scratch scratch2 nuscratch sonic-pi idle3 -y
sudo apt-get purge smartsim java-common minecraft-pi libreoffice* -y

Agora que os pacotes foram removidos, é necessário executar os comandos de limpeza:

sudo apt-get clean
sudo apt-get autoremove -y

Depois de fazer a limpeza, é necessário verificar se o Raspbian está atualizado. Para isso, digite os seguintes comandos:

sudo apt-get update
sudo apt-get upgrade

Agora precisamos instalar o xdotool e o unclutter. O xdotool permite que o nosso script faça o pressionamento das teclas sem que ninguém esteja usando o dispositivo. E o unclutter permite esconder o mouse da tela.

sudo apt-get install xdotool unclutter sed

Para que não seja necessário fazer o login toda vez que seu Raspberry Pi Quiosque for iniciado, vamos habilitar a função autologin. Digite o seguinte comando:

sudo raspi-config

Selecione 3 Boot Options.

Autologin Modo Quiosque (3 Boot Options)

Selecione B1 Desktop/CLI.

Autologin Modo Quiosque (B1 Desktop/CLI)

Selecione B4 Desktop Autologin.

Autologin Modo Quiosque (B4 Desktop Autologin)

Agora o Raspbian está preparado para o Modo Quiosque!

Escrevendo o script para o Raspberry Pi Quiosque

Agora precisamos escrever o script para o Raspberry Pi Quiosque. Esse script será responsável por iniciar o Chromium e simular o acionamento das teclas. Para criar o script execute o seguinte comando:

nano /home/pi/kiosk.sh

Dentro desse arquivo, digite as linhas de código que seguem. Vamos explicar cada uma delas, para que você possa adaptar conforme sua necessidade. Essa primeira linha define como o interpretador de comandos vai executar o arquivo.

#!/bin/bash

Essa três linhas impedem que o gerenciador de energia desligue ou apague a tela.

xset s noblank
xset s off
xset -dpms

Essa linha executa o programa unclutter, anteriormente instalado. Essa aplicação esconde o mouse da tela sempre que o mesmo estiver ocioso por mais de 0,5 segundos. Você pode ajustar a tempo conforme deseja ou, se deseja esconder o mouse imediatamente, remova o -idle 0.5 do comando.

unclutter -idle 0.5 -root &

Essas duas linhas de script são responsáveis por limpar qualquer mensagem que aparecer na barra de aviso do Chromium.

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

Esta linha entrega ao Chromium nossos parâmetros.

/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk https://www.makerhero.com https://www.raspberrypi.org

Vamos passar por cada um desses parâmetros para que você saiba para que servem e como modificá-los. Esse comando informa ao Chromium que ele não deve exibir nenhuma mensagem de erro para o usuário final.

--noerrdialogs

Esse comando impede que o Chromium exiba sua barra de informações para o usuário final.

--disable-infobars

Essa opção coloca o Chromium em modo quiosque, fazendo assim que o acesso fique limitado.

--kiosk

Estas são as duas páginas web que o script abrirá, cada uma será aberta em uma nova guia. Você pode adicionar outras páginas web, basta separar cada uma delas com um espaço.

https://www.makerhero.com https://www.raspberrypi.org

Essas linhas repetem o comando usando xdotool, também instalado anteriormente. No caso o loop imita o pressionamento das teclas ctrl+tab, fazendo o Chromium mudar para a próxima guia. Depois que o xdotool executa o pressionamento das teclas, ele coloca o loop em suspensão por 20 segundos. Você você alterar o tempo de espera se achar necessário.

while true; do
xdotool keydown ctrl+Tab; xdotool keyup ctrl+Tab;
sleep 20
done

No final, você terá um script parecido com esse:

#!/bin/bash

xset s noblank
xset s off
xset -dpms

unclutter -idle 0.5 -root &

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

/usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk https://www.makerhero.com https://www.raspberrypi.org &

while true; do
xdotool keydown ctrl+Tab; xdotool keyup ctrl+Tab;
sleep 20
done

Salve o arquivo pressionando as teclas crtl+x, em seguida y e depois enter.

Iniciando o Raspberry Pi Quiosque

Para que o nosso Raspberry Pi Quiosque inicie na inicialização, precisaremos criar um arquivo de serviço executando o comando abaixo. Este arquivo de serviço informará ao sistema operacional qual arquivo queremos que seja executado e também  informará como queremos que a interface gráfica esteja disponível antes de iniciar o software.

sudo nano /lib/systemd/system/kiosk.service

Dentro do nosso arquivo de serviço de kiosk, insira as seguintes linhas de texto. Essas linhas definem nosso serviço de kiosk e também indicam que queremos executar nosso script kiosk.sh.

[Unit]
Description=Chromium Kiosk
Wants=graphical.target
After=graphical.target

[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
Type=simple
ExecStart=/bin/bash /home/pi/kiosk.sh
Restart=on-abort
User=pi
Group=pi

[Install]
WantedBy=graphical.target

Salve o arquivo pressionando as teclas crtl+x, em seguida y e depois enter. Agora que criamos o arquivo de serviço para o nosso Raspberry Pi Quiosque, podemos ativá-lo executando o seguinte comando:

sudo systemctl enable kiosk.service

Para iniciar o Modo Quiosque use o seguinte comando:

sudo systemctl start kiosk.service

Pronto, seu Raspberry Pi Quiosque está funcionando!

YouTube video

Caso você deseje parar o Modo Quiosque, abra o terminal (crtl+alt+t) e execute o seguinte comando:

sudo systemctl stop kiosk.service

E se quiser desabilitar o Modo Quiosque, execute o comando a seguir:

sudo systemctl disable kiosk.service

São várias as aplicações do Modo Quiosque. No próximo post iremos abordar quais as maneiras de acessar o Raspberry Pi Quiosque remotamente.

Gostou? Ajude nosso blog a ficar cada vez melhor deixando seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

67 Comentários

  1. Boa tarde,

    Gostaria de saber o que precisar acrescentar ou mudar para que a pagina do chromium troque para outra pagina a cada 50 segundos, e que fique trocando entre duas paginas a cada 50 segundos.

  2. Olá, baixei a versão ‘Release date: February 21st 2023’ do Rasbian e identifiquei que esta versão vem com ‘nosuid’ para o diretório /home, de maneira que, se seguirmos o tutorial como está, não funciona.
    A solução mais simples não é recomendada do ponto de vista da segurança (habilitar suid no home) então, apenas salvei o arquivo em /usr/local/bin e alterei os arquivos para tratarem o script neste local. Funcionou corretamente.
    Se alguém já tiver seguido todo o tutorial e chegou no mesmo problema, os passos para adaptação são os seguintes:
    1) Mova o arquivo para /usr/local/bin/:
    mv kiosk.sh /usr/local/bin
    2) Altere a linha “ExecStart” do arquivo de inicialização do serviço:
    sudo vim.tiny /lib/systemd/system/kiosk.service
    ExecStart=/bin/bash /usr/local/bin/kiosk.sh
    3) Verifique se o arquivo abaixo também está correto quanto ao caminho do ‘kiosk.sh’ e nomes de usuário e grupo:
    sudo vim.tiny /etc/systemd/system/graphical.target.wants/kiosk.service
    4)Atualize o sistema referente à alteração:
    sudo systemctl daemon-reload
    5)Verifique se o servido ficou habilitado:
    sudo systemctl is-enabled kiosk.service
    6) Caso não esteja, habilite:
    sudo systemctl enable kiosk.service
    7)Reinicie o serviço para testar:
    sudo systemctl status kiosk.service
    8) Reinicie o Raspberry.
    Se precisar parar o serviço em algum momento, utilize:
    sudo systemctl stop kiosk.service

    Saudações makers! ;D

    1. Bom dia Jorge.

      Muito obrigado por essa solução!

      Att.
      Vitor Mattos.
      Suporte Técnico Maker Hero.

  3. Configurei meu raspberry seguindo o tutorial acima, ocorre que minha tela precisaria enviar também notificação sonora, e não encontrei formas de conseguir ativar a função. Ao sair do modo kiosk, o navegador envia a notificar sonora sem problemas. Alguém já teve esse problema e encontrou alguma solução?

    1. Olá Bruno,
      Sobre isso, não saberei te informar ao certo.

      Abraços,

  4. Salvador de vidas este tutorial, muito obrigado mesmo!

    Meu Rasp estar com 2 telas conectadas, tem como programar para projetar duas páginas do chromium, uma em cada tela??? Preciso muito deste HELP!!!

    1. Olá Charles,

      Acredito que este link aqui (em inglês) vai te ajudar: https://stackoverflow.com/questions/73618107/dual-screen-kiosk-leaves-second-screen-blank-raspberry-pi-4
      Veja que o código falta o & como você respondeu no outro comentário e era exatamente a dúvida da pessoa nesse post.

      Abraços!
      Vinícius – Equipe MakerHero

  5. Olá,

    A abertura do chromium e paginas funcionou corretamente, porém o while não esta funcionando para trocar de páginas, colocando da mesma forma que o tutorial, consegue ajudar?
    Estou utilizando o Raspberry 4

    1. Tente colocar o “&” no final da linha abaixo:
      /usr/bin/chromium-browser –noerrdialogs –disable-infobars –kiosk https://www.makerhero.com https://www.raspberrypi.org &

      Estava com este mesmo problema e era porque tinha esquecido de colocar o E comercial no final do comando

  6. Olá, anted de mais nada parabenizo o autor deste tutorial, muito bom!

    Gostaria de tirar uma dúvida, se é possível. Como DESATIVAR toda e qualquer outra função que não seja a de somente poder utilizar o Chromium? Basicamente preciso restringir o usuário a ter acesso somente de navegar na web e nada mais. Seria possível?

    1. Olá Wagner,

      Sem acesso a mais nada acho um pouco impraticável, mas talvez esse tutorial aqui (em inglês) esteja um pouco mais na linha do que precisas: https://die-antwort.eu/techblog/2017-12-setup-raspberry-pi-for-kiosk-mode/

      Abraços!
      Vinícius – Equipe MakerHero

  7. Olá, sabe me informar se tem como configurar pra ficar em tela cheia ?

    1. Olá Gabriel,

      Com essas configurações o Chromium deve ficar em tela cheia já.

      Abraços!
      Vinícius – Equipe MakerHero

      1. Quais configurações ?

        1. As que estão no post para compor o script.

          Abraços!
          Vinícius – Equipe MakerHero

  8. Olá, muito bom o tutorial, obrigado! Funcionou ok, como faço para deixar as setas de navegação ativas ?

    1. Olá Caic,

      No caso, as setas que queres deixar ativas são as de avançar e voltar?

      Abraços!
      Vinícius – Equipe MakerHero

      1. Olá Vinicius!

        Tenho esta mesma dúvida de como deixar ativas as setas de avançar e volta, poderia me ajudar?

        1. Olá!

          Encontrei este link aqui: https://github.com/jareware/chilipie-kiosk

          Com esse aplicativo aparenta ser possível manter os botões de avançar e retroceder.

          Abraços!
          Vinícius – Equipe MakerHero

  9. Olá, muito bom o tutorial, obrigado! Funcionou ok, mas na inicialização aparece a área de trabalho do raspberry por alguns segundos até que entre no navegador, teria como bloquear a interface do raspberry e somente mostrar quando o navegador estiver pronto?

    1. Maicon,

      Neste caso não há opção.

      Abraços!
      Diogo – Equipe MakerHero

  10. Olá tudo bem , muito bom o tutorial!!

    Gostaria de fazer uma coisa diferente, existe uma forma de eu abrir duas guias separadas do chrome automaticamente e que elas fiquem em meia tela ( igual quando aperta windows seta). Pois preciso colocar duas imagens de duas cameras em dois links diferentes, mas preciso que fique em meia tela. É possível faze esse processo dizendo ao raspian em limitando o chrome em quais pixels será delimitado?

    Obrigado

  11. Sensacional, Parabéns..

    Me ajudou muito.

    Uma dúvida, quando acaba a energia, o raspberry desliga e quando a energia volta, ele não inicia (porque a TV tá desligada), tenho que ligar a tv e depois reiniciar o raspberry, existe alguma forma de fazer ele iniciar (mesmo que eu não tenha vídeo)?

    Grato

  12. Parabéns man….

    Funciona certinho…

  13. Parabéns pelo tutorial.

    de vez em quando aparece uma janela do crhomium e refere que não é possivel actualizar.

    como retirar essa janela

    1. João,

      Quando for dar os parâmetros ao Chromium, adicione este parâmetro: –check-for-update-interval=31536000 \

      Abraços!
      Diogo – Equipe MakerHero

  14. Gostaria de saber como faço para reverter? Queria acessar o terminal mas tentei tudo quanto é atalho e não rolou!

  15. A configuração funcionou parcialmente.
    O raspberry inicia no modo quiosque, mas depois de um tempo ele desliga, precisa mexer no mouse para acender a tela.
    Alguma sugestão?

    Danilo Florentino Fernandes
    1. Danilo,

      Você pode tentar desativar essa função com o comando: setterm -powersave off -blank
      Isso vai fazer com que nunca desative a tela. Todavia, para deixar permanente, você precisa adicionar isso no .bashrc

      Abraços!
      Diogo – Equipe MakerHero

  16. Estou utilizando para exibir somente um site, funciona perfeitamente.
    Depois de um tempo o sistema ligado, surge uma tela informando que deve ser atualizado o chrome, como posso fazer para que esta tela nao apareça?

  17. Olá. Primeiramente gostaria de parabenizar pelo tutorial. muito bom e funciona.
    Não tenho muito domínio, mas meu quiosque está rodando com um painel de chamada de fila, só que não consigo fazê-lo chamar o audio. no chromium normal ele executa sem problema.
    Como faço, por favor, para que ele possa sair audio no modo kiosk?

    1. Você encontrou solução para o envio de audio em modo kiosk?

  18. Olá.
    Depois de configurar em modo quiosque, como posso colocar um determinado programa no ecran para poder executá-lo apenas com o “enter” do teclado?

  19. Rosana e se quisermos que no autorun esteja um ficheiro do libreoffice do Impress por exemplo. Ou seja, queremos que o impress seja aberto em fullscreen no raspeberry pi4, como fazer? Há pouca informação sobre o assunto 🙁

  20. Olá a todos!

    Eu segui todos os passos deste tutorial, diga-se de passagem muito bom o conteúdo, porém todas as vezes que inicializo a Raspberry aparece uma mensagem perguntando sobre restaurar a sessão anterior do Chromium.

    Gostaria de saber se tem como resolver isso e qual é a forma de resolução.

    Obrigado pela ajuda.

  21. Ola, como faço para iniciar ja em modo Quiosque, sem que eu der o comando: sudo systemctl start kiosk.service ?

  22. Boa tarde!

    primeiro parabens! muito bom!

    Aqui no meu ficou certo, mas coloquei mais paginas para abrir e so esta abrindo a primeira URL.
    Coloquei o espaco e tudo mais preciso colocar algo mais?

    1. Estava Faltando o ” & ” bi final, agora esta mudando. Mas a minha pagina pede login e senha para se logar, só ai depois ela entra, tem como se logar automático?

      1. Olá Leonardo,

        Já passei por uma situação parecida com a sua, onde a página solicitava login e senha para logar.
        O que fiz foi criar um script usando o xdotool, para que fizesse o login. Deu super certo!

        Abraço!
        Rosana – Equipe MakerHero

  23. Estou muito empolgado com a possibilidade de ensinar conceitos básicos de programação e eletrônica aos meus dois filhos Leo e Murilo (11 e 12 anos, respectivamente). Continuem ensinando e postando pessoal !!! Obrigado pelas valiosas contribuições. Comprei 3 kits básicos hoje para iniciar a jornada por aqui !

    1. Mauro,

      Ficas extremamente felizes e extasiados em saber que nosso conteúdo consegue ajudar de forma tão abrangente não importando as idades e pessoas! Obrigado, de verdade!

      Abraços!
      Diogo – Equipe MakerHero

    1. Paulo,

      Que bom que curtiu!

      Abraços!
      Diogo – Equipe MakerHero

  24. Olá, é possível utilizar o modo quiosque para exibir imagens invés de urls específicas?

    1. Gabriela,

      Com esse script não, você teria que adaptá-lo para suas necessidades.

      Abraços!
      Diogo – Equipe MakerHero

    2. Olá Gabriela, você pode instalar um servidor web no Raspberry e hospedar páginas em html com as imagens que deseja.

      Emerson Alexandre do Nascimento
  25. Muito bom! Funcionou legal.
    Porém, percebi que ao utilizar o alt+tab muda aplicação e Ctrl+shift+t ele abre um novo navegador sem o quiosque.
    Como faço para bloquear essas funções?
    Agradeço desde já.

    1. Taysa,

      A princípio você precisaria editar o arquivo “~/.config/openbox/lxde-rc.xml”
      Nele, basta procurar a linha com as teclas que você deseja bloquear e substituir por:
      false

      Faça um teste!

      Abraços!
      Diogo – Equipe MakerHero

  26. Parabéns!!! Excelente post.
    No meu funcionou, porém tive que alterar o /usr/bin/chromium-browser para /usr/bin/chromium no arquivo kiosk.sh

    Adriano Ney Nascimento do Amaral
    1. Alex,

      Que bom que resolveu!

      Abraços!
      Diogo – Equipe MakerHero

  27. Criei todo dos arquivos corretamente, até o processo de dar um enable no serviço deu certo, quanto mando o start nada acontece

    1. Olá, Fábio,

      Desative o serviço como descrito no final do post, depois, refaça o procedimento. Às vezes um simples passo passou despercebido.

      Abraços!
      Diogo – Equipe MakerHero

  28. Excelente artigo! Estava a algum tempo com dificuldades em relação a esse assunto, mas seguindo seu tutorial funcionou perfeitamente. Parabéns!

    1. Olá, Marcelo!

      Que bom que te ajudou!

      Abraços!
      Diogo – Equipe MakerHero

  29. Ótimo POST! Parabéns!
    Fiz o procedimento e deu tudo certo!! Vocês estão de Parabéns!

    Obrigado!!

    1. Olá, Marcos!

      Obrigado, e esperamos que continue sempre explorando!

      Abraços!
      Diogo – Equipe MakerHero

  30. Gostei muito parabéns, muito bom mesmo ja fiz os testes.
    Como seria para ligar o raspberry pi ele ele ja entrar no modo quiosque automático?
    Seria uma boa implementação, gostaria muito de saber.
    Abraço

    1. Olá,

      No final deste tutorial existem alguns comandos que você pode usar parar habilitar ou desabilitar o modo quiosque.
      Para que o modo quiosque inicie junto com a Raspberry, use o comando “sudo systemctl enable kiosk.service”. Depois, se reiniciar a Raspberry verá que o modo quiosque entra automaticamente.

      Abraço!
      Rosana – Equipe MakerHero

      1. Pior que ja fiz 2 vezes e mesmo assim não esta dando certo, não esta iniciando em modo kiosk, o que pode ser?

        1. Quando você usa o comando “sudo systemctl enable kiosk.service” qual mensagem aparece?

  31. Boa tarde,

    Efetuei o procedimento para demonstração de preços de produtos que estão em duas páginas HTML, mas as paginas não estão atualizando. Assim ele não muda os preços quando o HTML é atualizado na origem.

    Tem como fazer com que as páginas HTML também se atualizem?

    1. Olá Edson,

      No script altere as seguinte linha
      xdotool keydown ctrl+Tab; xdotool keyup ctrl+Tab;
      para
      xdotool keydown ctrl+Tab; xdotool keydown ctrl+r; xdotool keyup ctrl+Tab; xdotool keyup ctrl+r;

      Abraço!
      Rosana – Equipe MakerHero

      1. Bom dia

        Ficou perfeito. Muito obrigado…

        1. Olá Edson!

          Fico feliz que pude te ajudar!

          Abraço!
          Rosana – Equipe MakerHero

  32. Artigo muito bom!! Parabéns!

    1. Olá,

      Obrigada Pedro! Teus artigos também são ótimos 😀

      Abraço!
      Rosana – Equipe MakerHero