autocd 3.02.10a by MATPOCKuH


Содержание

  1. Что это?
  2. Системные требования
  3. Изменения
  4. Инсталляция
  5. Запуск
  6. Работа с демоном
  7. Клиентские программы
  8. Ограничения
  9. Проблемы
  10. Где взять?
  11. Спасибы
  12. Обратная связь


Что это?

autocd предназначен для автоматического проигрывания и монтирования CD-дисков.

Для того чтобы прослушать диск вам достаточно будет только вставить его в привод. При проигрывании под FreeBSD кнопка Eject на приводе не блокируется, и Вы можете, не касаясь клавиатуры или мыши, прекратить проигрывание и достать диск. Под NetBSD и OpenBSD это невозможно в связи с особенностями работы этих OS с CD-ROM приводами.

Программа в первую очередь предназначена для тех, кто обычно слушает диски от начала и до конца и не любит монтировать диски с данными руками. В программе пока отсутствуют многие возможности обычных cd-проигрывателей, такие как проигрывание в режиме ознакомление и т.п., однако существует уникальная возможность сохранения позиции проигрывания с последующим ее восстановлением, что можно использовать если необходимо временно достать диск из привода или переставить из одного привода в другой, а в последствии продолжить его прослушивание с прерванного места. Позиции могут быть сохранены для нескольких дисков.

Использование этой программы не создает помех запуску других проигрывателей CD-дисков, использованию команды cdcontrol(1) и программ для записи дисков, однако существует возможность временного запрета проверки какого либо из устройств.

Программа является демоном, который рекомендуется запускать от суперпользователя. При вставке диска в привод autocd автоматически определяет тип диска и, если на нем есть аудио-трэки, начинает их проигрывание. В случае если вставлен диск, имеющий только данные, и демон запущен от суперпользователя, производится попытка его монтирования.

Преимущества autocd:

  1. Программа является демоном и не требовательна к ресурсам.
  2. autocd позволяет автоматически проигрывать или монтировать диск при его вставке в привод
  3. Размонтирование вставленного диска возможно одной командой из под обычного пользователя.
  4. Если это необходимо, можно временно запретить демону проверку определенных устройств, что может быть полезно при записи или копировании дисков.

ЭТА ПРОГРАММА ЯВЛЯЕТСЯ СВОБОДНО РАСПРОСТРАНЯЕМОЙ И ПОСТАВЛЯЕТСЯ ПО ПРИНЦИПУ "AS IS". АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОСЛЕДСТВИЯ ЕЕ ИСПОЛЬЗОВАНИЯ.


Системные требования

Пpогpамма пpовеpена в FreeBSD 4.8-STABLE и 5.1-CURRENT, NetBSD 1.5.1 и OpenBSD 3.2, но должна pаботать и дpугих веpсиях этих систем. Работа под другими системами на текущий момент не была проверена.

ВНИМАНИЕ! Под NetBSD и OpenBSD демон не был тщательно протестирован, была осуществена только первичная проверка работоспособности демона.

Портирование в другие операционные системы возможно в случае наличия в них аналогичного используемому интерфейса к CD-приводу предоставляемого системой. Если Вы заинтересованы в портировании системы, отличные от указанных, свяжитесь со мной.


Изменения

3.02.10a:
[*] - обеспечена совместимость с новыми изменениями в ATAng в FreeBSD.

3.02.09a:
[*] - исправлены проблемы при сборке и работе под NetBSD/OpenBSD, внесённые при очередных обновлениях.
[*] - оптимизирован acdplay.c.

3.02.08a:
[*] - обеспечена совместимость с новым ATAng в FreeBSD.
[*] - унифицирован вывод версии.
[*] - исходные коды еще немного поправлены в сторону style(9).

3.02.07a:
[*] - при запуске execl() и fork() не обрабатывались ошибки. Исправлено.

