segunda-feira, 3 de novembro de 2014

Utilizando o xdotool para manipular arquivos.

O xdotool é uma ferramenta de instruções que permite aos programadores emularem o pressionamento de teclas do teclado e do mouse, além de manipular janelas. Esse post tem a intenção de dar uma introdução à utilização dessa ferramenta em um ambiente Linux. Para baixar a ferramenta basta executar o seguinte comando:
 sudo apt-get install xdotool  
A sintaxe dos comandos xdotool é simples e direta com a xdotool seguida de opções e argumentos.
Search:
O comando search procura por uma janela que foi informada nos argumentos e se ele for o único ou último comando da cadeia ele irá retornar o ID da janela. Esse comando pode buscar a janela através de 3 formas: pelo nome se for informada opção --name; pela classe da janela se for informada a opção --class; e pelo nome da classe se for informada a opção --classname. Para procurar uma janela através do seu nome, execute:
 xdotool search --name "nome_janela"  
Uma outra opção deste comando é a --sync, ela bloqueia o xdotool até que tenha ocorrido algum resultado. O comando a seguir procura por uma janela através do seu nome e espera até que a janela tenha sido encontrada.
 xdotool search --sync --name "nome_janela"  
Este comando pode ser usado para que o xdotool aguarde o tempo necessário até que a janela de um programa seja carregada.
Exec:
O comando exec executa um programa. O --sync é sua única opção.
 xdotool exec --sync gcalctool  
obs.: Esta opção não pode ser utilizada para abrir arquivos ou páginas web, para isso deve ser utilizada a ferramenta gnome-open.
Sleep:
O comando sleep faz o código esperar por um período específico que foi informado como argumento. Abaixo um exemplo de uma pausa de 1 segundo.
 xdotool sleep 1  
Type:
O comando type serve para simular uma digitação de texto, ele recebe como argumento o texto que será digitado. Uma das opções desse comando é o --delay na qual se deve informar o tempo em milissegundos que irá demorar entre a digitação de uma tecla e outra, determinando assim a velocidade que o texto será digitado. A seguir um exemplo que digita uma palavra com tempo de 215ms entre caracteres.
 xdotool type --delay 215 "texto"  
Key:
O comando key serve para simular o pressionamento de alguma tecla ou conjunto de teclas . Ele recebe como argumento a tecla que será pressionada. Por exemplo o atalho Ctrl+c pode ser simulado pelo comando a seguir.
 xdotool key "ctrl+c"  
Para entendermos na prática o funcionamento dos comandos do xdotool que foram explicados vamos supor que precisamos de um script que abra o libreoffice, procure pela janela, digite um texto, espere 1 segundo e salve esse arquivo em qualquer lugar com qualquer nome.
 #abrir o libreoffice  
 xdotool exec loffice --writer  
 #procurar pela janela  
 xdotool --sync --name "Sem título 1"   
 #sem título 1 é o nome da janela padrão que o libreoffice abre  
 #digita o texto  
 xdotool type --delay 215 "texto"  
 #espera 1 segundo  
 xdotool sleep 1  
 #salva o arquivo  
 xdotool key "ctrl+s"  
 #espera 1 segundo para garantir que a janela de salvamento irá abrir antes do próximo comando  
 xdotool sleep 1  
 #pressiona enter para confirmar e salvar o arquivo  
 xdotool key "KP_Enter"  

Referências:
http://www.ibm.com/developerworks/br/linux/library/x-xdotool/

sexta-feira, 31 de outubro de 2014

Enviar email contendo o IP da RaspberryPi automaticamente

Uma das formas de utilizar a RPi sem a necessidade de um monitor é acessá-la remotamente através de ssh ou até mesmo de um servidor VNC. Entretanto, quando o IP atribuído a RPi não é fixo, precisamos de alguma forma descobri-lo sem acessar a RPi diretamente. Um das saídas para este problema é apresentada a seguir e consiste em fazer a RPi enviar o seu IP por e-mail toda vez que o cabo Ethernet for conectado e um IP for atribuído.

Os passos apresentados abaixo foram testados em uma RPi modelo B rodando o sistema operacional Raspbian wheezy.

1. Primeiramente precisamos baixar o pacote ssmtp, ele é um cliente smtp utilizado para enviar mensagens para um servidor smtp.
 sudo apt-get install -y ssmtp   

2. Abrir o arquivo '/etc/ssmtp/ssmtp.conf', este é o arquivo de configuração do cliente smtp.
 sudo vim /etc/ssmtp/ssmtp.conf  

3. Editar o arquivo '/etc/ssmtp/ssmtp.conf' com as informações abaixo:
 ############################################################################  
 root=postmaster  
 # Como utilizamos o gmail, colocamos o servidor smtp dele.  
 mailhub=smtp.gmail.com:587  
 # nome do host(parte posterior ao @ do email)  
 hostname=gmail.com      
 # usuario(parte anterior ao @ do email)  
 AuthUser=jua_labs  
 # senha       
 AuthPass=juapw  
 # criptografia  
 UseSTARTTLS=YES  
 ############################################################################  

4. Criar arquivo '/etc/network/if-up.d/mailip'.
 sudo vim /etc/network/if-up.d/mailip  

5. Inserir as informações abaixo no arquivo '/etc/network/if-up.d/mailip'.
 ############################################################################  
 #!/bin/sh  
 # email destino  
 mailreciever=jua.labs@gmail.com   
 # salvamos a data  
 today=$(date)  
 # guardamos o IP na variavel my_ip  
 my_ip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}'`  
 #o '\n\n' sinaliza que o que virá apos será o corpo do email   
 my_pi="Subject: RPi reiniciada!\n\n"  
 #mensagem a ser enviada  
 message="$my_pi reiniciada em: $today.\nIP atual = $my_ip"  
 #salvamos a mensagem em um txt  
 echo $message > message.txt  
 #enviamos o 'message.txt' por meio do programa 'ssmtp' ao jua.labs@gmail.com  
 ssmtp ${mailreciever} < message.txt  
 ############################################################################  

6. Reinicie a RPi e a reconecte a rede, toda vez que ela receber IP ela enviará para o email especificado na variável mailreciever do código do tópico 5.

Referências:

* https://wiki.debian.org/sSMTP
* https://googledrive.com/host/0B1nrvbH9mKucaWJuUFN6S2lyU1k/09-Email%20&%20FTP.pptx