![]() |
Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||||||||||||||||
![]() www.lissyara.su
—> статьи
—> FreeBSD
|
|
Подключаем принтер по USB и смотрим как определился:
|
Все определилось корректно. Для подключения принтера ставим следующие пакеты:
1) CUPS (Common Unix Printing System) - Сам сервер печати
|
2) Gutenrint-base (High quality drivers for Canon, Epson, Lexmark, and PCL printers for use with Ghostscript, CUPS, Foomatic, and the Gimp). Драйвера для MP540 я нашел в этом пакете.
Предупреждение: сборка этого порта тянет за собой чертову кучу графбиблиотек, поэтому будьте готовы к долгому процессу сборки. Также при сборке этого пакета будут подтянуты библиотеки pango и cairo (Внимание: ОБЯЗАТЕЛЬНО соберите их с поддержкой X11, иначе устанавливаемые в дальнейшем пакеты будут ругаться на ее отсутствие у этих библиотек)
|
Приводим конфиг CUPS (/usr/local/etc/cups/cupsd.conf) к такому виду:
|
Во время работы CUPS мне приходилось наблюдать в логе ошибок cups /var/log/cups/error_log подобные сообщения:
E [10/Aug/2013:22:56:31 +0400] [CGI] Saw EOF, expected '}'! E [10/Aug/2013:22:56:43 +0400] [CGI] Saw EOF, expected '}'! E [10/Aug/2013:22:56:43 +0400] [CGI] Saw EOF, expected '}'! E [10/Aug/2013:22:57:39 +0400] [CGI] Saw EOF, expected '}'! E [15/Aug/2013:08:25:13 +0400] [CGI] Saw EOF, expected '}'! |
Эта ошибка давно описана на дебиановском багтрекере. Ее причина - отсутствие закрывающих фигурных скобок в русских CGI файлах. Ну что же, раз не исправили разработчики, то придется нам:
Добавляем закрывающую фигурную скобку перед закрывающим тегом </P> в файле /usr/local/share/cups/templates/ru/classes-header.tmpl:
строку
|
меняем на
|
Добавляем закрывающую фигурную скобку перед закрывающим тегом </P> в файле /usr/local/share/cups/templates/ru/jobs-header.tmpl:
строку
|
меняем на
|
Добавляем закрывающую фигурную скобку перед закрывающим тегом </P> в файле /usr/local/share/cups/templates/ru/printers-header.tmpl:
строку
|
меняем на
|
Все, эта назойливая ошибка теперь не будет мозолить глаза
Включаем CUPSD в /etc/rc.conf:
|
Стартуем CUPSD:
|
Проверяем, запустился ли CUPS:
|
Все запустилось, теперь надо настроить принтер. Идем на веб-интерфейс:
https://192.168.0.1:631/admin
Тут вас спросят пароль от root. Внимание: после ручной правки конфига cups большинство "галочек" в веб-морде показывают хрен пойми чего. Поэтому не очень-то им доверяйте
Нажимаем кнопку "Добавить принтер":

Ага, принтер определился, но почему-то в двух ипостасях. Выбираем первую:

Даем принтеру имя. Внимание: это имя будет использоваться при обращении к принтеру из клиента печати!
Поэтому для удобства даем ему достаточно короткое и простое имя в латинской раскладке. Обращаем внимание на строку "Подключение" и ее значение "usb:/dev/ulpt0"
/dev/ulpt0 - это и есть устройство принтера. Разумеется, включаем общий доступ к принтеру.

В этом окне выбираем драйвер принтера (Производитель Canon, модель MP540). так как я без понятия - какой из драйверов мне надо, то выбираем тот, где есть подпись "ru":


Здесь оставляем все как есть, кроме пункта "Источник носителя". Его принудительно выставляем в значение "Cassette", так как по умолчанию принтер пытается найти бумагу в заднем лотке.

Все, принтер настроен:

