LINUX.ORG.RU

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

 , , , ,


0

3

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

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

Изменения:

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

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

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

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

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

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

>>> Скачать



Проверено: anonymous_incognito ()
Последнее исправление: anonymous_incognito (всего исправлений: 2)
Ответ на: комментарий от cruxish

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>Ой, я хренею. Обвязка для кидания 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
()
Ответ на: комментарий от anonymous

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

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

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

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

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

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

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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.