LINUX.ORG.RU

Вышел драйвер для GDI-принтеров Canon

 , , , ,


0

3

Первая работоспособная (хотя и не очень) версия открытого драйвера для принтеров Canon CAPT (LBP-****) вышла сегодня. В отличие от проприетарного драйвера, открытый является легковесным, не требует запуска демонов при загрузке системы и не саботирует работу принтеров других производителей.

При установке драйвера обратите внимание на выбор правильного устройства из списка (не usb://, а обязательно capt://) и на правильность файла *.ppd (в нем определены низкоуровневые параметры принтера, и с неправильным *.ppd принтер будет, скорее всего, печатать полосы).

Изменения:

  • полностью переписан код драйвера (с C на C++)
  • теперь драйвер работает через libusb и является бакэндом для CUPS
  • автоопределение принтеров
  • в основном устранены зависания принтера при сбоях печати

Недоработки:

  • не проверяется наличие бумаги!
  • при печати более чем одной страницы может печататься только первая
  • при печати очень сложных страниц иногда переполняется память принтера, «хвост» страницы обрезается
  • неправильные верхние и нижние поля

На сегодняшний день поддержан и проверен LBP-2900 и, вероятно, будет работать очень похожий на него LBP-3000. Другие модели не проверялись, так как их нет у разработчика.

ПРОЕКТУ ДЛЯ РАЗВИТИЯ ТРЕБУЮТСЯ РАЗРАБОТЧИКИ!

Требования: знание C++, наличие одного из CAPT-принтеров.

>>> Скачать

Ответ на: комментарий от cruxish

Тогда я лично предпочту перейти на другое железо. Например, видеодрайвера AMD (Catalyst) у меня не работают, и следующую видеокарту я буду брать NVIDIA.

duott ★★★★★ ()
Ответ на: Мда, странно, видимо старый совсем. от Crazy_Doctor

Re: Мда, странно, видимо старый совсем.

Вся страшная правда в том, что этот принтер как раз из тех, которым, можно сказать, не нужен драйвер. Собственно, у IBM PC поддержка таких аппаратов зашита в BIOS, а в винде достаточно поставить драйвер от любого матричного принера. CUPS же упорно отказывается работать с этим древним девайсом. И я нахожу это большой странностью.

anonymous ()
Ответ на: Re: Мда, странно, видимо старый совсем. от anonymous

Re: Мда, странно, видимо старый совсем.

>Вся страшная правда в том

Дениска! Залогиньтесь!

Ужас полный. Чему хоть теперь учат в школе-то? Никогда в биосе не было никакой «поддержки» никаких принтеров.

А то что с матричными принтерами отказывается рабоать CUPS то все правильно. Матричные принтеры хреново работают в графическом режиме, потому что это не их задача.

Macil ★★★★★ ()
Ответ на: Re: Мда, странно, видимо старый совсем. от Macil

Re: Мда, странно, видимо старый совсем.

>Ужас полный. Чему хоть теперь учат в школе-то? Никогда в биосе не было никакой «поддержки» никаких принтеров.

Ну ты хоть в гугл заглядывай иногда: http://frolov-lib.ru/books/bsp/v02/ch7_3.htm Или выпускники современных ВУЗов не знают, что кнопку Print Screen вовсе не для скриншотов придумали?

anonymous ()
Ответ на: комментарий от duott

Страшная правда состоит в том, что железо не всегда покупаешь сам. Случается, что оно есть по факту, да еще и казенное. Как, например, на работе у моей жены - принтер Canon LBP-800. Драйвер, написанный методом реверс-инжиниринга, я к нему сыскал через базу OpenPrinting - но глюкавость его оказалась выше терпимой. Так что надеюсь на развитие сабжа или на развитие ddiwrapper'а... :)

PVOzerski ★★★ ()
Ответ на: Re: Мда, странно, видимо старый совсем. от anonymous

Re: Мда, странно, видимо старый совсем.

>Ну ты хоть в гугл заглядывай иногда

Ой, я хренею. Обвязка для кидания ASCII символов в принтер (через LPT) стала уже «поддержкой». Любой принтер работает с командным языком. Для матричных самый распространенный Epson'овский ESC/P. По крайней мере большинство современных принтеров его или поддерживают или эмулируют.

Автор сабжа как раз занимается риверс-инжинирингом такого командного языка, к слову сказать. Поэтому, «драйвер» является по сути дела юзерспейсной программой, которая берет растр, предоставленный инфраструктурой CUPS и через свой бэк-енд отправляет в принтер, взаимодействие с которым идет через libusb.

Кстати, в CUPS есть поддержка ESC/P. И либо твой принет его не поддерживает (что маловероятно) или разработчики просто забили на этот фильтр или просто ты не смог его настроить. Еще раз повторю, работа в графическом режиме не есть задача матричного принетра.

Macil ★★★★★ ()
Ответ на: комментарий от duott

Например, видеодрайвера AMD (Catalyst) у меня не работают, и следующую видеокарту я буду брать NVIDIA.
Уверены? Причём и сейчас свободные драйвера для Radeon-ов пилят разработчики из AMD.

RussianNeuroMancer ★★★★★ ()
Ответ на: комментарий от Yampp

Ещё раз огромное спасибо за работу над этим драйвером! У вас всё обязательно получится!

RussianNeuroMancer ★★★★★ ()
Ответ на: Re: Мда, странно, видимо старый совсем. от Macil

Re: Мда, странно, видимо старый совсем.

>Ой, я хренею. Обвязка для кидания ASCII символов в принтер (через LPT) стала уже «поддержкой».

Жырнота, успокойся уже! Это именно поддержка. Ничто не мешало IBM придумать новый проприетарный формат кодов для PC. Но они выбрали именно стандарт, совместимый с выпускавшейся тогда переферией.

anonymous ()

Спасибо, ребята, у меня есть одна такая ужасная железка.

Ingwar ★★★★★ ()
Ответ на: комментарий от Reset

Reset> Нормальный postscript принтер с ethernet дыркой стоит 6т. Уверен, что на этот проект уже потрачено больше 10 человекочасов. Так в чем смысл?

В том, что принтеров ДОФИГИЩЕ.
А вообще согласен - надо просто Canon закопать.

Quasar ★★★★★ ()
Ответ на: комментарий от Yampp

Yampp> Понятно, что популяризации линукса это не способствует.

Популяризации может и не способствует, а вот повышению навыков (не только своих) - ещё как способствует. Так что проект в любом случае полезен.

Quasar ★★★★★ ()
Ответ на: комментарий от LamerOk

LamerOk> Жестокая правда жизни в том, что это верно по отношению к практически любому тьюринг-полному языку.

Вовсе нет. На самом деле вопрос в том, зачем был язык создан и как он выполняет поставленные перед ним задачи.

Quasar ★★★★★ ()
Ответ на: комментарий от sdio

sdio> Может «дешевле» будет поставить в виртуалку какую-нибудь win2000 и завести виртуальный постскипт принтер

За 1500 рублей можно купить новый принтер от HP. А ты предлагаешь купить лицензию на венду (причём на которую лицензии уже не продают. Можно купить лицензию на Windows 7 Home Basic, но она 3000-4000 рублей стоит) и организовать распечатку извращенским способом, который ещё будет отжирать гигабайт оперативной памяти (в случшем случае - четверть доступной физической). Нафига оно тогда надо?

Quasar ★★★★★ ()
Ответ на: комментарий от sdio

sdio> Хотя бы работает, в отличие от!

Фигасе работает. Файлы вручную надо закидывать в виртуальную машину, да ещё и туда приложения ставить, которые будут понимать соответствующие форматы. И не всегда под Windows имеются соответствующие приложения (про экспорт в PDF рассказывать не надо. Это тоже будет костылём, дополнительным). А за стоимость лицензии серверной венды можно купить не то что принтер... целый плоттер!

Quasar ★★★★★ ()
Ответ на: комментарий от sdio

sdio> А вы продолжайте пилить драйвер для вашего принтера, ваше право и я вами горжусь на самом деле, просто кому-то может быть проще и быстрее сделать так как предложил я и в будущем купить нормальный принтер.

Покупка нового принтера дешевле твоего способа (если лицензии на венду нет, что чаще всего имеет место).

Quasar ★★★★★ ()
Ответ на: комментарий от mashina

mashina> Со стороны опенсорса создание открытого драйвера для такого производителя это ССЗБ.

Только если принтер новый и ещё продаётся.

Quasar ★★★★★ ()

> GDI-принтер

Годится, чтобы подбросить и в падении ломом по нему вхренячить вовсю. Минута веселья, разрядка для нервов.

anonymous ()
Ответ на: Re: Мда, странно, видимо старый совсем. от anonymous

anonymous> Собственно, у IBM PC поддержка таких аппаратов зашита в BIOS

В таких случаях достаточно направить текст на устройство командой echo «Hello, fuckin printer» > /dev/tty...

Quasar ★★★★★ ()
Ответ на: комментарий от duott

duott> Например, видеодрайвера AMD (Catalyst) у меня не работают, и следующую видеокарту я буду брать NVIDIA.

GeForce и Radeon уже поменялись местами. Нвидия сейчас вперде со своим кривым блобом, который вешает систему.

Quasar ★★★★★ ()
Ответ на: Re: Мда, странно, видимо старый совсем. от anonymous

Re: Мда, странно, видимо старый совсем.

anonymous> Ничто не мешало IBM придумать новый проприетарный формат кодов для PC.

IBM проектировала свои ПК как открытые (благодаря чему остальные были убиты, и даже хорошо вначале державшийся макинтош до сих пор в полуживом состоянии). Так что ни о каких проприетарных форматах там не могло быть и речи.

Quasar ★★★★★ ()
Ответ на: комментарий от Quasar

Файлы вручную надо закидывать в виртуальную машину,

Да ты че? Сам придумал или бабки на лавочке сказали?

За 1500 рублей можно купить новый принтер от HP.

Так и покупай поддерживаемое оборудование.

А ты предлагаешь купить лицензию на венду

Я предлагал такое? Нет, используйте имеющуюся (завалявшуюся) в наличие винду, так же как вы используете завалявшийся принтер.

sdio ★★★★★ ()
Ответ на: комментарий от Yampp

Скажите спасибо, что я вообще ради вас что-то пишу.

Ого! Для себя ты пишешь в первую очередь. Так что: чсв прикрути, коптит.

sdio ★★★★★ ()
Ответ на: комментарий от RussianNeuroMancer

RussianNeuroMancer> Уверены?

Жёстко нвидия слила радеонам... Не думал, что так быстро это начнётся.
Что ж. Теперь буду ждать, когда ARM Mali станет по производительности сопоставим с Tegra - нвидию с её экстремистско-проприетарными замашками, которые даже производителям проприетарного ПО доставляют огромные неудобства, тогда смогут закопать все, кому не лень.

Quasar ★★★★★ ()
Ответ на: комментарий от sdio

sdio> Нет, используйте имеющуюся (завалявшуюся) в наличие винду

Ты уверен, что имеется завалявшаяся лицензия? О предустановленной венде и речи нет - её запрещено ставить в виртуальные машины. Если на то пошло - тогда остаётся дуалбут, что ещё неудобнее.
На линукс переходят не от хорошей жизни, а из соображений повышения надёжности и легализации в сочестании с экономией. Посему на практике оказывается ситуация такой, что венда была установлена студентом Мишей, который понятия не имеет о лицензиях (ровно как и работники предприятия, в том числе и государственного, и даже директор - ему пофиг, так как по шее не дают за это). Особенно этот вопрос остро стоит в школах - до сих пор.

Quasar ★★★★★ ()
Ответ на: комментарий от sdio

sdio> Да ты че? Сам придумал или бабки на лавочке сказали?

Windows 7 Home Basic разве умеет сетевой принтер? А это самая дешёвая доступная версия Windows на рынке.

sdio> Так и покупай поддерживаемое оборудование.

Я и покупаю. Но те, кто закупают оборудование на предприятия чаще всего некомпетентны в этом вопросе - покупают то, что дешевле по ценнику, а не то, что будет работать безотказно и гарантированно. Особенно этим грешат госорганизации по вполне понятным причинам.

Quasar ★★★★★ ()
Ответ на: комментарий от Quasar

Quasar, тебе нравится тупо спорить? Я предложил решение, ваше право отказаться, автор с болезненным ЧСВ в позу стал, а ты мне про отсутствие винды рассказываешь.

sdio ★★★★★ ()
Ответ на: комментарий от Yampp

USB device 04a9:2676 at 001.095, iface 1 Manufacturer: 'Canon', Product: 'Canon CAPT USB Device', Serial: '0000A3786AKC' Identified: <MFG:Canon;MDL:LBP2900;CMD:CAPT;VER:2.1;CLS:PRINTER;DES:Canon LBP2900> URI: capt://usb/Canon/LBP2900?sn=0000A3786AKC

Т.е. тут всё как надо. Может, можно проверить работу драйвера без добавления принтера в cups?

GblGbl ★★★★★ ()
Ответ на: комментарий от sdio

Прекращаем холивор!

Добрался до принтера, скачал сорцы, распаковал и написал make && make install от рута. Установил принтер через яст, но не печатает. Ругается что нет проги cupscat. ЧЯДНТ?

FFSinit ★★ ()

Пожалуй самая неожиданная новость за месяц

Сейчас, когда появились первые тестеры, поимею наглость дать очевидный но работающий совет. Очень ускорить отладку и частично реверсиженериринг (особенно всяких мелких параметров специфичных для каждой железки) может написание краткой инструкции по тестированию и оформлению отчета. Вроде: напечатайте файл1 с вертикальными полосками, файл2 с горизонтальными, файл3 с рисунком гарантированно выходящим за область печати. Скопируйте файлы $list и с заполненным опросником отправьте на developer@mail.com
Несмотря на примитивность и занудность способ очень неплохой и эффективный по части сбора специфических параметров

DNA_Seq ★★☆☆☆ ()
Ответ на: комментарий от Yampp

>И работают не лучше. Тоже GDI. Шило на мыло.

по крайней мере для Samsung-ов есть нормально работающий драйвер, в том числе и от производителя

lazyklimm ★★★★★ ()
Ответ на: комментарий от Artificial_Thought

>У многих других принтеров этой ценовой категории всякие чипованные картриджи и прочее.

samsung ml-1640/1641, покупался за $90 новый.

Чипованность элементарно лечится установкой перемычки, также можно сбрасывать вручную

lazyklimm ★★★★★ ()

Недодрайвер для недопринтера *блюющий_смайлик*

crycheck ()
Ответ на: комментарий от sdio

> Ого! Для себя ты пишешь в первую очередь. Так что: чсв прикрути, коптит.

Ага! Все разработчики OpenSource, которые не на зарплате сидят, пишут для себя в первую очередь. Тем более, что чисто для себя он бы скорее всего принтер купил другой и забил на это. Так что не чмыри автора, он сделал полезное дело и поделился им со всеми.

praseodim ★★★★★ ()
Ответ на: комментарий от praseodim

В моем втором сообщении было высказано уважение к работе выполненной автором. И мое альтернативное предложение было именно предложение. А некоторые могут и дальше пытаться поднять свое ЧСВ принижением других, а не повышением своего уровня.

sdio ★★★★★ ()
Ответ на: комментарий от lazyklimm

Где-то в 2003 купил себе Samsung ML 1210. Работает сносно (только в драйвере под Linux есть глюк - печатает постранично, пока не напечатает страницу, следующую не хватает; поддержка Linux, в отличие от Win64, идёт изначально). Картридж заправляю уже неизвестно сколько раз (ни разу не менял). Напечатал на нём кандидатскую (кто в курсе - представляет, сколько раз) - для того и покупал, потом печатал куда реже, в итоге счётчик на 14 тыс. страниц. Есть, конечно, сложности, но не жалуюсь - как домашний принтер очень даже неплох.

anonymous ()

> GDI
Вспомнил, вдруг, Command & Conquer: Tiberian Sun
Недавно ставил, ностальгировал. Больше десяти лет прошло с момента выхода. 1999 год, если мне не изменяет память.

IT-specialist ()

Молодцы!

Годная новость. Жаль я не программист. Дали бы средства отладки. У меня тоже есть Canon-комбайн, работает сейчас в режиме ксерокса :-((

linuxmaster ★★★★ ()
Ответ на: комментарий от Yampp

> Возникает вопрос: зачем?

Разумеется, не для понта. Существенно используются шаблоны и наследование классов, это все нужно для корректной обработки ошибок и для эффективного разделения слоев абстракции.

Для корректной обработки ошибок нужны шаблоны и наследования классов? Кхм. По-моему, у автора Си++ головного мозга :)

После переписывания на C++ драйвер стал БЫСТРЕЕ, так как оптимизатор смог инлайнить мелкие функции.

Для того, чтобы оптимизатор смог инлайнить мелкие функции, вовсе необязательно переписывать всё на Си++. Откройте для себя ключевое слово inline :)

anonymous ()
Ответ на: комментарий от GblGbl

> Т.е. тут всё как надо. Может, можно проверить работу драйвера без добавления принтера в cups?

Да, инструкция была где-то в начале темы. Надо создать raster-файл с помощью cupsfilter и скормить его на вход драйверу.

Yampp ()
Ответ на: Прекращаем холивор! от FFSinit

> Ругается что нет проги cupscat. ЧЯДНТ?

Какой дистрибутив? Посмотрите пожалуйста, где в нем лежат фильтры CUPS и что выдает утилита cups-config. make install не в ту директорию фильтр ставит, видимо - не у всех она $PREFIX/lib/cups/filter/

Yampp ()
Ответ на: комментарий от anonymous

> Для корректной обработки ошибок нужны шаблоны и наследования классов?

Для корректной работы обработки ошибок нужны автоматические деструкторы. Иначе будете в каждой строчке if(error) free(memory) писать. И допишетесь до утечки памяти в лучшем случае.

Для того, чтобы оптимизатор смог инлайнить мелкие функции, вовсе необязательно переписывать всё на Си++. Откройте для себя ключевое слово inline :)

