Arquivo

Archive for the ‘Linux’ Category

Obtendo o tempo ocioso em uma sessão do X


Recentemente me deparei com uma pergunta no VOL a respeito do tempo ocioso em uma sessão em modo gráfico. A ideia era que estando o usuário sem realizar qualquer atividade na frente do PC depois de um determinado tempo, fosse deslogado automaticamente. Em modo texto, é possível fazer isso  através da variável TMOUT, mas isso não funciona em modo gráfico.  Em modo gráfico seria necessário obter o tempo ocioso de um usuário que estivesse usando KDE, GNOME, etc, verificar se esse tempo era maior ou igual a um tempo limite e caso fosse, executar um script que desconecta o usuário. A parte de desconectar o usuário não é difícil, mas obter o tempo ocioso do usuário se fez mais complicado. A saída do comando w tinha informações para as sessões em modo texto, mas nada de uma sessão do X. Pensei em obter esse tempo também via D-Bus, perguntando ao gnome-screensaver (no caso de um usuário estiver usando o GNOME ou XFCE), mas notei que o método GetIdleTime, não estava mais disponível.

Dessa maneira, decidi escrever um humilde programa em C usando a Xlib para obter essa informação e então aproveitá-la em um script. Não sou um expert com essa biblioteca, mas o procedimento era bem simples. O programa xidle, como chamei, retorna o tempo ocioso de uma sessão do X em segundos. Segue abaixo o programa, bem como uma explicação nos comentários sobre como compilar ele:

/*---------------------------------------------------------------------
 *    Imprime o tempo de inatividade de uma sessão do X em segundos.
 *
 *    Obs: Compile esse programa com o comando:
 *         $ gcc -o xidle xidle.c -lX11 -lXss
 *
 *         Depois mova-o para um diretório no seu PATH (um bom local
 *         seria o diretório /usr/local/bin)
 *
 *    No Fedora, é necessário instalar o pacote 'libXScrnSaver-devel'
 *    e 'libX11-devel' para poder seguir com a compilação.
 *
 *                 Autor: Elder Marco <eldermarco@gmail.com>
 *                 Data : 13/09/2010
 *    Última modificação: 07/11/2010
 *---------------------------------------------------------------------*/
#include <X11/extensions/scrnsaver.h>
#include <X11/Xlib.h>
#include <X11/Xlibint.h>
#include <stdio.h>

int main() {
     XScreenSaverInfo *info;
     Display *display;

     info = XScreenSaverAllocInfo();
     display = XOpenDisplay(NULL);

     XScreenSaverQueryInfo(display,
                           DefaultRootWindow(display),
                           info);
     printf("%.0f s\n", (float)info->idle/1000);

     Xfree(info);
     XCloseDisplay(display);

     return 0;
}

Considerando que você moveu o programa compilado para algum diretório no seu PATH, basta fazer:

cut -f 1 -d' ' <(xidle)

para obter esse tempo. 🙂

Obviamente, se você executar o programa xidle a partir do terminal, ele sempre vai retornar 0s, já que você acabou de dar um ENTER… mas se quer testar, você pode usar o comando sleep para esperar um tempo e depois executar o xidle (só não toque no teclado e nem mexa no mouse enquanto isso!). Veja:

$ sleep 11 && xidle
11 s
$ sleep 11 && cut -f 1 -d ' ' <(xidle)
11

E pra finalizar, depois que terminei esse programa, encontrei um outro que embora não retorne o tempo ocioso — até onde pude ver –, ele executa um script depois de um tempo de ociosidade do usuário. Procure por xautolock no Google.

Auto-completando opções de comandos com o bash completion


Um recurso que achei muito bom no Ubuntu  e me dei conta que não tinha no fedora é o de auto-completar opções de vários comandos no terminal apenas como a tecla TAB. Já é sabido que o bash é capaz de completar o nome de um de um comando, um arquivo ou um caminho através dessa tecla, mas o que muitos não sabem é que também é possível completar as opções dos comandos passados ou até mesmo o nome de um pacote que você quer remover ou instalar do seu sistema. Vejamos um exemplo (o caractere ‘|’ representa a posição do cursor, abaixo):

# yum l|[TAB]
list          localinstall