3.02.06a:
[*] - исправлена ошибка в сообщениях об ошибках при обработке параметров демона.
[*] - косметические исправления и изменения.

3.02.05a:
[*] - внутренняя оптимизация кода демона.
[*] - минимизировано различие в статусе устройств и информации, выдаваемой демоном клиентам.
[*] - исправлена неточность в Makefile.in, касавшаяся выбора библиотеки [n]curses.

3.02.04a:
[*] - исправлена одна проблема, возникшая из-за различий в histedit.h.
[*] - в configure скрипте добавлена проверка на библиотеку curses.

3.02.03a:
[*] - еще поправлены man страницы. man на autocd перенесён в 8-ую секцию. Thanks to ozz.

3.02.02a:
[*] - man страницы приведены к стандартному виду. Thanks to ozz.

3.02.01a:
[*] - небольшие исправления в Makefile.in

3.02.00a:
[+] - добавлена управляющая программа acdplay, по функциональным возможностям аналогичная cdplay.
[+] - в cdctl появился интерактивный режим.
[+] - добавлены команды volume, speed.
[+] - создан примитивный configure скрипт.
[*] - исправлена ошибка, приводившая к подвисанию cdctl при вызове с пустой командой.

3.01.02a:
[*] - исправлены параметры вызова install в Makefile.

3.01.01a:
[*] - добавлен вызов ioctl(CDIOCALLOW) при выполнении операции eject (взято из cdcontrol.c).
[+] - добавлены команды next, previous, close, listsaved.

3.01.00a:
[*] - исправлена ошибка, приводившая к падению демона.
[*] - внутренние изменения логики взаимодействия демона и клиентской части.
[+] - добавлены команды save и load, позволяющие сохранить текущее состояние проигрывания с последующем его восстановлением. Может быть использовано для временной замены диска или на "умных" приводах, которые после длительной паузы сбрасывают статус.
[+] - добавлены команды help и version, позволяющие вывести список доступных команд и версию демона соответственно.

3.00.02a:
[+] - добавлена опция -c, заставляющая демон не закрывать устройства во время проигрывания диска. Эту опцию необходимо использовать в NetBSD и OpenBSD.
[+] - в полной мере (?) реализована поддержка NetBSD и OpenBSD.
[+] - введеные новые команды - cdid, disable, enable.

3.00.01a:
[+] - написаны примитивные man страницы.
[*] - исправлена проблема при вызове ioctl(CDIOREADTOCENTRYS), приводившая к ошибке при чтении оглавления диска под NetBSD и OpenBSD. Теперь демон может автоматически монтировать диски под NetBSD и OpenBSD. Проигрывать диски, к сожалению, пока еще демон не может.
[*] - коды возрата приведены в соответствие с sysexits(3).
[*] - поправлены некоторые неточности в документации.

3.00.00a:
[+] - в очередной раз полностью переписано взаимодействие управляющих программ с демоном. Для своей работы autocd более не требует System V IPC. Для взаимодействия используются Unix Domain Sockets.
[+] - введена возможность мониторинга демоном нескольких устройств.
[*] - для разборки параметров командной строки теперь используется getopt(3).
[+] - введена команда cdctl, пока имеющая Command Line Interface, позволяющая управлять демоном.
[-] - удалены управляющие программы cdstop, cdtracks и cdstat.
[-] - удалены управляющие программы eject и pause. Отныне они являются символическими ссылками на cdctl.
[*] - исправлены аргументы при некоторых системных вызовах.
[*] - autocd теперь действительно работает со SCSI CD-ROM приводами.
[-] - удалена поддержка опции NOREOPEN, как оказавшуюся бессмысленной для SCSI CD-ROM приводов.
[*] - устройсвом по умолчанию всегда считается /dev/cd0c.
[-] - удалена поддержка обработки сигналов USR1 и USR2.
[*] - исправлено определение типа трэка на диске.
[*] - стиль написания кода чуть более приведен к требованиям style(9).