Откройте стандарт на язык Си и посмотрите, что на самом деле делает слово inline и почему оно не дает такого эффекта в языке, в котором нет ссылочных типов данных.

Yampp ()
Ответ на: комментарий от Yampp

Во всех остальных случаях (и в энтерпрайзе в том числе) код написан по-хомячьи, смотреть страшно. Отсюда и нелюбовь анонимусов к C++: хомячий код они видели, а нормальный - никогда.

Хомячий код - это не когда смотреть страшно, а когда человек берется писать драйвер устройства и, вместо того чтобы осилить правильную расстановку inline, тупо переписывает все на С++.

anonymous ()
Ответ на: комментарий от Quasar

> На самом деле вопрос в том, зачем был язык создан

Не, ну на брейнфаке, наверное, можно не париться, тут ты прав. Но в любом практическом языке программирования есть туева хуча неписанных правил и соглашений, не зная которые невозможно писать хороший код.

LamerOk ★★★★★ ()
Ответ на: комментарий от DNA_Seq

> Очень ускорить отладку и частично реверсиженериринг (особенно всяких мелких параметров специфичных для каждой железки) может написание краткой инструкции...

Вы правы. Но на самом деле этот этап уже пройден. Дело в том, что в проприетарном драйвере есть замечательная утилитка cupsfilter, которая жмет данные для печати, но не печатает. Нехитрым скриптом я запустил ее в цикле и прогнал несколько тысяч тестов на примитивных картинках. В основе были вовсе не простые полоски, а белый шум - он практически не жмется, а значит, в выходном потоке гарантировано простое повторение входных данных с добавлением служебных битов. С помощью сжатия random() и !random() с последующим xor результатов было определено, что выходные данные есть битовый поток xor 0x43, после чего поток был расксорен и анализировался уже побитно. Сразу был найден префикс одного байта на сжатии, и далее в рандомном шуме я добавлял повторы одного байта, тем самым получая легко выделимую последовательность битов кода повтора. Тем самым алгоритм сжатия HiSCoA был разобран практически полностью - неизвестными остались только несколько редких записей, видимо, лемпель-зивовских, без которых вполне можно обойтись, если гонять алгоритм просто в RLE-режиме.

Когда мне удалось распечатать тигра на весь лист, работа перешла в другую стадию. Протокол как таковой был уже расхакан, и неизвестными остались лишь значения битов статуса принтера. От характера печатаемой информации они не зависят, только от числа страниц. С этим сложнее, потому что нет надежного способа воспроизведения этих битов: они могут зависеть от количества тонера, предыстории печати и т.д. Тогда я выкинул первую, еще сишную, бету на публику и стал ждать. Доволно быстро людям удалось найти значения нескольких битов и набрать нужную мне информацию. Я ее систематизировал - стал ясен смысл примерно половины всех флажков. И сейчас идет очередная итерация этого цикла - снова публичный пре-релиз и снова ждем, пока люди хоть что-то накопают.

Yampp ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.