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/inittab
que 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].d
diretó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 lightdm
desse 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 fvwm
ainda ser ótimo, parece especialmente para esse tipo de coisa, lembre-se disso, se você o fizer), porque algo .xinitrc
como 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.local
vez 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 .xinitrc
script 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 startx
vez da linha de instruções /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....
. Isso usará $HOME/.xinitrc
e $ HOME seria /root
. Certamente, o startx também é uma chamada de bloqueio, portanto, até que o X saia, shutdown
nã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 shutdown
o 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 .xinitrc
sã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).
/etc/inittab
mas a maioria não usa mais, o que eles usam?