Note que eu me referi a uma opção que começa com ‘l’ do comando yum e teclei TAB (duas vezes na primeira vez) e como retorno, o shell me mostrou as duas opções possíveis para o comando yum que começam com a letra ‘l’: list e localinstall. Nesse caso, se eu colocar mais uma letra e dar um TAB, a opção já fica automaticamente definida.  Assim, se fizer:

# yum lo|[TAB]

o shell irá expandir para

# yum localinstall |

Vejamos mais dois exemplos. Um ainda com o yum e outro com o comando update-alternatives:

# yum ins|[TAB]

Expande para

# yum install |

E depois tento instalar um programa que começa com ea:

# yum install ea|[TAB]
earcandy.noarch                           easymock2-javadoc.noarch
earth-and-moon-backgrounds-common.noarch  easymock2.noarch
earth-and-moon-backgrounds-dual.noarch    easymock-javadoc.noarch
earth-and-moon-backgrounds-kdm.noarch     easymock.noarch
earth-and-moon-backgrounds.noarch         easystroke.x86_64
earth-and-moon-backgrounds-single.noarch  easytag.x86_64

isto é, uma lista de todos os programas que posso instalar no meu sistema. Agora veja:

# yum install easyt|[TAB]

e então..

# yum install easytag |

Agora com o update-alternatives:

# update-alternatives --|[TAB]
--admindir  --auto      --display   --install   --remove    --verbose
--altdir    --config    --help      --quiet     --set       --version
# update-alternatives --c|[TAB]

E será expandido para:

# update-alternatives --config |

LOL! Ficou com vontade de ter um recurso desse no seu Pinguim? Então, como uso fedora, vou passar o procedimento para obter esses efeitos nele. Se você usa outra distro, procure por esse pacote e instale ele. No caso do fedora, é bem simples.  Instale o pacote bash-completion no seu sistema:

# yum install bash-completion

E é somente isso. 🙂

Você pode ver uma lista de comandos que permitem utilizar o recurso de auto-completar listando o conteúdo do diretório /etc/bash_completion.d:

$ ls /etc/bash_completion.d

Onde cada arquivo nesse diretório se refere a um comando do sistema.

É até possível criar suas funções que permitem auto-completar comandos que você queira ou de programas que criou, mas isso está fora do escopo desse post. Só com esses você já terá muitos comandos com esse recurso.

Minhas impresssões com o Ubuntu 10.04 – Lucid Lynx


Sempre fui um usuário do fedora.  Sou até chato de vez de quando, de tanto que falo dessa distro para amigos. Não porque eu a ache melhor que as outras ou coisa do tipo. A verdade é que simplesmente sou apegado a distro por me identificar com ela ou simplesmente porque aprendi a gostar dela, conforme fui me envolvendo com  o mundo do software livre. No entanto, resolvi deixar de lado  esse meu apego  e me aventurar em terras um pouco (não muito) desconhecidas de outras distros. Eu já usava o Arch Linux  e Ubuntu através de uma máquina virtual, com a intenção de conhecer sem ter de formatar o PC ou ficar a rodar pelo LiveCD (no caso do Ubuntu), mas tomei uma decisão faz pouco tempo de mudar minha distro padrão e então baixei e instalei o Ubuntu 10.04 Lucid Lynx  64 bits no meu PC e também no do meu pai.

Uma coisa que sempre me chamou a atenção no Ubuntu, é que a equipe de arte da distro sempre fez um bom trabalho deixando um visual nessa distro que fica realmente muito bonito, na minha opinião. Eu gosto de desktops bonitos e nessa parte, o Ubuntu teve um ponto positivo comigo, apesar de não ser um suuuper ponto, visto que não considero a parte mais importante numa distro. Mas é alguma coisa, principalmente para usuários iniciantes em que uma primeira impressão pode definir se fica ou não na distro (ou no Linux).

Minha área de trabalho no Ubuntu 10.04 - Lucid Lynx. Ainda a padrão, já que gostei bastante dela.