2.01.05a:
[*] - поправлены некоторые неточности в документации.

2.01.04a:
[+] - autocd отныне выводит сообщения об ошибках при работе через syslog(3).
[*] - обработчики сигналов демона приведены в соответствие с требованиями стандарта POSIX.
[*] - становление демоном производится с использованием daemon(3).
[*] - немного "причесан" стиль оформления исходных кодов.

2.01.03a:
[+] - полностью переписано взаимодействие управляющий программ с демоном.
[+] - добавлены новые возможности: полная остановка проигрывания, проигрывание конкретных трэков, получение статуса привода.
[+] - добавлена переменная RCPREFIX в Makefile.
[*] - autocd.sh.sample переименован в autocd.sh и немного поправлен.

1.01b:
[*] - autocd.sh.sample пpиведен в более коppектный вид.
[-] - испpавлены некотоpые ошибки в документации.
[+] - добавлена поддеpжка NetBSD.


Инсталляция

Для установки программы необходимо скачать исходный код и выполнить следующие команды из-под пользователя root:
	gzip -cd autocd-3.02.10a.tar.gz | tar xf -
	cd autocd-3.02.10a
	./configure
	make
	make install


Запуск

Формат команды autocd:

autocd [-hc] [-d device] [-p mountpoint] [-f fstype] [-o options]
[-s socket] [-u user] [-g group] [-m mode]

-h - краткая справка по использованию команды.

-c - не закрывать устройства при проигрывании диска. Необходимо указывать под NetBSD и OpenBSD.

-d device - указать устройство, соответствующее CD-приводу. Если первым символом имени не является '/', то в начало автоматически добавляется '/dev/'. Если не указано ни одного устройства, используется /dev/cd0c. Если не найдено ни одного устройства, соответствующего CD-ROM приводу, программа завершает свою работу. Опция может быть указана несколько раз.

-p mountpoint - точка монтирования для последнего указанного устройства. Если не указана - производится поиск информации в /etc/fstab.

-f fstype - тип файловой системы для последнего указанного устройства. Если не указан - производится поиск информации в /etc/fstab. По умолчанию - cd9660.

-o options - опции монтирования для последнего указанного устройства. Если не указаны - производится поиск информации в /etc/fstab. По умолчанию - ro.

-s socket - путь к управляющему сокету. По умолчанию - /tmp/autocd

-u user - хозяин сокета. По умолчанию - root.

-g group - группа сокета. По умолчанию - wheel.

-m mode - права для сокета. Указываются в восьмиричном виде. По умолчанию - 0666.

Для того чтобы демон автоматически монтировал диски, необходимо запускать его из-под пользователя с uid=0, указывать точку монтирования с помощью ключа -p или иметь соответствующую устройству строчку в /etc/fstab вида:

/dev/acd0c	/cdrom	cd9660	ro,noauto	0	0

Демон рекомендуется запускать из соответствующего rc-скрипта.

ВНИМАНИЕ! При запуске не из под суперпользователя демона пользователь должен иметь права на чтение устройства.


Работа с демоном

После запуска autocd готов к работе и начинает мониторинг наличия диска. Управление демоном осуществляется через Unix Domain Socket. По умолчанию путь к нему /tmp/autocd. Протокол взаимодействия текстовый и в простейшем случае управление возможно используя telnet для присоединения к сокету. Для управления реализована пользовательская программа cdctl, позволяющая выполнять все возможные действия.

По сигналу TERM демон завершает свою работу. Сигнал HUP игнорируется.


Клиентские программы

cdctl [-h] [-d device] [-s socket] [command ...]
- программа управления autocd.

-h - краткая справка по использованию команды.

-d device - выбрать устройство, с которым будет осуществляться взаимодействие. Выбор возможен как по номеру из списка так и по полному имени устройства.

-s socket - путь к управляющему сокету.

