LINUX.ORG.RU

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

 , , , ,


0

3

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

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

Изменения:

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

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

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

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

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

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

>>> Скачать

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

ага в этом все и было дело, я проглядел тут инструкции про capt://

сейчас начал печатать, но печатает полосы, хотя выбран файл для LBP2900 и принтер LBP2900

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

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

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

ZenitharChampion ★★★★★ ()

А как выбрать именно capt://? По крайней мере, веб-интерфейс cups такой не предлагал.

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

Уже не надо. Убунта померла вместе с жестким диском, известным «WD Caviar green»

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

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

Это нелюбовь к языку, а не к коду. Если нормальный код на языке - сакральное знание и неиспользование половины фич языка, то нафиг он тогда такой нужен. Отсюда и нелюбовь. А нормально писать можно на чём угодно.

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

> Если нормальный код на языке - сакральное знание и неиспользование половины фич языка, то нафиг он тогда такой нужен.

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

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

Если все нормально, то принтер должен быть виден дважды, как «просто LBP-xxx» и как «Canon CAPT (LBP-xxx)». Выбирать надо второе.

Если принтер показывается только один раз, надо убрать модуль usblp.

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

> Что же такого тормозного в new?

Аллокация на куче, в том числе и new, всегда тяжелая операция. Она связана с защитой многопоточности (даже если многопоточности нет) и иногда с системными вызовами. Фрагментация кучи - тоже ничего хорошего. Поэтому для короткоживущих вспомогательных переменных и классов лучше использовать выделение на стеке. Разумеется, это не повод бояться ЛЮБОГО new, но пользоваться им надо с умом, а не ставить в каждой строчке. То же самое относится и к virtual и к dynamic_cast.

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

PPD неправильный. Размер картинки в пикселях в логе не такой, как полагается. Точно у тебя МОЙ PPD?

ну да, тут почти чистая система 11.4 недавно поставил, принтер в ней ни разу не пробовал оживить еще

в списке доступных драйверов есть только Canon CAPT (LBP-xxx), модуль usblp выгружен

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

Как раз без него. С usblp принтер не определяется вовсе, а без него одна строчка: usb://Canon/LBP2900?serial=0000A3786AKC. Ещё пришлось cupscat после make install вручную копировать. Может, ещё чего-то не хватает?

GblGbl ★★★★★ ()

Поставил драйвер. Тестовую страницу купса не печатает, ссылаясь на «/usr/lib/cups/filter/bannertops failed», убунтовскую тестовую страницу печатает, страницу из случайно выбранной пдфки не печатает, вообще не реагирует. Пишет, что задание обрабатывается, но ничего не происходит.

Artificial_Thought ★★★★ ()

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

Gonzo ★★★★★ ()

Молодцы! Удачи вам. Долго мучался с утановкой ЛБП2900 в 14-й федоре. Кое-как завёл на каноновском драйвере версии 2.20. Сейчас, вроде, работает, но даже трогать его лишний раз страшно. Надеюсь, скоро с вашим драйвером всё будет намного проще.

dmitriym-75 ()

Где-то год назад потратил 6+ часов на установку драйвера на kubuntu 10.04 поставил и тот драйвер меня устраивал, печатал много страниц. Потом накрылся жесткий диск и сейчас сижу без драйвера и без желания этим заниматся, так как принтер несколько неисправен. Может, если кому не лень, посмотрит, как в катридже осуществляется убирание лишнего тонера, мне кажется там должна быть поролоновая(?) полоска. Если она там будет, то нельзя-ли назвать её толщину? сейчас принтер печатает грязно, оставляя блеклые «копии» ранее напечатанного ниже по странице. Возможно, проблема в другом, но ремонт этого БАРАХЛА (LBP2900) того не стоит.

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

на вантузе дрова на сетевой сканер (в составе МФУ) HP ставятся только фирменным инсталлятором, который для своей тяжелой работы требует .Net строго версии 3.5 sp1. всё это нужно, чтобы нарисовать поле для введения адреса устройства. ну и записи соотв. дремуче-проприетарных ключей с этой ценной инфой в реестр.

почувствуйте разницу.

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

> качественно написанных библиотек вроде gtkmm.

Хорошая шутка.

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

а примеры «нормального» можно? кроме gtkmm. открытые естественно, чтобы посмотреть можно было.

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

> а примеры «нормального» можно? кроме gtkmm. открытые естественно, чтобы посмотреть можно было.

Непросто. Я навскидку могу вспомнить только gtkmm и компанию - cairomm, pangomm и так далее. В принципе, все эти методы программирования описаны в литературе, даже в Страуструпе и Мейерсе, но почему-то упорно игнорируются большинством программистов. А суть простая: использовать классы и шаблоны не как «структуры с конструктором», а как группировщики однотипных функций и слоев абстракции, как некий продвинутый вид макросов с автоматикой и проверками. В результате машинный код получается как с Си, а программа становится более структурированной, гибкой и проверяемой (хотя и менее прозрачно написанной с точки зрения новичка, но вполне читаемой для опытного).

Самый простой прием для начала: использовать конструкторы и автоматические деструкторы для управления ресурсами (в исходниках драйвера см. class File в capt.cpp, class NonCopyable в util.h и libusbxx.*), а для передачи параметров использовать const-ссылки, чтобы избежать копирования переменных. Все остальное можно делать просто как на Си. Уже такие простые приемы способны творить чудеса.

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

> ну да, тут почти чистая система 11.4 недавно поставил

Тут вот какая штука. Очень важно, чтобы ширина картинки была не-помню-сколько пикселей (см. capt.drv), отличие хоть в один пиксель приводит к полосам. Это зависит исключительно от величины полей и размера бумаги в ppd, более удобного способа контроля нет. Я хотел сделать автокоррекцию, но потом решил не делать ради большей гибкости в подборе параметров под разные принтеры.