Logo que dei o primeiro boot, o Ubuntu já me notificou que da existência de um driver (proprietário) para a minha placa de vídeo Nvidia. Eu adorei isso e como sei que, por enquanto,  nenhuma solução livre  trabalha de maneira satisfatória com placas Nvidia, resolvi instalar o driver proprietário e logo tive o compiz também rodando de maneira discreta no meu PC, da maneira como gosto.  Pra ser sincero,  o driver nouveau avançou muito ultimamente e é muito provável que eu passe a usar ele num futuro muito próximo.

A canonical tem cumprido o que disse: “Linux for Human Beings”. Ubuntu é uma distro fácil de usar, configurar, com vários scripts/programas que a deixam ainda mais completa instalando tudo o que usuário precisa (e também o que não precisa..), como codecs, Java, Flash, players, algumas configurações, etc.  O Ubuntu Perfeito, criado pelo Hamacker é muito bom nisso. Existe também o Ubuntu Start e atualmente, foi lançado o Ubuntu Control Center que integra várias serviços do Ubuntu em um mesmo local e também o Ubuntu Tweak.  A comunidade está sempre disposta a ajudar pelos fóruns e o IRC. Aliás, tive um problema com o meu som que não funcionava na parte frontal e encontrei alguém já disposto a me ajudar no canal #ubuntu-br no freenode.net .  Depois de quebrar um pouco a cabeça, descobri o problema, que teve uma solução bem simples.

O gerenciador de pacotes apt-get é  bem rápido, mas muitos usuários dizem que se comparado com o yum, do fedora ele é beeem mais rápido.  Bom, pode ser que no passado o yum era mais lento, mas atualmente não percebi grandes diferenças Achei satisfatório o desempenho dos dois. Os repositórios do programa me impressionaram. Tem software pra tudo lá! É bom saber que se um dia eu precisar, poderia esperar encontrar ele nos repositórios. Mais interessante ainda é launchpad que permite a você criar pacotes para o Ubuntu e disponibilizar para todo mundo. Isso faz falta no fedora, visto que não existe nenhum serviço que permite criar repositários e manter programas nele. Eu, por exemplo, mantenho alguns programas e jogos que empacoto no Open SUSE Build Service, que permite criar pacotes para o fedora, mas nada fornecido pelo comunidade fedora, até onde sei.

Mas nem tudo são flores. Além do problema com o som numa versão de 64 bits que relatei acima, ainda achei três coisas que não me agradaram. A primeira diz respeito a tradução do sistema para o português brasileiro. Houve momentos em que li erros de português ou falta de atenção do tradutor em certos trechos. Acho que seria melhor dizer, falta de atenção mesmo. A questão é que isso não deveria ter passado  em alguma revisão e por ter chegado ao usuário final  dá uma impressão de que a equipe não se importa com a qualidade da tradução feita . Infelizmente, não tenho nenhum screenshot de exemplo aqui, já que não fiquei capturando telas quando via algo assim, mas  encontrei esses erro em alguns lugares e seria bom corrigir. Mas também devo dizer que não foram em muitos, mas o suficiente para me chamar a atenção.

Outro problema chatinho é o painel do GNOME que costuma se desorganizar em algumas sessões. Algumas vezes, preciso abrir um terminal e digitar pkill gnome-panel para corrigir esse problema e não acho uma solução elegante para algo que não deveria acontecer..

O terceiro problema diz respeito ao pacote gmt, um conjunto de ferramentas que utilizo bastante para processamento Geofísico. Geralmente para gerar mapas de anomalias, realizar interpolaçõrd, etc. Quando instalei esse pacote no Ubuntu, percebi que ele não colocou o caminho dos binários para esse programa no meu PATH, fazendo que com que eu tivesse de colocar manualmente editando meu arquivo ~/.bashrc. Houve também um problema de conflito entre pacotes desse mesmo software e não entendi os motivos, mas não era algo essencial, se é que era necessário. Fora isso, instalei, coloquei no PATH e tudo funcionou sem problemas.

Assim, esse pouco tempo  usando o Ubuntu como padrão no meu PC  me faz concluir que essa é uma distro que merece realmente se a mais popular entre os usuários, pelo fato de ter um alto investimento em simplicidade  — do ponto de vista de um usuário não experiente com computadores, antes que algum chato venha reclamar :-).  É também uma distro com excelente desempenho, apesar de ter lido críticas dizendo o oposto em alguns lugares. O tempo de boot no meu PC me impressionou.  A verdade é que se tiver de sugerir uma distro para um usuário super leigo eu terei duas sugestões de cara: fedora ou Ubuntu. Mais o Ubuntu do que o fedora ainda, mas também vejo o fedora como uma distro para iniciantes.

