Como eu poderia criar uma espécie de “modo CLI Kiosk” na inicialização do sistema?

3

Eu criei um script que, quando executado, deixa o usuário com uma tela em branco onde ele só pode digitar, muito parecido com uma máquina de escrever. É um script Python e eu pretendo portá-lo para Bash puro eventualmente.

Agora eu quero gerar um LiveUSB onde este script é executado na inicialização, e a única coisa que você pode fazer quando você inicializa é digitar texto (e, claro, você deve ser capaz de desligar o sistema de alguma forma). Eu não quero nem mesmo qualquer GUI, ou qualquer forma de o usuário ignorar essa "tela inicial". Eu quero que seja um ambiente CLI de "propósito único" em modo de quiosque. Isso é semelhante ao PyRoom , apenas no nível do sistema operacional e sem uma GUI.

Portanto, a questão é (e eu não sou bem experiente com a configuração de inicialização): quais seriam os passos típicos para alcançar isso? Onde devo colocar o script e como dizer ao sistema de inicialização para executá-lo imediatamente na inicialização?

    
por heltonbiker 22.10.2015 / 22:19

2 respostas

3

Você pode configurar o login automático no terminal, mexendo nas opções do programa getty ; se você usar agetty , adicione --autologin <username> , conforme mostrado aqui .

Você pode então configurar o shell de login desse usuário para o que quiser. Ele não deve estar listado em /etc/shells , para que o usuário não possa alterá-lo com chsh . Supondo que você quer segurança contra o usuário chegar a um shell normal (e, portanto, ser capaz de fazer coisas arbitrárias), você precisa garantir que eles não possam chegar lá de dentro do seu programa. Se o seu programa for o shell de login, a desativação apenas encerrará a sessão e retornará ao getty (que, por sua vez, provavelmente reinicializará o usuário novamente no mesmo programa).

    
por 22.10.2015 / 22:47
1

Você pode substituir init por um programa simples que rode seu roteiro. Eu configurei uma VM do Ubuntu 15.04 e escrevi este programa simples, salvo como init.c :

int main() {
  system("/bin/bash -c /init.sh");
  return 0;
}

e um script simples:

#!/bin/bash
echo Start:
while read line; do
  echo -n "Upside down: "
  echo $line | tr '[unbqdphymwaefjg]' '[nuqbpdyhwmeajf6]'
done
init 0

e compilado e instalado como root ( certifique-se de fazer isso em uma VM que tenha capturado instantaneamente ou saiba como corrigir o sistema ):

gcc init.c -o init
sudo cp init /init
sudo ln -sf /init /sbin/init
sudo cp init.sh /init.sh

e reiniciado, e recebo o meu prompt e não há maneira fácil de sair.

Vocêdevesercapazdecombinarissocomo instalador OEM e remover um monte de coisas desnecessárias, e fazer uma bom pequeno ISO.

    
por 23.10.2015 / 01:58