Приветствую дорогие читатели и хабрагости.
После долгого копания по форумам и решения так и не решённой с их помощью проблемы, решил поделиться рецептом.
Заранее приношу извинения за графоманию, конкретика будет, но не сразу.
Немного предыстории. У моего старого друга на складе жил и работал МФУ Canon. Вполне справлялся с задачей, но по сроку службы уже начал хандрить — то бумагу не может затянуть, то ещё что-то. Замена сработавшихся деталей стала приближаться к стоимости нового устройства, и было решено купить что-то новое. Не успев особо посоветоваться со мной, товарищ купил себе Canon LBP6020 — на коробке красовалась отметка о поддержке Linux.
Дано: принтер Canon i-SENSYS LBP6020, компьютер с CentOS.
Требуется: заставить печатать как напрямую, так и по сети с других компьютеров под разными ОС.
Первым сюрпризом от Canon оказалось драйверов ни на диске, ни на сайте нет. Поддержка дала такой ответ:
Информируем Вас, что выпуск драйвера Canon i-SENSYS LBP6020 для Linux запланирован на июль 2013 года.
Товарищ решил дождаться драйверов, и срок, когда принтер мог быть возвращён в магазин прошёл — появились они на англоязычном сайте только 22-го. На русскоязычной части их нет до сих пор (29 июля).
Итак, драйвера обнаружены, скачаны. Принтер подключен к выступающей сервером машине. В виду того, что склад продолжает работать старый принтер не отключён, все печатают на него.
Распаковываем архив и через yum localinstall --nogpgcheck ставим пакеты с драйверами.
Начинаем пляски с бубном. Первым делом, обнаруживается, что использовать ccpd придётся. Напрямую CUPS печатать не сможет.
Ладно, дело такое. На форумах полно примеров запуска LBP2900 через тот же ccpd.
Дабы не путаться какой принтер есть какой, создаю правила udev.
/etc/udev/rules.d/99-capt.rules
SUBSYSTEM=="usb", ATTRS{serial}=="0000B1D25DXZ", ACTION=="add", SYMLINK+="lbp6020", RUN+="/etc/init.d/ccpd restart"
SUBSYSTEM=="usb", ATTRS{serial}=="0000B1D25DXZ", ACTION=="remove", SYMLINK+="lbp6020", RUN+="/etc/init.d/ccpd stop"
Данное правило создаёт симлинк /dev/lbp6020 с которым и должен работать ccpd.
Параметр serial был получен так:
udevadm info --query=all -n /dev/usb/lp1 --attribute-walk
После добавления плагина — udevadm trigger
Следующий пункт, настраиваем непосредственно ccpd и CUPS:
/usr/sbin/ccpdadmin -p LBP6020 -o /dev/lbp6020
/usr/sbin/lpadmin -p LBP6020 -m CNCUPSLBP6018CAPTK.ppd -v ccp://localhost:59687 -E
Важно не ошибиться, и указать порт который в /etc/ccpd.conf отмечен как PDATA_Port. Попытки печатать на UI_Port к успеху не приведут.
Собственно, на этом техническая часть завершена, дальше идёт отчёт о поддержке производителя, точнее об её отсутствии.
В CUPS появляется принтер, отправляем ему тестовое задание и… тишина. CUPS радостно отчитывается что задача ушла, но принтер не реагирует ни коим образом.
В /var/log/CCPD/ который указан как путь к журналам ccpd нет ничего. Пишем запрос в тех поддержку:
Драйвер вышел, установил. Такое впечатление, что печать уходит в /dev/null.
Система CentOS 6 x86_64, никакой диагностики получить от ccpd не удаётся, CUPS тоже молчит.
Ответ был стандартным вежливым «посыланием красноглазика по вектору»:
Просим принять во внимание, что драйвера под операционную систему Linux предоставляются на свободной основе. В связи с тем, что существует огромное множество вариантов системы Linux, компания Canon не сможет предоставить поддержки драйверов и данной операционной системы.
После ещё пары часов гугл-фу, возникла мысль что я таки что-то делаю не так. Был задан вопрос в тех поддержку.
В разделе загрузки написано:
To use this software, please read the online manual before installing the driver.Где я могу найти это руководство? Структура сайта затрудняет поиск.
Прошу принять во внимание, что Red Hat Enterprise Linux является одной из стандартных операционных систем в промышленной эксплуатации. CentOS является полным клоном Red Hat Enterprise Linux, отличающимся только товарным знаком.
Любой уважающий себя производитель оборудования, заявля о поддержке Linux, как это сделала компания Canon указав в поддерживаемых ОС Linux, поддерживает данную ОС актуальных версий. А так же SUSE Linux Enterprise, и с недавних пор — Ubuntu LTS.
Кроме того, существует единственная система печати CUPS, которая поставляется во всех дистрибутивах Linux а так же входит в Mac OS X.
По сему, прошу предоставить мне документацию по настройке и отладке ccpd, которая упоминается в разделе загрузки драйверов. Найти самостоятельно мне её не удалось.
Документация нужна на английском, русском или украинском языке.
Возможно, кто-то скажет «куда ты лезешь, не учи большую фирму работать», но вот как-то опыт работы с оборудованием Dell и HP вызвал желание чётко уяснить политику производителя.
Ответом был ещё более чёткий «посыл».
Информируем Вас, что запрошенная Вами документация не может быть выслана. Просим принять во внимание, что согласно соглашению пользователя, CANON не предоставляет каких-либо гарантий в отношении программ, файлов, драйверов и прочих материалов, содержащихся на сайте программного обеспечения CANON или загружаемых с ним. Все такие программы, файлы, драйверы и прочие материалы предоставляются «как есть».
Дальше сработал принцип «это что ж, я железяку работать не заставлю?». На сайте Canon в лицензии четко указано право пользователя проводить реверс-инжиниринг и любыми путями менять драйвера в своих нуждах. Первым делом были исследованы архивы с исходными кодами драйвера. Как оказалось, интересующая меня часть имеется только в бинарном виде, а исходники — фильтры CUPS, с GPL`ным прошлым.
Знаний ассемблера у меня 0, но добиться какого-нибудь отладочного вывода я хотел любой ценой. Натравив strings на бинарный файл с демоном я обнаружил, что отладка в нём вообще не предусмотрена. Было также обнаружено графическое приложение captstatusui. Запускаться оно соглашалось только от суперпользователя и… исправно ругалось на невозможность установить соединение с принтером намекая на отключенный кабель или обесточенный принтер. Ситуация оказалась куда банальнее. ccpd упорно игнорировал путь к usb-устройству, и пытался работать с /dev/usb/lp0 — которым был старое МФУ, не знающий никакого CAPT.
Как ни странно, но оказавшись единственным принтер заработал. Т.е. демон упорно хватался за первый попавшийся USB-принтер и пытался печатать на него, но т.к. это был не тот принтер — ничего не происходило. О чём и было сообщено тех. поддержке производителя:
Информирую вас, что мне удалось запустить принтер, причиной неисправности была программная ошибка в драйвере вызванная низкой квалификацией разработчиков. Но т.к. компания Canon не заинтересована в работоспособности своего оборудования после его продажи, я вам её не сообщаю.
Прошу принять во внимание, что запрошенная мною документация упомянута в разделе загрузки драйверов как опубликованная в открытом доступе.Благодарю вас за переписку, она помогла мне убедить заказчика впредь заказывать оборудование производства Hewlett-Packard.
Автор: praporshik