Piter Punk's HomePage - Artigos
 
English version
"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:

  1. Um daemon aguarda os trabalhos a ser impressos
  2. Chega um trabalho, daemon verifica se o trabalho pode ser impresso, de quem é e para qual impressora...
  3. Com base nas informações acima, ele passa o arquivo para um outro programa, chamado filtro de impressão
  4. O resultado do filtro é enviado para o dispositivo correspondente a impressora.
  5. 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


Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004