terça-feira, 22 de maio de 2012

Smstools Ubuntu 12.04 LTS

Recentemente instalei o Ubuntu 12.04 no laptop de um amigo. Esse laptop tem uma utilização esporádica, por essa razão ele optou por um plano de Internet móvel da vodafone sem carregamentos obrigatórios, e com limite de tempo. 
O equipamento para ligar à rede da vodafone é uma pen usb zte k3565-z que funciona sem problemas no Ubuntu 12.04. É só usar o NetworkManager para configurar a ligação. Nas versões anteriores ao Ubuntu 12.04  era necessário instalar o "Vodafone Mobile Connect Card driver for Linux".
No plano sem carregamentos obrigatórios, a vodafone envia uma sms para a pen sempre que desligamos a ligação com a Internet. É através dessa sms que o cliente fica a saber quantos minutos restam, e quando deve efectuar o próximo carregamento.
O Ubuntu  12.04 já configura a pen zte k3565-z sem problemas por isso achei que não era necessário instalar o "Vodafone Mobile Connect Card driver for Linux" e tentei encontrar uma solução mais elegante para receber as mensagens sms.
A solução encontrada foi utilizar o smstools para receber as mensagens ,e usar o notify-send para "ler" as mensagens. 



Para começar temos de instalar o smstools. (Está no repositório universe)


Advertência: Faça por sua conta e risco.


sudo apt.get install smstools

Agora vamos abrir o arquivo de configuração do smstools que está em /etc/smsd.conf (por precaução faça um backup)


sudo gedit /etc/smsd.conf

Apague o conteúdo do arquivo e substitua com o seguinte: 


#
# /etc/smsd.conf
#

devices = GSM1

outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
incoming = /var/spool/sms/incoming
logfile = /var/log/smstools/smsd.log
infofile = /var/run/smstools/smsd.working
pidfile = /var/run/smstools/smsd.pid
outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
failed = /var/spool/sms/failed
incoming = /var/spool/sms/incoming
sent = /var/spool/sms/sent
stats = /var/log/smstools/smsd_stats
loglevel = 4
receive_before_send = yes
autosplit = 3

[GSM1]
device = /dev/ttyUSB1
incoming = yes
sending_disabled = yes
memory_start = 0
baudrate = 19200

Lembrando que esta dica é para a pen zte k3565-z da vodafone. Se você tiver um equipamento diferente, o smsd.conf vai ter de ser alterado. Para mais informações consulte a documentação do smstools.

O smsd.conf original tem muitas linhas "comentadas" que servem de exemplo. Para ficar mais fácil de ler eu apaguei todos os "comentários" e adicionei/alterei alguns settings.

No Ubuntu o modem gsm do zte k3565-z aparece em /dev/ttyUSB1
No smsd.conf ficou assim:
 device = /dev/ttyUSB1

A pen também não vai ser utilizada para enviar sms, por isso adicionei a linha: 
sending_disabled = yes

De acordo com a documentação que está no site, a  setting memory_start = 0 é necessária para o smstools funcionar com os modems "Vodafone Mobile Connect Card" 

Ok! o smstools já está configurado. 
Mas há um pormenor importante!  Como ainda não temos a pen ligada no computador, o smstools não vai encontrar o device /dev/ttyUSB1. Isso vai gerar um erro, e o demon do smstools para de funcionar. Uma alternativa seria utilizar a setting device_open_retries que serve para colocarmos o numero de tentativas que o smstools faz até encontrar um device (com o numero -1 ele tenta infinitamente), mas achei que seria melhor iniciar um demon do smstools apenas quando necessário.

A minha opção foi colocar um script dentro da pasta /etc/network/if-up.d/ que inicia o smstools sempre que ligamos à uma rede.

Vamos então criar o script.


sudo gedit /etc/network/if-up.d/liga-smstools.sh

Copie e cole o seguinte:


#!/bin/bash
#tuxmind.blogspot.com
service smstools restart
exit

Agora temos de dar permissão de execução ao script:


sudo chmod +x /etc/network/if-up.d/liga-smstools.sh
Como podem ver o script roda o comando service smstools restart.  

Agora insira a pen usb no computador e aguarde uns segundos até que o Network Manager peça o pin para desbloquear o cartão "sim". Depois é só ir ao "Network Manager applet" e ligar à Internet da vodafone.
Se tudo correr bem, todas as mensagens que forem enviadas para o modem serão armazenadas na pasta /var/spool/sms/incoming com o nome de GSM1.xxxxx :)

Agora vamos criar um script para ler a última sms recebida e mostrar uma notificação. O script vai ser guardado dentro da pasta /etc/network/if-post-down.d. Ele é executado sempre que uma ligação de rede é desligada.
Para fazer isso utilizamos o comando:


