br-linux

Artigos br-linux.org
Artigos sobre Linux em bom português, originais e com qualidade

Usando o LPD para gerenciar e ouvir MP3
Publicado em 11 de junho de 2003

O texto abaixo é uma tradução de um artigo original em Inglês de autoria do Patrick Wagstrom. O Leonardo S.R. (cefet_tuc@yahoo.com.br) obteve a permissão para traduzir o texto para o nosso idioma, e enviou para publicação aqui no Linux in Brazil.

Trata-se de um tutorial sobre como adaptar o gerenciador de impressão LPD para enfileirar e ouvir MP3. Por mais que a utilidade prática possa ser questionada, no mínimo trata-se de uma maneira interessante de conhecer melhor o funcionamento do LPD.

LPD para divertir e ouvir MP3
Arquivo original:http://patrick.wagstrom.net/weblog/archives/000128.html
Escrito por: Patrick Wagstrom
Traduzido por: Leonardo S.R.

Cenário

Muitos dos verdadeiros geeks Unix reconhecerão quão agradável é o LPD como um mecanismo de queueing(tarefas) distribuído para administrar todos os trabalhos enviados à impressora. Tem uma certa simplicidade, todavia há algum poder para ir além. É uma besta difícil de domesticar, mas uma vez compreendido, tudo começará a sair precisamente como você quer.

Mas, o que a maioria das pessoas não percebe é o que LPD também pode ser usado para outras coisas. Na realidade, pode ser visto como um mecanismo geral de queueing com algumas funcionalidades adicionais para impressoras. Assim examinemos um uso mais interessante do LPD, uma máquina para distribuir um fluxo de MP3s.

Motivação

O principal motivo que me levou a esta indagação, ocorreu enquanto estava vendo estas duas fotos (um, dois) do c2k3 openBSD hackathon. Vi, obviamente, que outra pessoa já havia feito isto. E estava confiante que também conseguiria.

Motivação inicial

A primeira parada em minha indagação era consultar o 'ser' que tudo sabe da Internet, o google. O qual me mostrou uma página maravilhosa em sueco sobre como fazer esta mesma tarefa. Infelizmente, meu sueco é péssimo, mas felizmente os scripts foram escritos em bash, e o outro era apenas um arquivo de printcap.

Criando uma Entrada de printcap

A primeira coisa que você precisa fazer é criar uma entrada em seu arquivo de printcap para sua impressora de mp3. Na maioria dos sistemas este arquivo é o /etc/printcap, em meu redhat 7.3 (nenhuma placa de som no firewall openBSD) é /etc/printcap.local. Você poderá colocar o seguinte código nele:

mp3 :\ 
     :lp=/dev/null :\ 
     :sd=/var/spool/lpd/audio :\ 
     :if=/usr/local/bin/audiofilter :\ 
     :af=/var/log/audio-acct :\ 
     :lf=/var/log/audio-errs :\ 
     :sh 
Agora nós o examinaremos linha por linha. Eu ignorarei a "\" no término de quase todas linha, ela apenas informa o lpd para continuar recebendo pois há mais coisas por vir. A última linha não precisa da "\" obviamente.
    1: mp3: - o nome de sua impressora de mp3. Neste caso, só mp3
    2: :lp=/dev/null: - nós não estamos associando isto a um dispositivo físico exatamente
    3: :if=/usr/local/bin/audiofilter: - este é o filtro de entrada. Eu mostrarei como criá-lo depois.
    4: :af=/var/log/audio-acct: - este é o arquivo de contabilidade. Você pode fazer alguma coisas legais com ele, como monitorar quem mais usa o fila de tarefas(queue) e quem não usa.
    5: :lf=/var/log/audio-errs: - este é o arquivo onde serão registrados os erros. Bem, alguns erros; nem todos os erros acabarão aqui.
    6: :sh - use isto para suprimir qualquer informação de cabeçalho que normalmente seria enviada. Isto é importante ou você pode conseguir lixo antes de cada arquivo o que pode causar falhas no filtro de áudio.
Filtro de Entrada de Áudio

A chave para o sistema inteiro é que todo o processo é feito pelo filtro de entrada. Em algumas plataformas pode ocorrer um erro avisando que a impressão parou enquanto uma musica está tocando, mas isso não é grande coisa. Não há nenhuma saída do filtro de entrada, e assim nada tem que ser feito depois. Você poderá colocar o código em algum lugar como /usr/local/bin/audiofilter:
#!/bin/bash
#
# This script was originally made by Teddy Hogeborn.
# Small alterations was made by:
#   Peter Lundqvist
#   Patrick Wagstrom
#
# This is a "printer filter" for playing audio files
# Este é o "filtro de impressão" para tocar arquivos de musica

for arg in "$@"; do
  case "$arg" in
    -d*) dir="${arg#-d}" ;;
    -e*) basefile="${arg#-e}" ;;
    -f*.*) ext="${arg##*.}" ;;
  esac
done