Конфигурации всех принтеров будут храниться в /usr/local/etc/cups/printers.conf. После добавления принтера он будет выглядить подобным образом:
# Printer configuration file for CUPS v1.5.4
# Written by cupsd on
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
<Printer Canon>
UUID urn:uuid:127948e7-0ba2-311b-6e44-1b2c87d04d7a
Info Canon MP540 series
Location GATE
MakeModel Canon PIXMA MP540 - CUPS+Gutenprint v5.2.8
DeviceURI usb:/dev/ulpt0
State Idle
StateTime 1376160812
Type 36876
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>
Хоть CUPS хоть и запускается с правами root, но печатать будет только на устройства, принадлежащие системной группе "cups". Почему так происходит - я, к сожалению, не знаю.
Нам надо "инструктировать" devfs, чтобы она назначала определенные права устройству "/dev/ulpt0". Есть два способа это сделать:
1) При помощи файла /etc/devfs.rules и /etc/rc.conf . Приводим /etc/devfs.rules к такому виду:
[operator=5]
add path ulpt0 mode 0660 group cups
В /etc/rc.conf добавляем строку:
devfs_system_ruleset="operator"
Перезапускаем devfs:
# /etc/rc.d/devfs restart
Проверяем, подхватились ли правила:
# devfs rule show
100 path ulpt0 group cups mode 660
2) При помощи записей в /etc/devfs.conf. За этот способ отдельное спасибо пользователю USSR.
Дописываем в файл строки:
# printer
own ulpt0 root:cups
perm ulpt0 0660
В любом случае теперь при перезагрузке системы или включении/отключении принтера у него сразу будут правильные права.Однако сейчас они не применятся, поэтому выдаем права принтеру вручную:
# chown root:cups /dev/ulpt0
Проверяем, есть ли права на запись в устройство у группы "cups":
# ls -la /dev/ulpt0
crw-rw---- 1 root cups 0, 137 10 авг 23:02 /dev/ulpt0
Все нормально, можно печатать. Пускаем на принтер пробную страницу из веб-интерфейса и, если все в порядке, идем настраивать клиенты печати.
Ниже привожу примеры настройки и скриншоты клиентов печати Windows 7 и Ubuntu (KDE):
1) Ubuntu (KDE)

2) Windows 7
Выбираем сетевой тип принтера:

Не дожидаясь окончания поиска тыкаем в "Нужный принтер отсутствует в списке":

Вручную вбиваем адрес принтера:

Выбираем драйвер принтера (ВНИМАНИЕ: У меня драйвер уже был установлен! Вам, вероятнее всего, придется выбрать расположение драйвера руками. Как это сделать я расписывать не буду.

С принтером все. Пускаем на него тестовые страницы и радуемся, если все работает. Если нет - то обращаемся к error_log cups.
Предположим, что принтер настроен и печать работает. Теперь настраиваем сканер и веб-интерфейс к нему.
Устанавливаем пакеты:
1) sane-backends (Собственно сам пакет sane и утилиты для работы со сканером из командой строки)
# cd /usr/ports/graphics/sane-backends && make install clean
2) sane-frontends (Еще какое-то барахло для работы со сканером. Было указано в инструкции к веб-морде)
# cd /usr/ports/graphics/sane-frontends && make install clean
3) ImageMagick-nox11 (различные утилиты для конвертаций графических форматов, в том числе и утилита convert который непосредственно используется в веб-морде. nox11 для того - чтобы не притащило за собой иксы)
# cd /usr/ports/graphics/ImageMagick-nox11 && make install clean
Вот далее я точно не помню, но что-то требовалось еще доустанавливать... В общем если по каким-то причинам не захочет сканировать - попробуйте проверить лог ошибок веб-сервера. Там будет ругань на то, чего не хватает.
Если наткнетесь - пожалуйста напишите в обсуждение и я добавлю информацию в статью.
В качестве веб-морды я использую phpsane, так как он достаточно прост в настройке и освоении. Однако для его работы необходим веб-сервер и установленный php. Лично я использую lighttpd+php53( сначала я пытался использовать yaws, однако там были косяки с скачиванием файлов, поэтому я вернулся к lighttpd). Поскольку настройка и установка php и lighttpd неоднократно рассматривалась и обсасывалась, я только распишу моменты, в которых могут возникнуть вопросы:
- создатель phpsane обозвал главную страницу "phpsane.php", а не index.php. Я хотел обращаться к веб-серверу без принудительного указания страницы,
поэтому в конфиг lighttpd я добавил такую строку:
index-file.names += ( "phpsane.php" )
Разумеется, можно переименовать сам phpsane.php в index.php, а также поменять все ссылки на него во всех остальных файлах... Но мне было просто лениво.
Я повесил веб-сервер на порт 8800 и запустил его:
Код:
# sockstat -l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
www lighttpd 10479 4 tcp4 192.168.0.1:8800 *:*
Веб-сервер работает. Теперь надо установить собственно веб-морду к сканеру. Скачиваем последнюю версию phpsane со странички
http://sourceforge.net/projects/phpsane/
Внутри архива находится папка, к которой надо предоставить доступ веб-серверу. Если вы все запустили правильно, то при заходе на веб-интерфейс у вас будет отображаться что-то вроде:

Однако это еще не все, ведь сервер работает с правами пользователя www, у которого нет прав на чтение со сканера! Для этого добавляем пользователя www во встроенную группу "operator":
# pw groupmod operator -m www
Пробуем найти наш сканер:
# sane-find-scanner -q
found USB scanner (vendor=0x04a9 [Canon], product=0x1730 [MP540 series]) at
libusb:/dev/usb:/dev/ugen4.5
Сканер нашелся. Ключевое устройство - /dev/ugen4.5. Однако это устройство является ссылкой на "/dev/usb/4.5.0":
# ls -la /dev/ugen4.5
lrw-rw---- 1 root wheel 9 9 авг 23:20 /dev/ugen4.5 -> usb/4.5.0
Надо установить права для самого устройства. Я раньше считал, что также нужно установить права и для ссылки, но выяснилось, что это необязательно. Устанавливаем права устройству мы снова при помощи devfs одним из двух способов:
1) Добавляя строки в /etc/devfs.rules:
# это добавлено для сканера
add path usb/4.5.0 mode 0660 group operator
# это было ранее добавлено для принтера
add path ulpt0 mode 0660 group cups
Как видно - мы в одном профиле устанавливаем права как для устройства принтера, так и для устройства сканера.
2) Добавляя строки в /etc/devfs.conf:
# scanner это добавлено для сканера
own usb/4.5.0 root:operator
perm usb/4.5.0 0660
# printer это было ранее добавлено для принтера
own ulpt0 root:cups
perm ulpt0 0660
Устанавливаем права для устройства сканера вручную (либо просто перезагружаемся):
# chown root:operator /dev/usb/4.5.0
# chmod 0660 /dev/usb/4.5.0
Проверяем, что получилось:
# ls -la /dev/usb/4.5.0
crw-rw---- 1 root operator 0, 124 11 авг 00:10 /dev/usb/4.5.0
Теперь все в порядке, можно сканировать. Заходим на
http://192.168.0.1:8800
Выбираем нужные настройки, имя файла и т.д. и нажимаем кнопку "Сканировать". Если все сделано верно - под кнопками будут появляться ссылки на файлы сканов.
Если нет - ковыряем лог веб-сервера на предмет ошибок.[code]
размещено: 2013-08-20,
последнее обновление: 2013-11-22,
автор: zentarim
andryu, 2013-10-30 в 10:36:26
Первая статья на lissyara.su после почти двух лет затишья :)
USSR, 2013-11-06 в 18:19:33
Нашел еще один способ назначить права cups устройству /dev/ulpt0
место /etc/devfs.rules
ee /etc/devfs.conf
#Give cups printer access
own ulpt0 root:cups
perm ulpt0 0660
Zentarim, 2013-11-22 в 1:20:42
USSR, cпасибо вам. Указанный способ действительно работает. С вашего позволения добавляю в статью.
USSR, 2013-11-25 в 21:56:37
Конечно, я не против, но он стал у меня периодически не работать после перезагрузки, сильно долго не разбирался, вернулся к вашему способу, опять же это у меня тестовый сервак чего часто перегружаю, мало ли чего накрутил!
bammbr, 2014-12-22 в 8:21:18
> Разумеется, можно переименовать сам phpsane.php в index.php, а также поменять все ссылки на него во всех остальных файлах..
1) Можно было обойтись еще проще. Без правки конфигов.
ln -s phpsane.php index.php
2) В современных версиях phpSANE появился-таки index.html
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Время генерации страницы 0.0518 секунд
Из них PHP: 34%; SQL: 66%; Число SQL-запросов: 90 шт.
Исходный размер: 94902;
Сжатая: 16163
Комментарии пользователей [5 шт.]