Raspberry Pi / Linux Xubuntu 13.10 – Como instalar um script auto executável para falar ao ligar, reiniciar e desligar o sistema
25/03/2014 Deixe um comentário
Adicionar um script para ser ‘carregado’, ou melhor para ser executado na inicialização, pode ser um pouco complicado de fazer, uma vez que geralmente é necessário ficar digitando comandos no console.
Nota: Este processo foi testado em Raspbian wheezy (2014-01-07-wheezy-raspbian) em RPI mod B
E que tal um instalador de script que permita instalar ou desinstalar automaticamente?
Sim, isso é possível e de várias formas, e ainda mais graças a: um script!
Eu explico: o instalador que estou disponibilizando aqui (apenas para uso não comercial), nada mais é do que um script que é executado em linha de comando, no console. É para console porque se for gráfico não dá para rodar pelo ssh com o Putty.
O script está escrito de forma a instalar uma mensagem de inicialização e outra de encerramento do sistema ou quando for reiniciado.
Requisitos:
– ter instalado o espeak:
– estar com o audio funcionando, se não não dá para ouvir as mensagens. Para ajustar o volume em linha de comando pode rodar:
alsamixer
– para ativar o vnc automaticamente, precisa do tightvncserver instalado e configurado (só para definir senha)
https://robsoneletronico.wordpress.com/2014/03/25/raspberry-pi-vnc-server-com-tightvncserver/
Preparação:
Eu tentei colocar o código do script diretamente aqui, mas devido a problemas de codificação UTF-8, não deu certo na hora de copiar e colar no editor de texto, tentei criar o arquivo no Windows mas não rodou no RPI (Linux) apareceram erros de codificação.
Então segue em arquivo, remova a extensão .doc e deixe somente ‘install_auto_execute.zip’ para poder descompactar:
Note que este script acima também poderá configurar uma secção de vnc automaticamente ao iniciar, assim caso queira é só descomentar os comandos, para facilitar a procura estão listados abaixo (para descomentar basta remover o símbolo: #):
# echo ‘ espeak -ven+$voice -s 180 -p 99 “Starting vnc at port 5 9 0 1 for user” >> /dev/null 2>&1’ >> RPI-auto-execute.sh
# echo ‘ vncserver :1 -geometry 1024×780 -depth 24’ >> RPI-auto-execute.sh
# echo ‘ espeak -ven+$voice -s 180 -p 99 “Starting vnc at port 5 9 0 5 for root” >> /dev/null 2>&1’ >> RPI-auto-execute.sh
# echo ‘ sudo vncserver :5 -geometry 1024×780 -depth 24’ >> RPI-auto-execute.sh
# echo ‘ espeak -ven+$voice -s 180 -p 99 “Use the Real VNC programm to connect” >> /dev/null 2>&1’ >> RPI-auto-execute.sh
Como pode observar acima, o vnc será configurado para a porta 5901 para usuário padrão (por exemplo usuário: ‘pi’) e para ter acesso ao sistema como root, o vnc é configurado na porta 5905, note que a diferença é o comando ‘sudo’.
Para alterar a resolução troque 1024×780 po outra, por exemplo 1280×720 (wide screen)
Para saber como instalar, configurar o vnc (servidor) acesse:
https://robsoneletronico.wordpress.com/2014/03/25/raspberry-pi-vnc-server-com-tightvncserver/
Para saber como usar o vnc (cliente) acesse:
https://robsoneletronico.wordpress.com/2014/03/21/raspberry-pi-vnc/
Depois de criar o arquivo ‘ install_auto_execute.sh’, tem que dar permissão de execução, em linha de comando: entre na pasta onde o arquivo está e execute o chmod:
sudo chmod a+x install_auto_execute.sh
Para entrar nas pastas use o comando ‘cd’:
cd nome_da_pasta
cd /home
cd ..
Para listar o conteudo da pasta use ‘ls’ (LS em minúsculo):
ls
Instalação:
Depois de criar o arquivo e dar permissão de execução, pode executar ele diretamente na linha de comando, ou seja no console, basta adicionar o código ‘./’ antes do nome do arquivo, mas para funcionar tem que estar na pasta do arquivo.
./install_auto_execute.sh
As messagens serão exibidas na tela e serão faladas,
para instalar pressione a tecla ‘I’, para desinstalar pressione a tecla ‘U’ e pressione ‘Enter’, mas qualquer outra tecla cancelará a operação, ou somente a tecla ‘enter’.
Depois de instalar, observe a tela, e em caso de erro na instalação, deve aparecer mensagem:
[Fail]
Se isso acontecer é preciso verificar a versão do sistema do RPI, lembrando que foi testado na versão indicada no início deste post:
Raspbian wheezy (2014-01-07-wheezy-raspbian) em RPI mod B
Para resolver erros pode ser necessário adaptar o script.
O que o script faz:
– cria um arquivo chamado RPI-auto-execute.sh na pasta /etc/init.d
– define a permissão de execução do arquivo acima, se não for do tipo executável o sistema não consegue executar ele.
– atualiza as configurações, isso vai adicionar os links simbólicos nos níveis de execução.
– testa e informa se deu certo ou não.
Para saber em que nível será executado, veja as linhas:
echo ‘# Default-Start: 2 3 4 5’ >> RPI-auto-execute.sh
echo ‘# Default-Stop: 0 1 6’ >> RPI-auto-execute.sh
onde:
Default-Start: 2 3 4 5
define que será executado nos níveis 2, 3, 4, 5 como start, ou seja vai iniciar o script.
Já para encerrar, ou matar (kill):
Default-Stop: 0 1 6
de forma similar, define que será executado nos níveis 0, 1, 6 como stop, ou seja vai matar o script.
Os níveis de execução (run level) são descritos como segue:
0 | Desliga o sistema. |
1,s, single | É utilizado para manutenção do sistema, é chamado de monousuário e somente o essencial é executado. |
2 | Modo multiusuário sem suporte de rede. |
3 | Nível de execução padrão, multiusuário com todos os serviços habilitados e login do sistema em modo texto. |
4 | Indefinido ou não utilizado. |
5 | Nível de execução padrão, multiusuário com todos os serviços habilitados e login do sistema em modo gráfico. |
6 | Executa o reboot do sistema. |
Fonte: http://www.vivaolinux.com.br/artigo/Sistema-de-boot-niveis-de-execucao-e-shutdown?pagina=4
Para saber mais como isso funciona, acesse o site acima.
Resultado:
– Com o script instalado, ao iniciar o sistema (carregar o boot do RPI) uma fala avisa sobre a inicialização
– E ao desligar ou reiniciar o RPI, outra fala é pronunciada, mas não é a mesma da inicialização
Sobre a voz:
Se caso não queira que seja falado durante a instalação (sem voz a instalação fica super rápida) basta comentar a linha do comando de voz, são as linhas que tem o comando ‘espeak’, comente também as linhas com a instrução sleep (são para aguardar a fala terminar) para comentar adicione # e um espaço, por exemplo:
espeak -ven+$voice -s 180 -p 99 “Preparing for install” >> /dev/null 2>&1
sleep 1
vai ficar assim:
# espeak -ven+$voice -s 180 -p 99 “Preparing for install” >> /dev/null 2>&1
# sleep 1
As mensagens e a voz estão configuradas para o Ingles, veja um exemplo:
echo ‘The installer has been canceled!’
espeak -ven+$voice -s 180 -p 99 “The installer has been canceled!” >> /dev/null 2>&1
O código ‘echo’ significa que vai exibir na tela:
echo ‘The installer has been canceled!’
Para deixar em portugues, bastaria trocar a mensagem para:
echo ‘O instalador foi cancelado!’
E para a voz, o espeak tem suporte ao Portugues do Brasil, basta trocar o en para pt:
espeak -vpt+$voice -s 180 -p 99 “The installer has been canceled!” >> /dev/null 2>&1
os outros códigos são:
$voice = define o modelo de voz, predefinido logo no inicio, na linha:
voice=”f5″
-s 180 = velocidade da fala
-p 99 = velocidade do passo da fala (pitch)
>> = vai redirecionar o que seria mostrado na tela
/dev/null 2>&1 = vai descartar a mensagem, poderia ser direcionada para um arquivo de log.
Para deixar com voz masculina troque os parametros:
de f para m e o ‘pitch’ também faz muita diferença, por exemplo, digite isso no seu console:
espeak -vpt+m5 -s 180 -p 10 “Hello!”
e agora este:
espeak -vpt+m5 -s 180 -p 99 “Hello!”
Note ainda que tem um numero que acompanha a letra m, neste caso é o 5, mas pode estar entre 0 e 5
O arquivo gerado:
O script de instalação vai gerar um arquivo RPI-auto-execute.sh (executável) na pasta /etc/init.d:
#!/bin/bash
### BEGIN INIT INFO
# Provides: RPI-auto-execute
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# X-Start-Before:
# X-Stop-After:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive:
# Short-Description: single_line_description
# Description: multiline_description
# location: /etc/init.d/RPI-auto-execute.sh
### END INIT INFOcase “$1” in
start)
echo “Starting service…”
# redirect stdout and stderr to logfile
exec >>/var/log/init-RPI.log 2>&1# print log
echo “$(date +%d/%b/%y %X) $(uname -n) $(basename $0): Initializing”# Starting Raspberry Pi
# python /home/script/init-RPI
espeak -ven+$voice -s 180 -p 99 “Starting Raspberry Pi” >> /dev/null 2>&1
espeak -ven+$voice -s 180 -p 99 “Starting vnc at port 5 9 0 1 for user” >> /dev/null 2>&1
# vncserver :1 -geometry 1024×768 -depth 24
# espeak -ven+$voice -s 180 -p 99 “Starting vnc at port 5 9 0 5 for root” >> /dev/null 2>&1
# sudo vncserver :5 -geometry 1024×768 -depth 24
# espeak -ven+$voice -s 180 -p 99 “Use the Real VNC programm to connect” >> /dev/null 2>&1exit 3
;;
stop)
echo “Stopping service…”
# redirect stdout and stderr to logfile
exec >>/var/log/halt-RPI.log 2>&1echo “$(date +%d/%b/%y %X) $(uname -n) $(basename $0): Stopping”
# Shutdown Raspberry Pi
# python /home/script/halt-RPI
espeak -ven+$voice -s 180 -p 99 “Closing system” >> /dev/null 2>&1
;;restart)
echo “Restarting service…”
# command to restart service
;;*)
echo “Operation not supported”
;;
esac:
Dicas:
Este script pode ser alterado para rodar qualquer outro aplicativo, ou fazer qualquer outra operação, para executar a operação ao iniciar o RPI, basta editar as linhas que estão a partir de:
echo ‘ start)’ >> RPI-auto-execute.sh
E para que seja executado ao encerrar o sistema, altere a partir da linha:
echo ‘ stop)’ >> RPI-auto-execute.sh
Outra dica é para facilitar a edição e controle de arquivos sem a necessidade de uso do vnc:
Para criar o arquivo de script no computador e enviar para o RPI, pode ser utilizado o SFTP, um protocolo de transferencia de arquivos, que já está configurado por padrão no RPI.
veja mais em:
Para evitar problemas de codificação com UTF-8 / ISO-8859-1 evite editar os arquivos de Linux em computador com Windows ou utilize um editor adequado.
Atualizado em 14/04/2014: Converter Scripts editados no Windows para executar no Linux
Mais referencias:
Níveis de execução:
http://www.dicas-l.com.br/arquivo/niveis_de_execucao.php#.UzGuE6KAC00
Executando scripts na inicialização Raspberry Pi:
http://0jln.wordpress.com/2013/05/21/executando-scripts-na-inicializacao-raspberry-pi/
Atualizado em 14/04/2014: Caractere especial no código do Script do Python
Boa sorte!