#NT: Mude as 3 linhas abaixo caso queira usar outros reprodutores.
mp3player="mpg123 -q -o oss";
modplayer="mikmod --quiet --playmode 0 --noloops --norc"
oggplayer="ogg123 --device=oss --quiet"

file="${dir}/${basefile}"
type="$(file "${file}"| sed -e 's/^[^:]*: *//')"

case "$type" in
  MP3*)
    $mp3player -
    ;;
  Ogg*Vorbis*)
    $oggplayer -
    ;;
  RIFF*\ WAVE\ audio*)
    /usr/bin/play --type=wav --silent /dev/stdin
    ;;
  *Extended\ Module\ sound\ data*|*Protracker\ module\ sound\ data*)
    $modplayer $file
    ;;
  data|*audio*)
    if ogginfo "$file" 2>/dev/null | grep --quiet -e '^header_integrity=pass' >/dev/null; then
      $oggplayer -
    elif mp3info -x "$file" 2>/dev/null| grep --quiet -e '^File:' > /dev/null; then
      $mp3player -

    else
      play --type=auto --silent "$file" || play --type="$ext" --silent "$file"
    fi
    ;;
  *) echo "$type" >&2 ;;
esac 
Uma explicação básica do que o sistema faz. O inicio do código analisa gramaticalmente os argumentos que são passados ao filtro de impressão da impressora. Os armazena então em um par de variáveis. Tem algumas declarações sobre onde você pode encontrar seu reprodutor mp3, ogg, e mod. Você está percebendo, que este sistema é extensível com pequena dificuldade.

Depois o formato do arquivo é obtido executando o programa 'file' nele. Esta pequena bela ferramenta, negligenciada pela maioria das pessoas, examinará o arquivo, e normalmente proverá com satisfatória qualidade que tipo de arquivo ele é. É ótimo para identificar arquivos com extensões incorretas.

Finalmente, o tipo do arquivo é passado para um 'case' e então o reprodutor apropriado é chamado. Em todos os casos, o fluxo de entrada é abastecido pela entrada padrão. As aplicações deveriam ser silenciosas, o lpd normalmente assume que se há qualquer saída do filtro é que algo deu errado.

Você pode precisar modificar este script. A razão principal é que algumas versões do 'file' não retornam a mesma informação do mesmo jeito. Alguns informam "MPEG 2 layer 3 audio" para um arquivo de MP3, enquanto o meu informa "MP3, 128 kBits, 44.1 kHz, Stereo" ou algo parecido. Assim, você pode precisar modificar os valores do 'case' para que o sistema funcione corretamente.

Acessando a Placa de Som

Até este ponto nós não fizemos nada que pudesse ser considerado um grande risco de segurança. Este ponto é secundário, mas você precisa permitir que sua impressora acesse sua placa som só assim a musica será tocada. Isto é feito dando permissão para escrever no /dev/audio e no /dev/dsp. Se você está com receio de fazer um simples chmod a+rw /dev/audio /dev/dsp, pois isso permite a todos fazerem o que quiserem com sua placa de som. Será melhor que você coloque todos que deverão ter esta permissão em um grupo, e ponha a conta lp neste grupo também. Por exemplo, criando um grupo chamado snduser com todas as contas que têm acesso à placa de som, e também a conta lp. Faça um chgrp snduser /dev/audio /dev/dsp e chmod g+rw /dev/audio /dev/dsp, isto deve dar um po uco mais de segurança para você.

Quando você estiver criando arquivos, você precisará criar esses dois arquivos de contabilidade que eu mencionei na entrada do /etc/printcap. Você pode fazer isto executando os comandos a seguir:

touch /var/log/audio-acct 
touch /var/log/audio-errs 
chown lp /var/log/audio-acct 
chown lp /var/log/audio-errs 
Desfrutando A Música

O passo final é desfrutar a música. Considerando que você fez tudo certo, agora pode executar lpr -Pmp3 [seu arquivo de música] e logo depois deve começar a sair musica das suas caixas de som.

Um das coisas realmente agradáveis disto é que você pode usar lpq para ver que canções estão na fila e lprm remover uma canção da fila. Aqui está exemplo (sim, eu possuo os álbuns):