А что, правда размер картинки в пикселах зависит от версии cups, а не только от PPD? Если это так, это серьезная проблема, и надо придумывать способ ремонта.

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

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

> Поставил драйвер. Тестовую страницу купса не печатает...

Можно логи CUPS в дебаг-режиме? Похоже на грабли со стороны CUPS, не драйвера.

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

> в частности очень нужны МФУшки

А они CAPT-овские? Canon про них говорит, что они «CAPT/Hi-SCoA» или использует другие магические слова? Драйвер ИМЕЕТ ШАНС прямо сейчас заработать с некоторыми принтерами не из списка, если они используют тот же протокол, что и LBP-2900.

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

Yampp ()

>и не саботирует работу принтеров других

Как это соотносится с несоместимостью с usblp?

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

madcore ★★★★★ ()

Вот бы для OKI такое же

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

>Зарплата программиста 100т в месяц. В месяце 20 дней в дне 8 часов. Получается 625р в час.

во-первых, «не знаю как у вас в москве, а у нас, в России»(с)...

во-вторых, с таким подходом опенсорца бы не было вообще. А тем более дров, отревершенных несколькими «активистами», и если уж ими не поддерживаемых, то хотя бы имеющихся в виде более внятном, чем dll-ки.

Купить другую железку просто, да. Читай «во-первых».

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

> Драйвер на C++ - это мощно! :)

Это же не ядерный драйвер.

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

> Как это соотносится с несоместимостью с usblp?

А очень просто. CUPS умеет работать с принтерами двумя способами - через эмуляцию LPT usblp и напрямую через libusb. Как именно, ему совершенно фиолетово, поэтому практически все принтеры через CUPS работают и так и так. Главное - чтобы во время установки принтера был тот режим, при котором принтер будет эксплуатироваться в дальнейшем.

А вот мой драйвер CAPT из этих двух режимов поддерживает пока только один - через libusb. Поскольку режимы взаимоисключающие, то модуль usblp следует удалять, а CUPS настраивать на работу с другими принтерами тоже через libusb. Это не проблема. К тому же, в будущих версиях обязательно будет поддержана работа через usblp тоже, просто не все сразу. ИМХО, проблема печати многостраничных документов гораздо актуальнее, ведь далеко не всем нужен usblp, а много страниц печатают все.

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

> Для собрания всей информации в одном месте в прошлый анонс драйвера сделал wiki...

Спасибо! Не хотите заняться документированием драйвера на Sourceforge? Там сейчас wiki в препохабном состоянии.

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

А у меня и так уже все работает что надо, с моим драйвером. Хотите - ставьте себе в виртуалку винду, DOS, XENIX, можете еще рядом БК-0010 поставить и джойстик через него подключить, не возбраняется. Желающие ходить с костылями и так уже с ними ходят. Просто некоторые хотят наконец от костылей избавиться и начать бегать.

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

хех.. почему бы тогда просто не выкинуть принтер в помойку и не купить с нормальными дровами? Сейчас принтеры такого класса стоят копейки.

чем вас так напрягает создание ОС драйвера?

Sith ★★★★★ ()

Работа архинужная. А то, ежели попадается «Сапог», то хоть стой, хоть плачь.

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

Не нервничай, ты так.

Я выбираю поддерживаемое железо. Кому не нравятся костыли, те ноги не ломают.

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

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

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

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

Относительно МФУ с марками, начинающимися на MF-.

Судя по всему, протокол CAPT используют только принтеры, маркировки которых начинаются на LBP-. Никаких других принтеров этот драйвер поддерживать не будет, он не настолько универсален. Если кто-то хочет повозиться с МФУ MF-***, могу проконсультировать по реверс-инженирингу и т.п. Это достаточно просто, если подходить к делу с правильной стороны.

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

Ну, в таком разе спасибо! :)

На самом деле, за попытку, конечно, спасибо. Правда, по-настоящему эта штука будет цениться, когда: 1) будет поддерживаться разумный набор функций (уж многостраничная печать точно); 2) когда будет поддерживаться приличное количество моделей принтеров. Впрочем, это лишь расширит круг, а преданные ценители появятся, как только появится полноценная поддержка хотя бы одной (именно их) модели.

Еще вопрос: а ddiwrapper допилить не проще?

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

чем вас так напрягает создание ОС драйвера?

Почему напрягает? В этом топике мне стали интересны мотивации этого мероприятия, т.к. наиболее вероятные мотивы (jff и отсутствие альтернативы) сюда не подошли.

Если уже рассудить со стороны опенсорса, то производитель техники, кладущий кирпич на ОС, должен свалить во тьму. При условии существования других производителей, которые так не делают.

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

mashina ★★★★★ ()

Раз в год, когда появляется очередная новость о расширении списка поддерживаемых CUPS принтеров, анонимус расчехляет свой Brother M-1709 и пытается заставить его работать в linux. Увы, пока тщетно.

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

С "братанами" тоже проблема?

У меня братнан-мфу Brother MFC-8680DN, есть поддержка от производеля для ВСЕГО (принтер, сканер, вроде даже факс) причём всё по сети. Сейчас погляжу про ваш принтер на их сайте. Ещё раз, пришлось поставить драйвера скачанные руками с сайта производителя. Только потом CUPS их обнаружил.

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

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

Ничего найти не смог на их сайте. В целом обычно начинать рыть надо отсюда: http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/index.html Но, подозреваю, это серьёзная экзотика и вы там уже всё искали. Просто я даже типа принтера не знаю и инфы по нему на их сайте сходу не обнаруживается.

Удачи в этом нелёгком деле!

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

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

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