Como configurar o modo "quiosque" no Raspbian?

10

Quero configurar meu Raspberry Pi em um tipo de modo "quiosque", em que ele é inicializado em um único aplicativo de tela cheia. Conheço o caminho da linha de comando, mas sou um novato quando se trata de personalizar o comportamento de inicialização do linux. Estou criando o aplicativo e planejando adicionar a capacidade de desligar com segurança o Raspberry Pi. O que preciso fazer para configurar meu Raspberry Pi para executar apenas este aplicativo?

Atualização: para ser claro, não quero abrir uma página da web . Também não quero alterar os sistemas operacionais. Quero aprender como configurar meu sistema operacional (Raspbian) para iniciar meu próprio aplicativo em vez do X (embora meu aplicativo possa depender da renderização do X em segundo plano).

Andrew
fonte

Respostas:

7

Eu nunca tentei isso, mas, como parece que você ainda está procurando e não recebe resposta há quase um mês, vou lhe dizer por onde começar.

Este manual é antigo, mas o esquema geral parece sólido. Você não precisa fazer tudo exatamente da mesma maneira. Ele se concentra no uso de um navegador da Web como peça central, mas isso é principalmente irrelevante aqui (ou seja, relaxe, não é outro "quiosque da web").

Refere-se a /etc/inittabque a maioria das distribuições linux não usa mais, mas acontece que o debian wheezy (raspbian) o faz. A idéia é usar o nível de execução 4 como quiosque e torná-lo o padrão. Você pode fazer isso ou apenas usar o que é atualmente o padrão (2 ou 3, eu acho). O raspbian que eu estou executando agora foi modificado por mim, então não tenho certeza de quais eram as diferenças originais entre os /etc/rc[N].ddiretórios - que correspondem aos 7 níveis de execução. Você deseja usar um que não inicie o login gráfico ( lightdm) ou então para remover lightdmdesse nível de execução. Você também pode fazer esse tipo de coisa da maneira certa (veja man update-rc.d).

Em seguida, seguindo esta parte do tutorial, você deseja criar seu próprio script de serviço de inicialização (aka. Init) para iniciar o X e seu aplicativo sem fazer login. Não faça dessa maneira, no entanto; você precisa estar em conformidade com o debian, então veja /etc/init.d/README. Além disso, você não precisa usar um gerenciador de janelas (apesar de fvwmainda ser ótimo, parece especialmente para esse tipo de coisa, lembre-se disso, se você o fizer), porque algo .xinitrccomo isto:

#!/bin/sh

myApp

Irá executar apenas seu aplicativo no X simples - o que é muito simples: sem menus, sem barras de título, sem barras de ferramentas etc. ou uma maneira de o usuário iniciar outro aplicativo ou obter um shell. Apenas fornece um cursor.

Um problema é que, se você for direto para uma área de trabalho a partir da inicialização, será uma área de trabalho com superusuário. Na verdade, as instâncias X sempre têm um uid 0, mas os aplicativos executados no xinitrc são executados como o usuário que iniciou o X - nesse caso, o X foi iniciado pelo init, portanto o usuário será root (embora tecnicamente o root não esteja logado) ) Portanto, o xinitrc acima seria melhor com:

su -c myApp pi

Que executará seu aplicativo como o usuário pi (que também não está logicamente tecnicamente).

Como tecnicamente ninguém está logado, mesmo que o usuário do quiosque mate o X (por exemplo, via ctrl-alt-delete), eles serão deixados no prompt de login. As instruções vão além disso, de modo que o script de inicialização do serviço inicie o X (consulte a NOTA abaixo) em primeiro plano, de modo que, quando sair, o script de serviço continue e execute shutdown -r now.

Lembre-se de que alguém que tem acesso físico a uma máquina (normal) sempre pode contornar a segurança que você implementa; portanto, tudo o que você realmente está tentando fazer aqui não é facilitar demais e evitar acidentes desagradáveis.

Lembre-se também de que, como o serviço de inicialização fará isso em primeiro plano, nenhum outro serviço será executado depois , portanto, verifique se é o último absoluto. Muito importante! Você poderia, de fato, usar em /etc/rc.localvez disso, já que normalmente é garantido que será o último;) Isso economizará algum tempo.

NOTA: Na verdade, no how-to é outro script, /root/kiosk, a partir desta seção . Observe que é apenas uma linha que referencia o .xinitrcscript mostrado na seção acima (3.4). Basta colocar uma linha como essa no seu script de inicialização diretamente. Seu xinitrc (preliminar), como já descrito, será muito mais simples.


Uma alternativa para permanecer em primeiro plano ...

O objetivo de deixar a chamada X em primeiro plano é apenas bloquear a execução do script init até que o X saia, para que a próxima linha no script ( shutdown) seja executada:

startx
shutdown -r now

Aqui eu usei em startxvez da linha de instruções /usr/X11R6/bin/xinit /root/kiosk.xinitrc ..... Isso usará $HOME/.xinitrce $ HOME seria /root. Certamente, o startx também é uma chamada de bloqueio, portanto, até que o X saia, shutdownnão será executado. Se, em vez disso, você fez isso:

startx &
shutdown -r now

X funcionaria, mas o desligamento também ocorreria imediatamente (obviamente sem sentido).

Você não precisa usar esse truque se não se importa com o desligamento - como mencionado, o usuário acaba com um prompt de login. Mas parece uma ideia útil, desde então você pode simplesmente desativá-la ctrl-alt-backspace. Outra idéia, se o seu aplicativo for fechado, seria o uso startx &do script init, que fará o segundo plano e permitirá que o init continue normalmente (isso é bom; o X ainda estará em execução e terá o controle da exibição - "segundo plano" é um talvez um termo confuso). Em vez de no script init, coloque shutdowno xinitrc:

#!/bin/sh
#/root/.xinitrc

su -c myApp pi
shutdown -r now

Mesmo truque, lugar diferente. Agora, quando alguém fecha myApp, o desligamento acontece (mas se eles matam o X, não). Você também pode fazer os dois lados, mas eu realmente gosto mais deste, porque significa que você pode sair do X e obter um login, o que pode ser útil às vezes, e você também pode desligar o sistema facilmente da GUI.

Não &coloque em segundo plano ( ) o myApp no ​​.xinitrc, mesmo que não haja um desligamento após ele, porque, quando o .xinitrc terminar, X sai;) A última chamada deve persistir em primeiro plano (normalmente, é um DE ou uma janela Gerente).

Scripts de inicialização e .xinitrcsão conceitos semelhantes. Um deles é executado init, que é o processo 1 no linux (é o único processo iniciado pelo kernel). O outro é executado pelo servidor X. Observe que existem arquivos .xinitrc e um comando xinitrc (eles estão relacionados, mas não são os mesmos).

Cachinhos Dourados
fonte
Se o Raspbian usa, /etc/inittabmas a maioria não usa mais, o que eles usam?
Andrew
Portanto, se eu quiser permitir acesso ssh enquanto meu aplicativo estiver sendo executado em primeiro plano, preciso garantir que meu .xinitrcscript seja executado depois disso, correto?
21813 Andrew
O Debian usa um sistema init "sysV" -ish e inittabfaz parte de tudo isso. Os daemons init mais comuns agora são systemde upstart.
goldilocks
WRT seu aplicativo sendo executado em primeiro plano, isso ocorre porque (sysV) initaguarda a retorno desses scipts antes de iniciar o próximo. Então, normalmente, em um script init, se você estiver iniciando um serviço persistente, poderá fazer o plano de fundo (também conhecido como fork) &. Em seguida, o próprio script sai, mas o processo "em segundo plano" continua. "Segundo plano" refere-se apenas a uma cadeia de execução, não a algo que aparece na tela - você pode colocar em segundo plano sua invocação X ( lightdmdeve estar em segundo plano) ... Vou editar algo sobre isso.
goldilocks
WRT ssh, o sshserviço (vinculado /etc/rc[N].d) deve ser iniciado antes do seu, para que seja executado ("em segundo plano") para responder às conexões. Ainda é um sistema multitarefa;)
goldilocks
2

Veja este projeto 'Digital Signage'. Ele inicializa na GUI e abre um navegador desenvolvido com HTML5. Ainda não tentei, mas quero. Talvez você possa colocar seu aplicativo em seu navegador para inicializar em tela cheia.

http://www.binaryemotions.com/raspberry-digital-signage/

gurcanozturk
fonte
Obrigado pela sua resposta, mas parece um substituto para o Raspbian configurado para exibir um navegador. Gostaria de aprender as etapas para configurar o Raspbian como eu quero.
21813 Andrew Andrew
Não há menção sobre Raspbian na sua pergunta. Tente isso. pikiosk.tumblr.com/post/38721623944/...
gurcanozturk
0

O Raspberry Digital Signage mencionado é um sistema operacional que exibe uma exibição em tela cheia restrita à página da web ou à lista de reprodução / lista de reprodução de vídeo especificada sem nenhuma maneira de escapar, mas reiniciar a máquina.

De fato, ele pode exibir uma exibição da Web (exibição de páginas HTML / HTML5) e uma exibição multimídia (apresentação de slides de imagens e reprodutor de vídeo). A visualização na Web possui três diferentes sub-visualizações possíveis: Firefox, Chromium e Midori (com suporte ao Gnash).

As experiências do Chrome e do Midori são um recurso da versão 2.0.

Emoções Binárias
fonte