[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ Alternateen.mp3
[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ Bigger\ Than\ Elvis\ -\ Wally\ World.mp3
[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ In\ Love\ with\ a\ Geek.mp3
[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ It\'s\ a\ Beautiful\ Day.mp3
[/u2/mp3]
[patrick@dreams] lpq -Pmp3
Printer: mp3@dreams
 Queue: 4 printable jobs
 Server: pid 7043 active
 Unspooler: pid 7044 active
 Status: waiting for subserver to exit at 16:22:55.342
 Rank   Owner/ID                  Class Job Files                 Size Time
active patrick@dreams+42            A    42 Wally Pleasant - A 2727348 16:22:38
2      patrick@dreams+50            A    50 Wally Pleasant - B 2679246 16:22:42
3      patrick@dreams+52            A    52 Wally Pleasant - I 3266864 16:22:49
4      patrick@dreams+54            A    54 Wally Pleasant - I 3469897 16:22:55
Não está funcionando!

Ao contrário do que você pode estar pensando, o primeiro passo se não estiver funcionando não é me enviar um e-mail sobre a configuração do seu sistema. Eu provavelmente não serei muita útil. O primeiro passo é entrar no diretório da fila de impressão, neste caso /var/spool/lpd/audio e ver o que existe nele. O arquivo que você vai querer ver é o status.pr. Este indica o estado de sua impressora. Se houve qualquer saída do script, será salvo nele. Dê uma olhada e use para uma depuração.

Questões/Idéias de Melhora

Se você tem alguma pergunta sobre este artigo e acha que é algo que deveria ser melhor explicado, me avise. Se você tiver alguma idéia para uma melhora, eu também gostaria de ouvi-la. Eu estou sempre procurando novos 'hacks' interessantes para tentar e experimentar.

Traduzido por Leonardo S.R. (cefet_tuc@yahoo.com.br)

Postado por brain em junho 11, 2003 10:03 AM

Comentários para "Usando o LPD para gerenciar e ouvir MP3"

» Postado por: Thiago em junho 27, 2003 10:13 PM, 200.221.108:

    Estou tentando modificar esta dica, pra fazer uma especie de gerenciador de downloads usando wget, se alguem tiver alguma sugestao, ou interesse neste item, envie um email pra mim. Obrigado.

 

» Postado por: c7g em julho 14, 2003 07:06 PM, 200.222.97.:

    Elite! Mas, não para por aí...
    heh
    []s c7g .aka. Cyber7hug

 

» Postado por: sou analfabeto mas preciso de informações em outubro 28, 2003 03:32 PM, 200.103.245:

    cara! esse subserver eh um programa de HAKEAR????

 

» Postado por: Luiz Felipe em dezembro 10, 2003 04:35 PM, 200.138.63.:

    Ola !!

    Gostaria de saber se voces podem me ajudar?
    Estou procurando um programa para gerenciar impressões no Linux.
    Ok voces vao falar tem o Cups.
    Mais o cups nao te da estatisticas de quantas folhas o fulano pode imprimir por dia, nao da quantas folhas tal pessoa ja imprimil etc...
    Gostaria de uma resposta
    Grato
    Luiz Felipe
    Técnico em Hardware
    Técnico em Linux

 

» Postado por: Leonardo S.R. em abril 24, 2004 07:13 PM, 200.242.199:

 

» Postado por: Fernando Medina em maio 9, 2004 09:09 AM, 200.151.109:

    Meu nome é Fernando Medina e estou com um problema e acho que voce pode me ajudar. Eu entrei em seu site em que voce ensina instalar o programa print server. Não sei se este é o mesmo programa que eu uso aqui, o que eu uso é o LPD SERVER, é o mesmo? se for me de uma ajuda. O problema é o seguinte, no meu trabalho nos usamos este programa para simular um servidor de impressão em uma máquina para que outras possam imprimir nela, o servidor é unix, tudo bem, o problema é que um certo dia esse programa foi deletado em uma das máquinas e agora eu não estou conseguindo configura-lo, eu coloco todas configurações e nada, não imprime nada, sera que vc pode me dra uma luz???? pode me passar os passos para configura-lo?? agradeço muito. Espero resposta

 

» Postado por: Zithromax Online em setembro 23, 2004 01:51 PM, 65.75.139.9:

    Zithromax online antibiotic.

 

» Postado por: Amoxicillin em outubro 4, 2004 01:18 PM, 67.19.91.50:

    Amoxicillin information.

 

» Postado por: Cialis em outubro 8, 2004 09:31 PM, 65.75.139.9:

    Cialis information site.

 

» Postado por: Levaquin em outubro 12, 2004 09:43 PM, 65.75.139.9:

    Info on Levaquin online.

 

» Postado por: Seasonale em outubro 14, 2004 04:34 PM, 65.75.139.9:

    Seasonale online site.

 

» Postado por: Hélio em outubro 15, 2004 12:44 PM, 200.168.110:

    Queria saber qual o programa que eu posso usar no Linux para ver Video.

    Grato.

 

» Postado por: Elidel online em novembro 2, 2004 09:16 PM, 208.53.138.:

    Elidel online site.

 

» Postado por: Jimmie em novembro 3, 2004 07:42 PM, 69.193.101.:

    Helo

 

Antes de comentar...

- Preserve a qualidade desta discussão
- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum.
- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver provocado - um erro não justifica o outro
- Não seja um e-mala ;-)

Envie seu comentário









Lembrar as informações pessoais?


Atenção: Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum, onde mais pessoas estarão disponíveis para respondê-lo..






Nota: os comentários pertencem a seus respectivos autores e são de responsabilidade de quem os postou. O restante desta nota está disponível sob a licença GNU FDL, exceto se explicitamente declarado em contrário.