Использование псевдопринтера для записи компакт-дисков
🕛 22.06.2009, 00:42
Механизм псевдопринтеров позволяет записывать компакт-диски способом, более удобным для пользователей Windows 9x/Me, однако применение данного средства не так очевидно, как действия, основанные на использовании разделяемого объекта файлов. Данный подход заключается в следующем. Windows-клиент передает серверу Samba zip-архив, который содержит файлы, предназначенные для записи на компакт-диск. Разделяемый объект вызывает сценарий, который распаковывает архив, и записывает извлеченные из архива файлы на компакт-диск. Данный сценарий представляет собой разновидность сценария create-cd. Описание разделяемого объекта выглядит следующим образом:[cd-print]
path = /var/spool/samba
printable = Yes
print command = /usr/local/bin/print-cd %H %s %U %P; rm %s
Как и в предыдущем примере, вам необходимо уточнить особенности обработки переменной %Р в вашей версии Samba. Возможно, удобнее будет заменить эту переменную значением /var/spool/samba. Основную часть работы по записи компакт-диска выполняет сценарий, код которого представлен в листинге 7.2.
Листинг 7.2. Сценарий для записи компакт-диска с помощью параметра print com- .
# $1 - Рабочий каталог пользователя, выполняющего запись на диск
# $2 - Имя zip-файла
# $3 - Имя пользователя, выполняющего запись на диск
# $4 - Путь к zip-файлу mkdir -p $l/cdr/samba cd $l/cdr/samba
unzip $4/$2
mkisofs -J -r -o $l/image.iso ./
cdrecord speed=2 dev=4,0 $l/image.iso
mail -s "CD-R creation finished" $3
rm $l/image.iso
rm -r $l/cdr/samba
Сценарий и разделяемый объект, используемые в данном примере, надо сконфигурировать так же, как это было сделано для объекта [ cd-create ] и сценария create-cd. Файл, содержащий сценарий, должен быть определен как исполняемый, опции утилит mkisofs и cdrecord необходимо привести в соответствие с конфигурацией вашей системы, а для утилиты cdrecord надо установить признак SUID, чтобы она выполнялась с правами root. Для записи компакт-диска необходимо передать zip-файл разделяемому объекту, используя для этого команду COPY системы DOS или Windows.
С:\> COPY FILE.ZIP\\SERVER\CD-PRINT
В результате выполнения данной команды содержимое файла FILE. ZIP будет записано на компакт диск. Очевидно, что вместо SERVER при вызове команды должно быть указано имя конкретного сервера. Эту команду следует поместить в файл . ВАТ; имя zip-файла будет передаваться ей с помощью переменной.
COPY %1 \\SERVER\CD-PRINT
При вызове файла . ВАТ надо указать файл архива. Так, если файл, содержащий команду копирования, имеет имя MAKECD. ВАТ, то для его вызова используется команда MAKECD FILE. ZIP. Если вы создадите на рабочем столе ярлык, представляющий файл . ВАТ, то для записи компакт-диска достаточно будет перетащить файл архива на пиктограмму файла . ВАТ. В состав файла . ВАТ можно также включить вызов утилиты архивирования файлов. В этом случае, чтобы записать диск, пользователь должен будет собрать все необходимые ему файлы в одном каталоге и перетащить этот каталог на пиктограмму файла . ВАТ.
Как и при использовании разделяемого объекта файлов, решение, реализованное в данном примере, имеет ряд недостатков. При выполнении сценария не проверяется размер образа диска и не принимаются меры, препятствующие одновременному обращению двух пользователей к разделяемому объекту. Но сценарий, свободный от этих недостатков, был бы гораздо сложнее.