sudo gedit /etc/network/if-post-down.d/sms-vodafone.sh

Copie e cole o seguinte:


#!/bin/sh
#tuxmind.blogspot.com
sleep 30
DISPLAY=:0.0 XAUTHORITY=~tuxmind/.Xauthority notify-send -u normal -i info "SMS Vodafone `grep Received /var/spool/sms/incoming/$(ls -t /var/spool/sms/incoming | head -1)`" "`tail -1 /var/spool/sms/incoming/$(ls -t /var/spool/sms/incoming | head -1)`"
exit

Agora temos de dar permissão de execução ao script:
 

sudo chmod +x /etc/network/if-post-down.d/sms-vodafone.sh
Importante: Não se esqueça de substituir "tuxmind" pelo nome do utilizador que vai receber as notificações.

Esse script vai ler a ultima mensagem recebida que esta dentro da pasta  /var/spool/sms/incoming e depois mostrar o texto da mesma através do notify-send.


Se quiser mudar a imagem que aparece no notify-send, mude o parâmetro -i info  para -i ~/imagem-vodafone.png. Guarde a imagem dentro da pasta do utilizador.


Nota: a notificação em cima é exemplificativa. O texto da sms pode variar. 

Também podíamos utilizar a setting eventhandler no smsd.conf que executa um script sempre que o smstools recebe uma mensagem. O problema é que o smstools não tem permissão para executar programas gráficos como o notify-send. Por isso achei mais seguro utilizar o recurso if-post-down.d em vez de tentar mudar as permissões do smstools.

Alguns pontos a ter em consideração.

  • Não se esqueça que você não deve retirar a pen do seu computador antes de desligar a "Internet" no  Network Manager applet. Porque a vodafone só envia a sms depois de você desligar a "Internet". E se você tirar a pen antes do tempo o smstools não vai receber a sms. 
  • Após desligar a Internet no Network Manager applet espere 30 segundos até aparecer a notificação no seu desktop.  (No script sms-vodafone.sh eu coloquei uma pausa de 30 segundos para dar tempo suficiente até a vodafone enviar a sms)
  • A notificação só vai aparecer para o utilizador que foi definido no script sms-vodafone.sh (está escrito em vermelho).
  • Se por alguma razão o smstools não funcionar edite o arquivo /etc/smsd.conf e altera a setting loglevel = 4 para loglevel = 7 reinicie o service smstools e depois veja o log do smstools com o comando sudo tail /var/log/smstools/smsd.log

8 comentários :

Patife disse...

como posso verificar a exata localizacao do modem, isto é, qual é o ttyusb, no dmesg surgem em ttyusb0,1 e 2.

Oo meu modem não é o zte mas sim o huawei. Mudará assim muito?

Obrigado pelo excelente artigo.

Tuxmind disse...

Veja no dmesg qual dos ttyUSB aparece como "GSM Modem".
Se forem todos "GSM modem" use primeiro o ttyUSB0. Se não funcionar use o tty seguinte, e assim sucessivamente até encontrar o tty correcto. No modem zte k3565-z apareceram 4 ttyUBS, e só tive sucesso como o ttyUSB1.

Em relação ao modem huawei se for da vodafone acho que não muda nada excepto o ttyUSB que deve ser o zero.

Agora se não for uma "pen" vodafone remova a linha "memory_start = 0" do smsd.conf

:)

Patife disse...

Obrigado.

A pen é da vodafone, mas é a huawei. Coloquei o ttyusb0, ligo a pen, estabeleço a ligação, mas o scritp n funcionam.

Repetindo o processo, qdo executo o comando service smstools restart a ligação cai, é normal? será que é o ttyusb errado, repeti para o ttyusb1 e faz o mesmo.

Patife disse...

Já notei onde está o problema, falta de permissão do utilizador no grupo dialup!

Patife disse...

Olá novamente.

Não consigo por o scrip a funcionar, só em sudo. E quando o smsd vai para ler o modem, o kernel remonta o modem noutras ttyusb (vi pelo dmesg). Tentei com o wammu, e sucede o mesmo. Bloqueia a ttyusb onde está o modem e coloca-o noutra.

Relativamente as permissoes adicionei o user aos group.

no smsd.log quando dá o erro da desmontagem, lá diz que nao tenho permissao para ler/escrever no ttyusb*

Obrigado pela atenção.

Pr. Francismar Gomes disse...

olá
como configurar o ZTE AIKO83D NO ubuntu 12.04

Tuxmind disse...

Infelizmente a lista de compatibilidade do smstools é pequena...
http://smstools3.kekekasvi.com/index.php?p=hardwarecomp

Não deve funcionar em hardware recente. :(

Shimatani Iki disse...

E se o smsd não esta rodando o que eu faço?