LINUX.ORG.RU

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

 , , , ,


0

3

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

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

Изменения:

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

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

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

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

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

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

>>> Скачать

Зашибись! завтра на работе потестирую LBP-2900 в opensuse 11.4.

FFSinit ★★ ()

>Первая работоспособная (хотя и не очень)
достойная новость.

anonymous_sapiens ★★★★ ()

Благодарю, обязательно попробую.

Chubakur ★★ ()

Открытые драйверы - это извращение. Драйвер должен поставлять производитель железа.

duott ★★★★★ ()

полностью переписан код драйвера (с C на C++)

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

при печати более чем одной страницы может печататься только первая

Это критичный баг, он означает, что печатать можно только по 1 странице.

неправильные верхнее и нижние поля

В зависимости от того, насколько, это тоже, возможно, критичный баг, поскольку печать таблиц, примечаний, номеров страниц оказывается невозможна.

Разрабы, наверное, молодцы, но зачем они это делают, не ясно, если есть нормально работающие коммерческие дрова.

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

>если есть нормально работающие коммерческие дрова.

Нет таких.

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

Драйвер должен поставлять производитель железа.

Который поставит в лучшем случае одну кривую версию, а та перестанет работать через пол года. Спасибо 1% и stable api nonsense

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

если есть нормально работающие коммерческие дрова.

Нет таких.

Если нет, то другой вопрос, но в тексте новости указано, что таковые есть.

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

>открытый драйвер должен поставлять производитель железа

фикс во имя столлмана

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

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

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

Это критичный баг, он означает, что печатать можно только по 1 странице.

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

В зависимости от того, насколько, это тоже, возможно, критичный баг, поскольку печать таблиц, примечаний, номеров страниц оказывается невозможна.

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

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

Если бы они были нормальными и нормально поддерживаемыми, ничего писать не пришлось бы. К сожалению, коммерческие дрова работают далеко не на всех системах из-за банальной бинарной несовместимости с libc - тогда ccpd тупо падает в корку, и если это происходит, то шансов установить их на этой машине нету.

Yampp ()

Дрючить ленивых инженеров Кэнон черенками! Даже спеки стесняются показать.

darkshvein ☆☆ ()
Ответ на: комментарий от Vudod

не нашёл утверждения о существовании нормально работающих дров в тексте новости. к слову, где-то с год назад пытался завести лбп-2900 под дебианом, так мало того что не завелось, так ещё и отъедало почти весь процессор

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

зачем они это делают, не ясно, если есть нормально работающие коммерческие дрова.

И давно? В прошлом году их не было, не уж то уже написали? Ссылочку можно?

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

> Уже драйверы на плюсах...

Плюсы плюсам рознь. Посмотрите на код - там нету ни new, ни dynamic_cast, ни прочих плюсовых тормозных фич. C++ использован лишь как автоматизация обработки ошибок и для улучшения инлайн-оптимизации. Посмотрите код, в общем, прежде чем критиковать. Сразу говорю - хомячки на C++ так писать не могут.

Yampp ()

Зачем это развивать? Есть же HP, дают почти открытые драйвера для своих изделий. Принтеры canon закопать на свалке истории.

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

> Дрючить ленивых инженеров Кэнон черенками! Даже спеки стесняются показать.

А я знаю почему. Потому что стыдно им. Принтеры LBP - единственые в мире, которые не умеют печатать просто поток. Им надо непрерывно в обе стороны с компом общаться, настолько тупой контроллер там стоит. Поэтому мне и не удалось использовать стандартный бакэнд usb://, пришлось делать capt://. Даже разработчикам CUPS не пришло в голову, что бывают НАСТОЛЬКО тупые принтеры!

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

> Принтеры canon закопать на свалке истории.

Так вообще-то НОВЫХ моделей драйвер не поддерживает ;) Он для СТАРЫХ моделей, для тех, кто уже купил сдуру и потратил деньги.

Несмотря на наличие этого драйвера, НЕ покупайте GDI-принтеры Canon! Никакие!

Yampp ()

Года два назад пользовался каким-то драйвером для своего LBP-800, вроде печатал. Или сегодня «релиз»?

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

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

К сожалению, чтобы помочь реально, нужно иметь такой принтер и уметь программировать на C++, коли на нём написано. У меня принтера нет и C++ я не знаю (то, что я знаю, знанием назвать нельзя).

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

>в тексте новости указано, что таковые есть.

Из текста новости можно получить информацию, что коммерческие драйвера тяжеловесные, требуют запуска демона при старте системы и саботируют работу принтеров других производителей. Это определённо нельзя назвать «нормально работающими драйверами». Вы новость не читали?

Wizard_ ★★★★★ ()

Вопрос: какова дальнейшая судьба этого драйвера? Он будет дальше развиваться или разработчики добились чего хотели и всё?

