Музыкальная шкатулка подручными средствами Andrushock Xakep, номер #062, стр. 062-110-2 # mkdir /var/spool/lpd/audio # chown root:daemon /var/spool/lpd/audio # chmod 755 /var/spool/lpd/audio - переменная if (:if=/usr/local/bin/filter:) отвечает за входной фильтр, который по замыслу разработчиков lpd должен выполнять форматирование и преобразование отправленных на печать документов. Именно на этот фильтр мы делаем основную ставку: # vi /usr/local/bin/filter #!/bin/sh /usr/local/bin/mpg123 --aggressive --stereo --8bit - > /dev/null 2>&1 Фильтр возьмет на себя роль посредника. Он будет принимать от пользователя (якобы для печати) задания со стандартного ввода (stdin), воспроизводить mp3-файлы с помощью консольного mp3-плеера (в данном случае mpg123) и посылать все сообщения об ошибках (stderr) на стандартный вывод (stdout). В качестве альтернативы этому фильтру предложу тебе не менее элегантный вариант с временным файлом, в который со стандартного ввода будут записываться все необходимые для прослушивания композиции. После окончания воспроизведения temp-файл для экономии дискового пространства будет удаляться. Лично мне эта версия скрипта, пусть она и работает немного медленнее, нравится больше: # vi /usr/local/bin/filter #!/bin/sh cat > /tmp/list.m3u /usr/local/bin/mpg123 --aggressive --stereo --8bit /tmp/list.m3u > /dev/null 2>&1 rm -f /tmp/list.m3u Далее присваиваем сценарию командного интерпретатора атрибут исполнения: # chmod +x /usr/local/bin/filter - с помощью переменной lf (:lf=/var/log/audio.err:) задается файл журналирования сообщений фильтра. # cp /dev/null /var/log/audio.err - переменная af (:af=/var/log/audio.acc:) используется для указания лог-файла, в котором учитывается распечатанный пользователем объем информации. Нам эти данные ни к чему, но все же для корректности работы lpd создадим и его: # cp /dev/null /var/log/audio.acc - с помощью переменной mx (:mx#0:) можно снять ограничение на максимально допустимый объем файла, посылаемого на печать. Примечание: если значение переменной является числом, то знак равенства заменяется знаком решетки. - подавление печати заголовков производится с помощью переменной sh (:sh:). В итоге, собрав по кусочкам все переменные вместе, получаем следующий конфиг для нашего виртуального mp3-принтера: # vi /etc/printcap mp3|local audio spooler:\ :lp=/dev/null:\ :sd=/var/spool/lpd/audio:\ :if=/usr/local/bin/filter:\ :lf=/var/log/audio.err:\ :af=/var/log/audio.acc:\ :mx#0:\ :sh: Рулим спулером печати Настало время запустить демон системы печати: # lpd $ netstat -na | grep 515 tcp 0 0 *.515 *.* LISTEN В OpenBSD для автоматической загрузки lpd в системном конфигурационном файле /etc/rc.conf необходимо изменить значение директивы lpd_flags с NO на пустые двойные кавычки: # vi /etc/rc.conf lpd_flags="" Пользователи FreeBSD добавляют в /etc/rc.conf следующую запись: # vi /etc/rc.conf lpd_enable="YES" Если у тебя линукс, то в своем дистрибутиве ты без проблем, я надеюсь, найдешь start/stop скрипт для lpd, а затем добавишь его утилитой ntsysv или chkconfig в нужный runlevel. |