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

PowerTOP2.0 no Ubuntu 12.04

Dica para compilar o PowerTOP2.0 No Ubuntu 12.04.

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

Instalando dependências.

sudo apt-get install libpci-dev libnl-dev autoconf automake m4 libtool autopoint build-essential ncurses-dev
Mover para pasta do utilizador.

cd
Fazer o Download do código fonte e descompactar o arquivo tar.bz2.

wget https://01.org/powertop/sites/default/files/downloads/powertop-2.0.tar.bz2
tar -xjf powertop-2.0.tar.bz2
Entar na pasta powertop para executar os scripts de configuração (autogen, configure) e compilar o powertop.

cd powertop-2.0
./autogen.sh
./configure --prefix=/usr
make
Voltar para pasta do utilizador e executar o powertop.

cd
sudo ./powertop-2.0/src/powertop
Criar um relatório em html com todas as informações do powertop.

sudo ./powertop-2.0/src/powertop --html

quinta-feira, 17 de maio de 2012

Ubuntu 12.04 com diver open-source Nouveau


O driver proprietário da Nvidia é sem dúvida superior no desempenho. Então para quê voltar ao nouveau? O problema é que a versão 295.40 do driver nvidia está dando problemas no Ubuntu 12.04.
Os vídeos no flashplayer ficam em tons de azul, e além disso o driver nvidia 295.40 está provocando alguns pequenos "arrastamentos". Isso sem falar nos pequenos glitchs que aparecem quando utilizo o ffmpeg para gravar o desktop.

Por isso vou temporariamente voltar para o driver open-source nouveau. O desempenho é mais pobre. Mais pelo menos é mais estável do que o 295.40 da Nvidia. Apesar do desempenho do nouveau ser limitado, é suficiente para correr o Unity e alguns programas 3D sem sobressaltos. E não se nota diferença na fluidez. Só volto para os drivers da Nvidia, quando for lançado uma versão mais estável e sem os problemas que já foram referidos.

Tenha cuidado com o procedimento em baixo para instalar novamente o driver open-source! Apesar de ser um processo simples, é necessário alguns conhecimentos na linha de comandos. Porque se surgir algum problema, é em modo texto que ele poderá ser resolvido.

Antes de mudarmos para o "modo texto" vamos criar um novo arquivo de configuração do xorg.conf, e assim evitar de usar um editor de textos na linha de comandos

sudo gedit /etc/X11/xorg.conf.NOVO
copie para dentro do arquivo o seguinte:

Section "Screen"
          Identifier   "Default Screen"
          DefaultDepth   24
EndSection

Section "Module"
          Load   "dri2"
EndSection

Section "Device"
          Identifier   "Default Device"
          Driver   "nouveau"
EndSection

Clique em "Guardar" e feche o editor de textos.

Agora vamos mudar para o modo texto com a seguinte combinação de teclas:

CTRL+ALT+F1

O prompt de comando vai pedir o nome de utilizador, e a password.

Antes de remover os drivers da nvidia, temos primeiro de parar o ligthdm (modo gráfico)

sudo service ligthdm stop
Agora vamos fazer um backup do xorg.conf

sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.ANTIGO
Agora o "xorg.conf.NOVO" que criamos com a ajuda do gedit em modo gráfico vai de substituir o xorg.conf. Para isso vamos utilizar o comando:

sudo mv /etc/X11/xorg.conf.NOVO /etc/X11/xorg.conf
No proximo comando removemos o driver da Nvidia:

sudo apt-get remove nvidia-current
Para finalizar vamos reiniciar a máquina, e esperar que tudo dê certo :P

sudo shutdown -r now

Apoś o login verifique se é o driver nouveau que está sendo utilizado.

sudo apt-get install mesa-utils
glxinfo | grep OpenGL

o resultado será mais ou menos como este:

OpenGL vendor string: nouveau
OpenGL renderer string: Gallium 0.4 on NV96
OpenGL version string: 2.1 Mesa 8.0.2
OpenGL shading language version string: 1.20
OpenGL extensions:

Solucionando problemas.
Se após reiniciar a máquina o modo grafico falhar e você foi parar no modo texto, faça login no modo texto e execute os seguintes comandos para colocar tudo como estava:

sudo mv /etc/X11/xorg.conf.ANTIGO /etc/X11/xorg.conf
sudo apt-get install nvidia-current
sudo shutdown -r now

Os três comandos em cima são para restaurar xorg.conf original, instalar o driver da nvidia e reiniciar a máquina.

Para ver qual a última versão do driver nvidia que está disponível no repositório, use o seguinte comando:
apt-cache show nvidia-current-updates | grep Version:

terça-feira, 15 de maio de 2012

Código fonte via apt-get no Ubuntu

Como ter acesso ao código fonte dos programas que estão no repositório do Ubuntu?
Basta ativar os repositórios deb-src e instalar o Debian package development tools dpkg-dev.
Vamos começar por activar os repositórios deb-src no source.list

sudo software-properties-gtk -e deb-src && sudo apt-get update

Agora instalamos o Debian package development tools.

sudo apt-get install dpkg-dev

No exemplo em baixo vou pegar o código fonte do programa "sl" . O programa não tem muita utilidade, mas é ideal para servir de exemplo, porque o pacote deb é pequeno :P

A primeira coisa a fazer é instalar todas as dependências do programa "sl"

sudo apt-get build-dep sl

Agora vamos baixar o código fonte do "sl" (aqui não é preciso usar o sudo)

apt-get source ls

O comando em cima vai criar na pasta actual uma nova pasta com o nome de sl-3.0.3
3.03 é versão do programa "sl"  que se encontra no repositório.

Entre na pasta sl-3.0.3.

cd sl-3.0.3

Agora é só fazer as alterações desejadas no código fonte :P
Depois de fazer as suas alterações  só tem de compilar e criar o seu novo pacote deb.

dpkg-buildpackage -rfakeroot -uc -b

O comando em cima cria um pacote deb na "pasta pai"
Use o seguinte comando para voltar à "pasta pai"

cd ..

E agora instalamos o pacote para testar o nosso programa.

sudo dpkg -i sl_3.03-6_amd64.deb

Nota: No exemplo em cima foi criado um pacote deb para 64bits. Isso vai depender da arquitectura da sua máquina.

terça-feira, 1 de maio de 2012

Bug no Flash Player Ubuntu 12.04 LTS

Bug Flash Player no ubuntu 12.04 coloca vídeos em tons de azul :P

Este bug afecta o Ubuntu com Flash Player Version: 11,2,202,233, e  com drivers Nvidia Version: 295.40
Para resolver basta abrir uma consola CTRL+ALT+T e usar o seguinte comando:

sudo mkdir -p /etc/adobe && echo -e "EnableLinuxHWVideoDecode=1\nOverrideGPUValidation=true" | sudo tee /etc/adobe/mms.cfg > /dev/null