Muitas vezes torna-se necessário iniciar um programa de forma automática , logo após a energização do RaspberryPi. Isto ocorreu no projeto do robô que descrevemos aqui. São várias as maneiras de fazermos isto, e apresentamos nesta nota algumas delas. Na realidade, estas soluções se aplicam a todo sistema Linux, não apenas o Raspberry, mas em algumas distribuições poderemos ter pequenas modificações.
Solução um. Inserindo a chamada do programa no arquivo rc.local .
O programa a ser inicializado pode ser um executável, um script python , ou outra forma qualquer.
Abra para edição o arquivo rc.local, com o comando:
sudo nano /etc/rc.local
Se você não tiver alterado nada na instalação padrão do Raspberry a seguinte tela será apresentada:
Fig1: Conteúdo original do arquivo rc.local no RaspberryPi
Para executar um programa automaticamente digite, logo após a última linha com o “#”.
# Programa executado automaticamente
sudo /home/pi/diretorio_do_programa/meu_programa &
Atenção:
Use o "sudo" se você precisa executar a aplicação com privilégios de root.
O "&" fará com que a aplicação execute em background.
A ultima linha do arquivo deve ser sempre exit 0.
Use sempre o caminho completo ao especificar o programa
Este é um ótimo local para inicializarmos o Raspberry como um servidor de stream de vídeo. Com uma linha da forma:
/usr/bin/raspivid -ex auto –nopreview -fps 30 -w 640 -h 480 -t 0 -o – | nc 192.168.1.31 8000 &
O Raspberry irá iniciar já gerando vídeo para a saída ethernet, no caso direcionado para o endereço IP 192.168.1.31. Para maiores detalhes de como isto funciona clique aqui.
Importante: Não esqueça do “&” ao final. Sem isto , se o programa não liberar a CPU, o Raspberry não irá terminar a sequencia de boot e vai ficar somente executando o programa que você iniciou no rc.local.
Solução dois. Utilizando o Crontab
O cron é um programa que é executado uma vez por minuto. A cada vez que é executado ele acessa um arquivo texto onde ficam especificados programas e horários que estes programas devem ser executados, mas existe um comando especial , “@reboot” que corresponde à chamada do programa logo após o boot do sistema.
Para editar o arquivo que define os programas e seus horários de execução , digite no terminal:
sudo crontab -e
O seguinte arquivo será apresentado. No RaspberryPi o editor utilizado será o nano.
Fig2: Arquivo de configuração do Cron
Um exemplo de linha a ser digitada neste arquivo:
@reboot /usr/bin/raspvid -ex auto –nopreview -fps 30 -w 640 -h 480 -t 0 -o – | nc 192.168.1.31 8000 &
Solução três. O diretório init.d
Todos os scripts dentro deste diretório serão executados na inicialização. Suponhamos que desejamos que o nosso RaspberryPi inicie executando o redirecionador de Internet para porta serial que desenvolvemos aqui, Observe o seguinte script:
Arquivo: /etc/init.d/redirec.sh
#!/bin/sh
python /home/pi/pcmd/tcp_serial_redirect.py –ser-nl=LF –net-nl=LF -p/dev/ttyUSB0 -P8000
Este script irá executar o programa redirect.py. Salve arquivo com o nome redirec.sh e alve-o no diretório init.d . Pronto, no boot o sistema já inicia procurando uma conexão socket e a redirecionando para a porta serial.
De forma similar, se desejarmos que um stream de video inicie automaticamente, gere o arquivo webcam.sh com o conteúdo e o salve no diretório init.d. Esta linha captura o sinal de uma câmera USB conectada a Raspberry e a transmite para a porta 8080.
#!/bin/sh
mjpg_streamer -i “/usr/lib/input_uvc.so -d /dev/video0 -r SVGA -f 20” -o “/usr/lib/output_http.so -p 8080 -w /usr/www” &
Solução 4: Para iniciar um script automaticamente após o login
Abra o arquivo /etc/profile, com o comando sudo nano /etc/profile.
No final do arquivo insira o comando que irá executar, por exemplo:
/usr/bin/python /home/pi/pcmd/tcp_serial_redirect.py –ser-nl=LF –net-nl=LF –spy -p/dev/ttyUSB0 -P8000 &
Salve ( <control> O, e saia do nano (<control> X).
Reinicie o sistema. Após você se logar o programa será executado automaticamente.










boa noite,
Segui os passos mais nao consegui rodar um script para fazer o rdesktop iniciar assim que fizer o login do usuário pi
O script esta localizado em /home/pi/RDP.sh
Fernando, se você enviar as mensagens descrevendo o que ocorre fica mais fácil identificarmos o que está ocorrendo. Mas de uma forma geral o procedimento para acessar o script é: , observe o ponto antes do “/”
1- Vá para para o diretório onde está o script (/home/pi neste caso)
2- ./RDP.sh
Lembre-se de que o script deve estar com permissão de execução. Use o comando chmod
Foi isto o que você fez? Se sim, mande as mensagens de erro para ver se podemos ajudá-lo melhor.
Ola, Pessoal, parabéns, sou iniciante com raspberry, e preciso de uma ajuda, tenho o raspberry com openelec, e gostaria que ele iniciasse direto pelo (PVR iptv Simple Cliente), pois fiz uma lista de canais m3u de desenho para meu filho de 6 anos, so que ele tem dificuldade de usar a interface do Kody, se puderem ajudar agradeço!!
Ola Moisés. Você chegou a experimentar algumas destas formas de iniciar um programa automaticamente:
http://cadernodelaboratorio.com.br/2015/06/10/inicializando-um-programa-automaticamente-no-raspberrypi/
Estou longe do laboratório, fora de Campinas, até o dia 15 deste e não tenho acesso a um raspberry. Nos diga se uma das opções deu certo ou não. Se não tiver dado certo iremos estudar o assunto com mais detalhes e procuraremos uma resposta.
Ops. Respondi a partir de um celular sem observar de qual post tinha se originado a sua pergunta e só agora que verifiquei que você está justamente na página que deveria ter a sua resposta. Mas vale a observação inicial, estas formas foram tentadas e não deram certo com o openelec ou você não conseguiu testá-las neste sistema?
Criei um aplicativo no gambas3, e criei um executavel dele, mas não consigo inicializar automático ele com nenhuma das suas sugestões, teria uma outra forma?
Ola Emerson:
Você não informou a distribuição que está utilizando, daí vou supor que você está utilizando o Mint (o teste eu realizei no MINT 18.1)
1- Em primeiro lugar veja se você consegue executar o programa direto da linha de comando , ./nome_do_seu_programa , se estiver com um terminal aberto no mesmo diretório do programa. Só passe para os demais itens quando estiver conseguindo executar corretamente a partir da linha de comando.
2- Supondo que tudo executou correto:
Vá para Menu/Tudo/Aplicativos de sessão. No diálogo que se segue preencha os campos solicitados. No campo destinado ao comando forneça o caminho completo do seu executável ( /home/seu_usuário/caminho/seu_arquivo )
3- Feche o diálogo e em seguida reinicie o sistema. O executável irá aparecer na tela.
Fiz o teste instalando o gambas3 (v 3.8.4, disponível nos repositórios do Mint)e carreguei o exemplo “MineSweeper”. O exemplo compilou sem erros e gerou o executável, localizado em ~/.local/share/gambas3/src/inievom/MineSweepper/MineSweeper.gambas.
As formas de inicialização válidas para o Raspberry, descritas neste artigo, não funcionaram no Mint18. Uma explicação técnica do porque isto ocorre pode ser vista em https://unix.stackexchange.com/questions/72267/cannot-get-rc-local-to-automatically-run-at-all , caso te interesse saber mais a fundo a origem do problema.
Bom dia. Gostaria de saber como eu consigo fazer um programa que apareça fps,temperatura do pc em uma tela lcd q conecta no raspberry pi
Bom dia. Gostaria de saber como eu consigo fazer um programa que apareça fps,temperatura do pc em uma tela lcd q conecta no raspberry pi.Para ligar junto ao pc
Henrique, uma forma de fazer isto (testei utilizando o Linux Mint 18.1) é usar programas executados a partir da linha de comando e redirecionar a saída destes programas para um arquivo. Depois, um script python pode pegar estes arquivos e enviar para um raspberry ou outro dispositivo. Mas os valores também podem ser apresentados na tela do próprio PC.
Para o fps:
Um programa que já deve estar instalado na sua máquina, pois vem como padrão no Mint 18.1 é o glxgears. É antigo é tem algumas falhas, mas já da uma boa noção do fps do seu computador. Para executar basta digitar glxgears em um terminal. Um bem melhor, mas que precisa ser instalado, é o glmark2. Para instalar use o comando sudo apt-get install glmark2.
Para a temperatura é mais fácil, pois o Linux já mantém um arquivo com o valor da temperatura da CPU. digite em um terminal:
cat /sys/class/thermal/thermal_zone*/temp E a temperatura em graus centigrados irá aparecer na sua tela.
A ligação com o Raspberry pode ser via serial ou ethernet. Se você colocar a palavra chave “raspberry” na página inicial do caderno de laboratorio, identificará formas de fazer esta comunicação, com o software em Python já disponível nos artigos.
abs
Roberto
boa noite,
Fiz um programa no Python para mostrar uma imagem e gostaria que essa imagem aparecesse após a inicialização do RPi, mas não estou conseguindo. Segui os passos desccritos aqui mas não deu certo.
o programa foi salvo em /home/pi/app/bem-vindo.py
e fiz um escript em /etc.init.d com o nome bem-vindo.sh e com o conteúdo: python /home/pi/app/bem-vindo.py
o que pode estar de errado?
Algumas considerações:
1- O programa funciona corretamente quando você o chama diretamente como python /home/pi/app/bem-vindo.py?
2- Você alterou as permissões do script para ser executável?
3- O script funciona corretamente quando você o executa como bem-vindo.sh?
Se nada disto adiantar, você pode inserir aqui o script para que possamos fazer uma avaliação adicional?
se eu digitar; pi@raspberrypi:~ $ python /home/pi/app/bem_vindo.py o programa roda normalmente;
o script também funciona: pi@raspberrypi:/etc/init.d $ sh bem_vindo.sh
e o comando para permissão fiz assim: chmod 755 bem_vindo.sh
o script é:
#!/bin/sh
python /home/pi/app/bem_vindo.py
e o programa em Python é:
#!/usr/bin/env python
from Tkinter import *
root = Tk()
root.title(‘INICIAIS’)
text1 = Text(root, height=80, width=100)
photo=PhotoImage(file=’/home/pi/app/bemvindo.PNG’)
text1.insert(END,’\n’)
text1.image_create(END, image=photo)
text1.pack()
root.mainloop()
Moises:
O que está ocorrendo é que no ponto onde você inseriu o programa o servidor X (vídeo gráfico) ainda não está operacional. Esta localização funciona bem com programas de linha de comando.
Para fazer o que deseja é preciso:
1- Garantir que o X está OK. o script startx deve ser chamado automaticamente.
2- Edite o arquivo /etc/xdg/lxsession/LXDE/autostart e insira a linha que chama o seu programa ao final deste arquivo:
@usr/bin/python /home/pi/app/bem_vindo.py
A sua dúvida é interessante e provavelmente deve ser compartilhada por mais colegas. Vamos escrever um novo post cobrindo este assunto para explicar bem o que está acontecendo e detalhar melhor a solução a ser implementada. Deverá sair na próxima segunda feira.
Olá boa noite,
Gostaria de saber como faço para executar nesse mesmo script um arquivo em .pps ou otp (libreoffice impress), estou com um projeto de implantar TV’s na empresa que nelas vão ficar passando informações. Com isso, o raspbian, ao ser ligado, vai inicializar com o .pps automaticamente.
O caminho do meu arquivo seria /home/pi/Desktop/Compartilhamento.
Obg.
Hugo:
Para chamar o libreoffice impress na linha de comando utilize: soffice -show nome_do_arquivo.odp
O libreoffice deve estar configurado para ser utilizado no modo kiosque.
Uma vez chamado ele ficará em loop infinito apresentando o arquivo odp.
Tavares, bom dia.
Meu arquivo em .odp já esta salvo e configurado em modo kiosque.
Fica faltando saber onde coloco esse comando que você informou acima.
no caso ficaria assim : soffice -show /home/pi/Desktop/Compartilhamento/nome do arquivo.odp
Poderia, por favor, me falar onde posso salvar o comando ?
Obg.
Hugo. Estou fora do laboratório até o dia 7 e com isto não tenho como testar no Raspberry. Mas, a princípio, é somente editar o arquivo rc.local (sudo nano /etc/rc.local) e inserir na última linha “soffice -show /home/pi/Desktop/Compartilhamento/nome do arquivo.odp”. Existem outras formas, de uma olhada mais detalhada no artigo para ver as possíveis opções.