command - управляющая команда. Может быть указано несколько команд. Возможные команды:
close - закрыть трэй привода.
cdid - вывести cdid в формате, используемом в проекте
CDDB.
disable - временно запретить проверку устройства.
eject - извлечь диск из привода. При необходимости производится его размонтирование.
enable - разрешить проверку устройства.
help - вывести список доступных команд.
info - вывести информацию о диске.
list - вывести список устройств, обслуживаемых демоном.
listsaved - вывести список сохраненных позицый.
load - восстановить текущий статус проигрывания.
next - перейти к следующему трэку.
play - начать проигрывание диска.
pause - поставить или снять диск с паузы при проигрывании.
previous - перейти к предыдущему трэку.
status - вывести статус привода.
save - сохранить текущий статус проигрывания.
stop - остановить проигрывание диска.
version - вывести версию демона.
volume - вывести текущий уровень громкости.
play first_track [last_track] - начать проигрывание диска с указанного трэка.
speed speed - ограничить максимальную скорость чтения с диска.
volume [+|-]volume - изменить уровень громкости.

Команды eject и pause являются символичискими ссылками на cdctl, имеют такие же ключи, и автоматически выполняют соответствующее действие.

acdplay [-h] [-d device] [-s socket] command ...
- простейший консольный проигрыватель, использующий autocd.

-h - краткая справка по использованию команды.

-d device - выбрать устройство, с которым будет осуществляться взаимодействие. Выбор возможен как по номеру из списка так и по полному имени устройства.

-s socket - путь к управляющему сокету.


Ограничения

  1. Так как для работы демон использует ioctl(CDIOCREADSUBCHANNEL), в случае, если ваш привод по каким либо причинам не поддерживает данную функцию, демон откажется работать с ним.
  2. Так как при сохранении позиции используется привязка по cdid, теоретически существует возможность неправильного определения диска при выполнении команды load.
  3. При выводе через syslog(3) сообщений о ошибках всегда используется facility LOG_DAEMON и priority LOG_ERR. Вывод сообщений не может быть запрещен.
  4. Я не утверждаю, что программа написана идеально, и я готов выслушать ваши претензии и предложения (второе лучше).


Проблемы

  1. Возможно неправильное использование ioctl(2).
  2. Так как я не нашел "man что?" (C) анекдот для слов из mount(2):
    Data is a pointer to a structure that contains the type specific argu-
    ments to mount.  The format for these argument structures is described in
    the manual page for each filesystem.
    для монтирования дисков используется execl(3) вызов mount(1). Размонтирование производится корректно, используя unmount(2).
  3. В документации возможны рудименты, случайно оставшиеся после очередных переписываний демона.
  4. Пока отсутствует описание протокола общения с демоном.
  5. В документации и различных сообщениях программы возможно страшное количество различных грамматических и не только ошибок и опечаток. При их обнаружении, пожалуйста, напишите мне.


Где взять?

Данная документация доступна по адресу:
http://kot.spb.ru/projects/autocd/.

Исходный код доступен по адресам:
FTP: ftp://kot.spb.ru/pub/src/projects/autocd/autocd-3.02.10a.tar.gz.
HTTP: http://kot.spb.ru/projects/autocd/autocd-3.02.10a.tar.gz.

Под FreeBSD Вы можете установить программу через систему портов. Порт расположен в каталоге /usr/ports/audio/autocd.


Спасибы

Спасибо maxim, ozz и krion за помощь в решении идеологических и технических вопросов и добавление программы в дерево портов FreeBSD.


Обратная связь

По всем вопросам, касающимся данной программы Вы можете обращаться ко мне по адресам:
E-Mail:
KOT@MATPOCKuH.Ru
FIDONet: 2:5030/1340@fidonet.org
IRC: MATPOCKuH@IRCNet, EFNet, Dalnet, Undernet.

Если Вы имеете желание и возможность перевести документацию на английский язык или заняться каким либо продвижением программы - пожалуйста, свяжитесь со мной.



MATPOCKuH
13.11.2003