PS: есть пара LBP-810, но в С++ ковыряться лень. Могу тестировать.

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

Драйвер развиваться БУДЕТ, но поддержка принтеров, отличных от 2900, будет осуществляться силами сообщества, а не моими. Я не могу отлаживать драйвер, не имея принтера...

К сожалению, у меня нет LBP-810, а его протокол сильно отличается от 2900 (это не SCoA, а Hi-SCoA). В принципе, минимальная (тормознутая) поддержка SCoA в драйвере есть, надо всего лишь создать ppd с флагом сжатия 1 вместо 2. Но что в итоге получится - не знаю. Так что готовьтесь отлаживать и пробовать...

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

> и C++ я не знаю (то, что я знаю, знанием назвать нельзя).

Достаточно знания на уровне «могу читать и кое-как поправить код» - нормальные исправления я сделаю сам, мне только покажите, что в алгоритме не так.

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

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

> Года два назад пользовался каким-то драйвером для своего LBP-800, вроде печатал. Или сегодня «релиз»?

Это другого семейства принтер. С первой версией протокола. А я написал для второй версии. Хотя первую тоже поддержать планирую, ибо драйвер первой версии заброшен автором.

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

> У меня как раз LBP-810, будет время - поковыряю драйвер.

Спасибо! Пишите, как только начнете. Помогу.

Yampp ()

автору почёт и уважение! делает важное и нужное дело.

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

Достаточно знания на уровне «могу читать и кое-как поправить код»

А где-нибудь есть более-менее систематизированное описание протокола, того, как всё это работает, чтобы было от чего отталкиваться?

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

Был ещё с 2004 г. драйвер от Nicolas Boichat

Он заброшен. И тоже, мягко говоря, не полный.

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

> А где-нибудь есть более-менее систематизированное описание протокола, того, как всё это работает, чтобы было от чего отталкиваться?

Есть в текстовиках в исходниках драйвера. И есть wiki-страница а sourceforge. Плюс есть вот такая тема: http://www.linux.org.ru/forum/linux-hardware/4868236

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

Ужасная железка с ужасными драйверами для Linux, к сожалению

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

Ну да, ЕМНИП, у него тоже были проблемы с распечаткой многостраничных документов. Хотя как паллиатив годился, тем более, когда он вышел, бинарного драйвера вообще ещё не было.

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

Я закоммитил в svn исходник ppd для LBP-810. Не факт, что он работает...

Yampp ()

Разработчиков наградить. Canon - закопать.

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

duott> драйверы - это извращение. Производитель железа должен делать стандартные единые интерфейсы для доступа к своему железу.

fixed

Quasar ★★★★★ ()

Могу помочь

LBP-1120, для него этот драйвер сможет подойти? У меня есть и принтер и знание С++.

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

Есть в текстовиках в исходниках драйвера.

Да, уже нашёл.

И есть wiki-страница а sourceforge.

Если имеется в виду это, то там, считай что, ничего нет.

Плюс есть вот такая тема:

Да, помню. Спасибо, будем поглядеть. Давно уже бесит полурабочий принтер...

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

ты случаем в какой-нибудь багтрекер анонимно тыщщи критических багов не постишь? запомни, критический баг должен приводить к крэшам, потере данных и не иметь воркэраунда, а то задолбали - чуть что мешает сразу критический баг.

про нормально работающие дрова и прочее - кто-нибудь другой расскажет

vostrik ★★★☆ ()

Отличная новость, спасибо за работу в этом направлении! На работе есть 2900, возможно в понедельник проверю на нём.

PS - быть может сработает и такой вариант помощи в поддержке разных моделей: владельцы одной модели скидываются деньгами и отправляют их автору, чтобы тот приобрёл определённую модель принтера, и отладил драйвер на ней. Эти принтера и новыми стоили недорого, а б/у вообще копейки должны стоить!

jekader ★★★★ ()
Ответ на: Могу помочь от SKEW

> LBP-1120, для него этот драйвер сможет подойти? У меня есть и принтер и знание С++.

Да!! Спасибо!! Это принтер первого (SCoA) протокола. В SVN закоммичен исходник PPD для него. Надо будет нормально сделать сжатие (scoa.cpp), а то там затычка (алгоритм описан), но и с затычкой работать должно вроде. И там арбитраж отличается.

Yampp ()

респект тебе, чувак!

// Canon закопать да поглубже

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

> PS - быть может сработает и такой вариант помощи в поддержке разных моделей

У автора времени нет вообще... А деньги как раз есть. Поэтому помощь деньгами - не вариант.

P.S. Автор - профессиональный программист и программированием зарабатывает. Поэтому писать что-то еще кроме работы, извините, ну совсем не тянет...

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

PS: помочь, увы, не смогу: нет ни такого принтера, ни знания плюсов.

// да-да, счастливый обладатель Samsung :)

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