Alguma coisa sobre fifo, xmms, 2007, música e shell script

Alguma coisa sobre fifo, xmms, 2007, música e shell script

Fala galera do vol.

Sou daqueles caras que gosta de usar o terminal puro para fazer algumas tarefas rotineiras, como programar, configurar arquivos, etc. Quando sinto vontade de escutar musica ainda sim uso o terminal, mas por teimosia eu nao uso os tocadores nativos do terminal como o mpg123, play, sox, etc;
Prefiro deixar o xmms ativo lá no meu fluxbox (f7) e acesso um terminal puro (via tecla f6). Mas se eu quiser trocar de musica? Como se comunicar com programas lá no outro terminal? Bem uma saida seria usar FIFO’s;

FIFO é a sigla para First In First Out, que significa, o primeiro que entra é o primeiro que sai. Ao contrario da filosofia da pilha, que o ultimo dado é o primeiro a ser lido, no FIFO é ao  contrário, assim que os dados são enviados, o posicionador de leitura estará logo no inicio dos dados, o que garante que todo dado sera lido de forma sequencial.

O FIFO é usado como forma de IPC (Inter Process Comunication), como o nome ja diz, ele pode ser usado para se comunicar com outros processos.
No nosso caso aqui será simples:

1) Criaremos um arquivo FIFO com o comando mkfifo.
2) Deixaremos um script “servidor” no ambiente grafico que fara leitura
do arquivo FIFO e executara os dados que chegarem como comandos do sistema.
3) No terminal puro, teremos um script “cliente” que enviara para o arquivo
FIFO os dados e estes, como visto anteriormente, serao lidos pelo nosso
“servidor”.

Então para fazer esta confusão toda precisaremos de dois scripts basicos, que estao  disponiveis para download aqui. Na verdade, nem precisa baixar, aconselho vocês fazerem seus proprios scripts, visto que o processo é simples e será exemplificado a seguir:

Suponha que você esteja em /dev/pts/1 (ambiente grafico) e execute o xmms.
Agora voce vai para /dev/tty6 (terminal puro) mas queira trocar a musica que está tocando, daí você pode criar um arquivo FIFO que servira como “ponte” de comunicacao entre um terminal e outro.
Sera o seguinte:

Script cliente —> arquivo FIFO <— Script servidor

Testando:

No ambiente grafico faça:

$ mkfifo fifoxmms
$ CMD=$(cat < fifoxmms)
$ $CMD

Agora va para o terminal:
$ echo “xmms -pf” > fifoxmms
$ echo “Mae te adoro!!”

Veja que quando tentamos ler do FIFO e este ainda nao recebeu nenhum dado, o shell fica “agarrado” esperando ate que se envie algo.
Assim que escrevemos no FIFO via echo, a variavel CMD recebera o “xmms -pf” que acabou de chegar e logo em seguinda, o shell executara o conteudo da variavel como um  comando/programa qualquer.

O comando “xmms -pr” troca a musica do xmms mas se o xmms nao estiver rodando, ele é iniciado e ja comeca tocando.

Bem pessoal, espero que vocês tenham gostado. Na verdade, este artigo só foi para mostrar a vocês um exemplo legal sobre o uso do FIFO. Para fazer seus scripts, tenha certeza que um deles ficara fazendo a leitura do FIFO atraves de um loop infinito, pois quando um dado é recebido, o script se apronta e ficara preparado pra leitura novamente!

[]’s
Daemonio

Nota: Esse texto foi escrito por mim nos meados de 2007 quando a sensação era usar fluxbox e xmms (apesar que os uso até hoje). Nessa época eu iria postá-lo no vivaolinux, mas o incoveniente de perder esse texto ocorreu. Revira HD daqui e revira de lá, acabei achando esse documento, então resolvi postá-lo aqui. Repare que não formatei o texto e muito menos corrigi erros de português e acentuações. Isso para deixá-lo do jeito que escrevi 5 anos atrás (o tempo passa..). Ah, em relação aos scripts eu não os tenho mais, mas acredito que você não iria precisar deles mesmo.

Deixe um comentário