Não sei se irei manter o Ubuntu no meu PC é provável que volte para o fedora. Sinto falta dele pelos motivos que citei no primeiro parágrafo, mas com certeza irei manter ele no PC do meu pai que também gostou muito da distro.  Se for o caso de mudar, não considero deixar um dual boot, não curto muito isso. Já mantive Windows e Linux em dual boot no meu PC e acho chato ter de cuidar de dois sistemas operacionais num mesmo PC.

Verdade  seja dita, sou homem de uma distro só.

Nightingale, um fork do Songbird para o Linux


Há pouco dias atrás a equipe do Songbird anunciou que o player de música deixaria de ser suportado no Linux. Entre as justicativas, estava o argumento de que existem pouquíssimos usuários desse player para o Linux. Ainda,  segundo o blog desse player, foi uma conclusão dolorosa deixar o suporte para o Pinguim.

Eu cheguei a testar o Songbird certa vez enquanto estava a ter problemas com o Amarok e confesso que gostei bastante dele, apesar de ter tido outros problemas, mas nada de anormal. O Songbird é um excelente player na minha opinião e só não tinha ido ainda para os repositórios do fedora por ter versões de  certas bibliotecas que eram próprias e coisas que não são aceitáveis pelo Projeto Fedora.  Apesar de eu não ser um usuário desse player — sou apaixonado pelo Amarok —,  não achei boa essa ideia de abandonar o Linux. Bom, não somente eu…

Não durou muito tempo e surgiu um novo projeto baseado no Songbird, o Nightingale que tem justamente a intenção de manter o suporte para o Linux.  Fiz uma visita no fórum do projeto e tem um pessoal bastante animado com o desenvolvimento do Nightingale. Uma boa parte, são pessoas dispostas a traduzi-lo para seus idiomas, inclusive já apareceu um voluntário para fazer a tradução para o português brasileiro.

Será que a coisa rola? Espero que sim. Espero que em breve ele já esteja nos repositórios de várias distros por aí, inclusive o fedora.

plowshare – um gerenciador de downloads em linha de comando


Tempos atrás eu falei sobre um gerenciador de downloads escrito em Java que gostei muito: o JDownloader. Ele de fato, é um ótimo gerenciador de downloads, mas de um tempo para cá o plowshare têm ganhado mais espaço no meu PC. Eu o conheci em uma dica que vi no Viva o Linux.  Ele não é mais completo que o JDownloader, mas tem melhorado a cada versão e tem  tudo que necessito. E o melhor:  roda em linha de comando. Você pode achar que isso é bobagem, mas uma vantagem que vejo de imediato  nisso é que posso deixar ele baixando algum arquivo da internet e assim que terminar, desligar o computador já que em muitos momentos não posso esperar o download terminar. Isso é mais complicado com um gerenciador gráfico. Outra vantagem é que ele é bem mais leve, como a maior parte dos programas em linha de comando.  Atualmente, os desenvolvedores disponibilizam um pacote para usuários do Debian e também é possível instalar um pacote para o ArchLinux via AUR e o Gentoo.  Como não havia nenhum para o Fedora,  decidi eu mesmo criar um pacote rpm pra ele e manter, de preferência, em sua última versão em um repositório que tenho.  Se estiver a usar o fedora, baixe o arquivo elder.repo aqui e mova-o para o diretório /etc/yum.repos.d

Depois, um simples comando para ter esse excelente gerenciador de downloads instalado no seu sistema:

# yum install plowshare

Outras formas de download, verifique o wiki do projeto .

