"Imprimindo" Músicas
Piter PUNK
Você tem vários computadores, todos com arquivos de músicas
variados e apenas um deles ligado à caixinhas de som? Você
tem que ficar copiando arquivos e usando ssh, exportando via
NFS e só Deus sabe mais o que? Bom, com este artigo os seus
problemas terminaram, é possível utilizar o comando lpr para
enviar os seus arquivos de música para o computador destino
e começar a tocá-los imediatamente
1. Introdução
Pensei nisto enquanto estava em casa... queria tocar uma música,
mas as caixas de som estavam em outro computador (é, não tenho caixas
de som em todos os computadores...). Copiei o arquivo de música para
o outro micro, dei um ssh para a máquina e toquei a bendita música.
Muito trabalho para pouca coisa.
Usando um pouco mais a cabeça, cheguei a conclusão de que poderia
usar um filtro para tocar a música. Um filtro de impressão! Confuso?
Bom, é realmente um pouco confuso, mas só um pouco. O sistema de
impressão dos *NIX funciona normalmente assim:
- Um daemon aguarda os trabalhos a ser impressos
- Chega um trabalho, daemon verifica se o trabalho pode
ser impresso, de quem é e para qual impressora...
- Com base nas informações acima, ele passa o arquivo para
um outro programa, chamado filtro de impressão
- O resultado do filtro é enviado para o dispositivo correspondente
a impressora.
- Finito! Trabalho impresso!
O nosso sistema utilizará exatamente esses passos! A principal diferença,
é que ao invés de mandar o arquivo para o dispositivo da impressora, iremos
executar um player de música e "tocar" o arquivo. Vamos é nos aproveitar
do daemon de impressão já estar escutando a rede e possuir uma série
de configurações para saber quem pode usar a nossa "impressora". Com isso,
podemos nos preocupar apenas com o filtro (e com tocar a nossa música).
2. O servidor
2.1. Instalação
Como servidor de impressão vamos utilizar o LPRng, que é bem simples de
configurar e de usar. A primeira coisa a fazer é nos certificarmos que
o LPRng esteja instalado e, mais importante, instalado corretamente.
Primeiro, verifique se o pacote está instalado. Para isso, basta olhar no
/var/log/packages e verificar se lá dentro existe algum arquivo com nome
semelhante a este: lprng-3.8.22-i486-1
Depois, verifique se os links de comando estão todos corretos:
$ ls -l `which lpr`
lrwxrwxrwx 1 root root 9 2003-09-12 21:17 /usr/bin/lpr -> lpr-lprng*
O link do lpr deve apontar para o lpr-lprng, como no exemplo acima. Se isso
não estiver ocorrendo, você tem duas alternativas, refazer todos os links
na mão ou reinstalar o pacote do lprng. Sinceramente, é mais rápido e fácil
reinstalar o pacote. Se você for masoquista, os programas que você
provavelmente vai ter que corrigir os links são:
- /usr/bin/lpstat
- /usr/bin/lp
- /usr/bin/lpr
- /usr/bin/lpq
- /usr/bin/lprm
Lembre que para instalar um pacote, basta utilizar o comando installpkg.
2.2. Configuração
2.2.1. /etc/printcap
A primeira configuração que faremos é inserir a impressora. Para isso,
vamos editar o /etc/printcap, se não houver nenhum no seu sistema, basta
criá-lo. Insira no arquivo as seguintes linhas:
mp3:\
:lp=/dev/null:\
:if=/usr/local/bin/lprplayer:\
:sd=/var/spool/lpd/mp3:\
:af=/var/spool/lpd/mp3/acct:\
:mx#0:\
:sh:
Vamos agora ao significado dessas linhas mágicas... a primeira, é o nome
da impressora. Eu chamei de "mp3", mas você pode chamar do que quiser. Na
segunda linhas, indicamos o dispositivo desta impressora, no nosso caso, é
o /dev/null ou seja, mandamos os arquivos para serem impressos no limbo...
A terceira linha é onde indicamos qual será o nosso filtro, enquanto a
quarta e a quinta linha apenas nos indica onde irá ser o diretório de spool.
As últimas duas dizem que os arquivos não tem limite de tamanho e que não
deve ser impresso cabeçalho nas páginas. E é só.
Não precisa criar os diretórios e arquivos indicados no /etc/printcap
ainda... nós vamos fazer isso mais tarde.
2.2.2. /etc/lpd.perms
Este arquivo configura uma série de opções para o LPRng. Nós apenas vamos
configurá-lo para aceitar conexões da nossa rede, mas você pode mudar isso
como achar melhor (ou como conseguir -;)).
Abra o arquivo e, antes de todas as linhas de ACCEPT, coloque:
ACCEPT SERVICE=X REMOTEIP=192.168.0.0/24
Com isso, estamos aceitando todos os trabalhos enviados pela rede
192.168.0.0 (e netmask 255.255.255.0). Isso é muito importante para o
nosso sistema, já que é um sistema de músicas via rede, precisamos que
o LPRng esteja acessível pela rede.
2.2.3. /etc/rc.d/rc.lprng
Nosso próximo passo, e colocar o LPRng para iniciar direto no boot.
Faça isso com o comando:
# chmod +x /etc/rc.d/rc.lprng
Aproveitando a onda, crie um arquivo vazio chamado /usr/local/bin/lprplayer,
se não fizer isso, receberá reclamações de que o arquivo não existe...
# touch /usr/local/bin/lprplayer
Agora que tudo está pronto, rode o checkpc, ele irá criar os diretórios
necessários para a nossa "impressora":
# checkpc -f
Se o lpd estiver rodando, é necessário fazer com que ele releia os arquivos
de configuração, faça isso com o comando:
# lpc reread
Se não estiver rodando, é hora de iniciá-lo:
# /etc/rc.d/rc.lprng start
Pronto! Nosso servidor já está no ar e recebendo conexões! Se quiser dar
uma confirmada, use o comando lpstat, você deve ver algo semelhante a isto:
# lpstat -s mp3@rachael
scheduler is running
system default destination: mp3
system for mp3: localhost
system for mp3: rachael
Óbvio que onde está "mp3" você substitui pelo nome da sua impressora e
onde está "rachael" você coloca o nome da sua máquina.
3. O Filtro
O filtro em si é um shell script bem simples. Quando o daemon chama um
filtro, ele passa várias opções pela linha de comando, entre elas, qual
é o arquivo a ser impresso. Nós extraímos esta informação da linha
de comando, a partir dela descobrimos o tipo de arquivo e, com este tipo
selecionado, chamamos o player mais interessante para a tarefa.
O código está bem comentado:
#!/bin/sh
#
# lprplayer - Player de músicas genérico, tenta descobrir o tipo de música
# e usar o player adequado
#
# Author: Piter PUNK
#
# Recebe a linha de entrada e seleciona o décimo segundo campo dela, o
# spooler.
#
SPOOL=`echo ${12} | cut -f 2- -d /`
# Separa do spooler o nome do arquivo de entrada com a música
#
FILENAME="/$SPOOL/`echo ${13} | cut -f 2- -d e`"
# Identifica o tipo de arquivo
#
TYPE=`file $FILENAME | cut -f2 -d:`
# Verificando o tipo de arquivo, executa o player adequado. Coloquei aqui
# os que eu achei mais interessantes, você pode alterar para o que achar
# melhor.
#
if [ "`echo $TYPE | grep -i MP3`" != "" ]; then
madplay $FILENAME
elif [ "`echo $TYPE | grep -i WAVE`" != "" ]; then
play $FILENAME
elif [ "`echo $TYPE | grep -i VORBIS`" != "" ]; then
ogg123 $FILENAME
fi
Lembre apenas de tornar este arquivo executável, depois de colocá-lo
em /usr/local/bin/lprplayer.
Agora está terminado, você já pode enviar seus arquivos de música para
a impressora MP3, sem nenhum medo... faça isso com o comando:
# lpr -Pmp3 arquivo.mp3
4. Os Clientes
Depois de toda essa configuração no servidor, é necessário configurar
os clientes também para utilizarem essa nossa nova "impressora". Para isso,
nos clientes deve estar rodando o lpd com algumas configurações especiais...
4.1. /etc/printcap
Basta adicionar as seguintes linhas no /etc/printcap:
mp4:\
:lp=:\
:rm=rachael:\
:rp=mp3:\
:sd=/var/spool/lpd/mp4:\
:mx#0:\
:sh:
Esta é a configuração meio que "default" de uma impressora remota. Os
campos lp, sd, mx e sh você já conhece e sabe qual a finalidade deles,
de novidade temos a linha com "rm=rachael" e a "rp=mp3".
A primeira delas, indica qual é o servidor onde está a impressora
remota, enquanto a segunda nos mostra qual é a impressora remota. Eu
coloquei aqui o nome da impressora como "mp4" só para mostrar que o nome
da impressora pode ser diferente nas estações e no servidor... você pode
colocar o nome que quiser, inclusive o mesmo nome.
4.2. /etc/rc.d/rc.lprng
Agora, assim como no servidor, devemos garantir que o lpd esteja
sendo iniciado no boot... fazemos isso com o comando:
# chmod +x /etc/rc.d/rc.lprng
E, novamente, vamos utilizar o comando checkpc para criar os arquivos
que precisamos:
# checkpc -f
Depois, se o lpd estiver rodando, execute o comando:
# lpc reread
Se não estiver, coloque-o no ar:
# /etc/rc.d/rc.lprng start
Pronto! Está tudo configurado e terminado. Pode tocar os seus mp3 a vontade
utilizando o comando:
# lpr -Pmp4 arquivo.mp3
5. Conclusão
Chance dupla de aprender, além de criarmos uma espécie de "servidor de
som", aproveitamos para conhecer um pouco mais do funcionamento do sistema
de impressão. Além de simples de fazer, é extremamente simples de usar,
unindo o quase-útil ao agradável -;).
Quaisquer dúvidas, críticas ou sugestões devem ser mandadas para o
lugar de sempre: piterpk@terra.com.br
|