Alguns comandos úteis:

  • plowdown <URL> – Faz o download de um arquivo presente em algum servidor de downloads. Esse servidor precisa ser suportado pelo software. Atualmente, existem muitos e só tem crescido o número de servidores suportados.
  • plowdown lista.txt – Faz o download de todos os arquivos que forem espeficados no arquivo lista.txt. As URLs desses arquivos precisam estar uma em cada linha.
  • plowdown -r 90K <URL> – Limita o download do arquivo especificado por URL a uma taxa de 90Kb/s por segundo. Você pode usar a notação para o curl para essas taxas, visto que por padrão, é ele que o plowshare utiliza.
  • plowup -a meu_usuario:minha_senha -d "Descrição" /algum/arquivo megaupload – Carrega um arquivo no seu PC para a sua conta no MegaUpload

Esses são alguns. Para saber mais você pode ler as páginas de manual dele:

$ man plowdown

ou

$ man plowup

ou

$ man plowdel

ou ainda

$ man plowlist

Shell Script: Extrair trechos de uma linha


Acompanhando meus feeds, vi um post interessante do InFog com o título de Expressões Regulares:  Casar texto entre chaves .  Nesse post, ele demonstra como obter um texto que se encontra entre chaves em uma linha usando a linguagem Python e PHP.  Essa era uma coisa que eu estava procurando em meu aprendizado com Shell Script e resolvi tentar achar uma solução nessa linguagem.  Depois de umas tentativas sem sucesso, obtive ajuda de colegas da lista shell-script no Yahoo! Grupos.

Eis então duas abordagens interessantes:

Primeira: Obter os textos juntamente com as chaves.

Essa solução é a mais simples. Vou usar o mesmo texto que foi usado no post dele no script abaixo:

#!/bin/bash

texto="ola, {sou} uma string com {varios} caracteres {especiais}"

grep -o '[{][^}]*[}]' <<< "$texto"

Se executar esse script, a saída será:

{sou}
{varios}
{especiais}

Interessante! Mas eu ainda queria algo que também eliminasse as chaves e ficasse somente o texto dentro delas, cada um em uma linha. O sed é ótimo pra isso.

Segunda: Obter os textos sem as chaves na saída

#!/bin/bash

texto="ola, {sou} uma string com {varios} caracteres {especiais}"

sed '
        s/^[^{]*[{]//;
        s/[}][^{]*[{]/\n/g;
        s/[}].*$//
' <<< "$texto"

O primeiro comando do sed apaga do início da linha até a primeira chave. O segundo, substitui todo o conteúdo entre as chaves por um caractere de nova linha (\n) e o terceiro apaga desde a última chave até a final da linha.

E se executarmos o script…

sou
varios
especiais

Exatamente como eu queria!

Categorias:Linux, Shell Script Tags:, , ,

Sugerindo artistas do Jamendo no Twitter


Eu andava meio sem nada para fazer agora de tarde e resolvi escrever um script por aqui. Tempos atrás eu havia escrito um que fazia a mesma coisa que uma função do Choqok e enviava uma música que a pessoa estivesse ouvindo no Amarok 2 — o melhor player de música do planeta!! — para o Twitter. Tinha ficado empolgado com o fato de poder enviar um Tweet pelo curl…

Pois é, então depois pensei.. “Por que não escrever um que permita compartilhar as músicas que estou ouvindo com os meus seguidores?” É claro, não poderia ser músicas protegidas e blábláblá. Eu já havia falado sobre o Jamendo nesse blog faz um bom tempo  e disse que o site se baseia em licenças livres e qualquer usuário pode fazer download gratuitamente dos álbuns por lá.  Existem excelentes artistas a serem explorados e a quantidade de albuns só cresce. No momento em que escrevo, existem 27801 disponíveis para serem baixados! E ainda existe um monte de pessoas que nunca se quer ouviram falar do Jamendo!

Então a idéia é justamente a de compartilhar essas músicas, divulgar o Jamendo e o artista que se está ouvindo.  Uma URL curta para o download é obtida usando usando o TinyURL.com.

Use, modifique, mostre para os outros, xingue caso encontrar algum erro, como quiser! Faça o download aqui

Depois de baixado, mova o script para seu diretório ~/bin, edite-o colocando seu username (e não o meu, como está lá) e execute com o comando

$ jamtwitter

É possível personalizar  um pouco mais o script, se você quiser. Usar o URL da faixa, do álbum ou do artista em questão, etc. Dê uma lida no script.

Mas se a música não for do Jamendo, sem chance.  Que fique claro! 🙂