LINUX.ORG.RU

Первая рабочая версия открытого драйвера для принтеров Canon LBP2900/3000/3200

 , ,


0

2

Товарищем Yampp был частично реализован алгоритм сжатия изображения, используемый в протоколе принтеров Canon LBP2900/3000/3200. Сегодня были получены первые полностью отпечатанные страницы. Есть надежда, что вскоре можно будет полноценно использовать эти принтеры в Linux.

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

Большая просьба ко всем владельцам аналогичных принтеров, проверьте пожалуйста работоспособность этого драйвера на вашем оборудовании. Вероятный список «аналогичных» принтеров:

  • i-SENSYS LBP-2900
  • i-SENSYS LBP3000
  • Laser Shot LBP-1120
  • Laser Shot LBP-1210
  • Laser Shot LBP2900
  • LaserShot LBP3000
  • Laser Shot LBP3300
  • LBP-3200
  • LBP5000
  • LBP5100
  • LBP5300

Страница на SourceForge


SVN-репозиторий

>>> Тред на ЛОРе с обсуждением разработки

★★★★

Проверено: post-factum ()
Последнее исправление: Dendy (всего исправлений: 8)

Круто! Действительно позитивная новость!
У меня такого железа нет, но новость очень позитивная!

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

> Ты бы хоть тэги создавал, а то мало ли, вдруг кто боится принтер испортить из-за бага, который ты поправишь в следующей ревизии :)

Принтер этим не испортить. Если что, он виснет. Неработающее не коммичу.

Yampp
()

Респект Yammp'у и желаю Canon поскорее сдохнуть.

Quasar ★★★★★
()

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

Зачем он нужен такой? Это же сырая альфа.

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

> Плотность тонера похоже тоже софтово задаётся.

А может одновременно и софтово, и командой. Можно captfilter погонять, посмотреть, что он на выходе выдает. Я протокол сжатия по нему и хакал.

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

> Зачем он нужен такой? Это же сырая альфа.

Специально для анонимуса напишу исключение из лицензии, запрещающее пользоваться. :)

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

Что касается статуса драйвера. Это не альфа. Это ПРЕ-АЛЬФА. Очень сырая. Мне требуется помощь сообщества, чтобы довести драйвер хотя бы до беты. В первую очередь интересует межстраничный арбитраж - буду очень признателен человеку, который его проанализирует и объяснит мне, а лучше - допишет сам. Другие модели принтеров тоже интересны. И еще хотелось бы пообщаться с человеком, который может проконсультировать по cups - годится ли бакэнд usb для этой задачи, или же надо делать драйвер бакэндом?

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

> LBP3010: Invalid argument

Очень интересно. На первой же команде - «инициализация и сброс принтера». Либо это не CAPT-принтер, либо что-то не так с /dev/usb/lp0.

Можете посмотреть USB-сниффером под виндой, как инициализировать его? Заранее спасибо.

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

И еще хотелось бы пообщаться с человеком, который может проконсультировать по cups

Как можно заметить, я уже прикрутил твой драйвер к CUPS, и он даже иногда печатает. Вот обновлённый ppd: http://ompldr.org/vNjRhbw/lbp3000.ppd

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

В foomatic-режиме в cups все понятно. Я хочу нативный режим сделать. Чтобы порт принтера само находило и все такое.

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

Artificial_Thought, у тебя какой принтер? 3000-й? Покажи пожалуйста, что он отвечает на A1A1 в начале. И по размеру картинки - если сделать битмэпку 4736x6968, она на весь лист будет?

Yampp
()
Ответ на: комментарий от Yampp
> a1 a1 04 00
< a1 a1 38 00 00 0b
< 30 2a 01 01 f0 ff 40 00 04 00 40 00 01 00 48 03 00 00 6f 08 00 00 e4 0d 00 00 00 00 00 00 fa 02 00 00 f6 04 00 00 28 3c 32 32 58 02 58 02 15 03 02 00

Там, насколько я помню, написано что-то типа CAPT LBP3000. И битмапка не на весь лист, низ срезается. причём на разную высоту.

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

Предлагаю перенести обсуждение разработки в жаббер-конфу capt@c.j.r

Artificial_Thought ★★★★
() автор топика

Yampp молодец.

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

/dev/usb/lp0 у меня нет, менял напрямую на /dev/bus/usb/xxx/xxx. Не из-за этого?

Вот логи SnoopyPro из винды (первое - инициализация, второе - инициализация и печать тестовой страницы).
https://sites.google.com/site/snizovtsev/lbp3010.usblog
https://sites.google.com/site/snizovtsev/lbp3010_printing_test_page.usblog

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

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

какие еще полутона на лазернике? юзай image dithering

exception13 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

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

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

> я-то узнал, но ты же эти слова отнес к себе)

А. Ну не программист я :) Т.е. скриптики на баше или пхп — это можно, например, а вот указатели на Си я не смог осилить вообще.

Igron ★★★★★
()

автору респект, я свой canon не завел и поменял на ашпи

sambo ★★
()

Если это чудо будет работать с MF3200 Series, то это просто счастье какое-то! Винда навсегда улетит с одного из рабочих компов :)

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

> Можно ли использовать foo2capt/capttest.ppd ?

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

Yampp
()

Не побоюсь этого слова - нужен! Разрабу почёт и уважение.

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

> /dev/usb/lp0 у меня нет, менял напрямую на /dev/bus/usb/xxx/xxx. Не из-за этого?

Из-за этого. Там другой протокол. Надо сделать modprobe usblp и/или настроить udev.

Спасибо за логи. Инициализация принтера действительно интересная. Первой командой идет не A1 A1, а A8 A0. Команда A1 A1 тоже есть, но не первая. В принципе, драйвер может и заработать - он отдает очень похожие команды, но в несколько ином сочетании.

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

Ответ A1 A1 на 3010:

a1 a1 40 00 00 0b

ba 09 01 00 f0 ff 40 00 04 00 52 00 01 03 48 03

00 00 6f 08 00 00 e4 0d 00 00 00 00 00 00 fa 02

00 00 f6 04 00 00 32 32 32 32 58 02 58 02 1e 03

04 00 56 10 00 00 00 00 00 00

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

Ну и пользуйтесь кривым, зато открытым драйвером.

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

Xenesz ★★★★
()
$cat example.pbm 
P1
# PBM example 
24 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$./rastertocapt < example.pbm 
DEBUG2: > a1 a1 04 00
DEBUG2: < a1 a1 38 00 00 0b
DEBUG2: > a8 a0 04 00
DEBUG2: < a8 a0 38 00 01 08
DEBUG: unexpected 0801 != 8a31
DEBUG2: > a2 a3 04 00
DEBUG2: < a2 a3 06 00 00 00
DEBUG2: > a0 a2 0c 00
DEBUG2: +p  8
DEBUG2: < a0 a2 08 00 00 00
DEBUG2: > a1 e1 7a 00
DEBUG2: +p  118
DEBUG2: < a1 e1 06 00 90 00
DEBUG2: > a3 e0 04 00
DEBUG2: < a3 e0 06 00 00 00
DEBUG2: > a2 e0 04 00
DEBUG2: < a2 e0 06 00 00 00
DEBUG2: > a4 e0 04 00
DEBUG2: < a4 e0 06 00 00 00
DEBUG2: > a5 e0 14 00
DEBUG2: +p  16
DEBUG2: < a5 e0 06 00 00 00
DEBUG: start printing page
DEBUG2: > a9 d0 44 00
DEBUG2: +p  64
DEBUG2: > a0 c0 3c 00
DEBUG2: +p  56
DEBUG2: > a4 c0 04 00
DEBUG2: > a0 e0 04 00
DEBUG2: < a0 e0 0c 00 00 09
DEBUG2: > a7 e0 06 00
DEBUG2: +p  2
DEBUG2: < a7 e0 06 00 00 00
DEBUG2: > a9 e0 06 00
DEBUG2: +p  2
DEBUG2: < a9 e0 06 00 00 00
DEBUG: done printing page
rastertocapt: Error reading magic number from Netpbm image stream.  Most often, this means your input file is empty.
auto1220
()
Ответ на: комментарий от Artificial_Thought

Да и текстовой читать должен. Для тестовой печати рекомендую:

zcat tiger-small.pnm.gz | ./rastertocapt

zcat tiger-large.pnm.gz | ./rastertocapt

Тигры в SVN.

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

«Error reading magic number» - известный баг (некорректная проверка на EOF). Печатать не мешает. Исправлять пока не хочу (все равно потом этот код будет полностью переделан).

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

> емнип механику (а может и не только) для xerax делает гнусмас. сам юзаю гнусмас ML-1645.

Про эти принтеры известно, что у них механика от HP. А вот электроника совершенно другая. Протокол не совпадает ни с одним из протоколом известных мне принтеров. (В более старых, например в LBP-810, протокол сжатия совпадал с Samsung).

какие еще полутона на лазернике? юзай image dithering

Фирма Canon утверждала, что у них есть какой-то аппаратный то ли dithering, то ли еще что-то, что «повышает эффективное разрешение». В бинарном протоколе, однако, ничего подобного пока не замечено - обычные 1 бит на пиксель, как у всех лазерников. В своем драйвере я принципиально не реализую никакой dithering - он просто отсылает на принтер пиксел к пикселу то, что получил на вход, а полутона пусть обрабатывает ghostscript или фильтр cups, это их работа.

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

Как раз у него больше всего шансов. У меня 2900. Доточить драйвер там относительно нетрудно, там работает все, кроме арбитража страниц и определения наличия бумаги. Еще, похоже, с 3000 все хорошо. С другими моделями хуже - там отличается начальный хэндшейкинг, и пока непонятно, в чем фишка.

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

Из-за этого. Там другой протокол. Надо сделать modprobe usblp и/или настроить udev.

Подгрузил usblp. Теперь пишет success, но ничего не печатается:

$ zcat tiger-large.pnm.gz | sudo ./rastertocapt
DEBUG2: > a1 a1 04 00
DEBUG2: < a1 a1 40 00 00 0b
DEBUG2: < ba 09 01 00 f0 ff 40 00
 04 00 52 00 01 03 48 03
 00 00 6f 08 00 00 e4 0d
 00 00 00 00 00 00 fa 02
 00 00 f6 04 00 00 32 32
 32 32 58 02 58 02 1e 03
 04 00 56 10 00 00 00 00
 00 00
DEBUG2: > a8 a0 04 00
DEBUG2: < a8 a0 58 00 31 8e
EMERG: capt_recv_reply failed: Success
Аварийный останов

snizovtsev ★★★★★
()

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

anonymous
()

Наконец-то! Ох, помню натр^Wнамучался я с LBP-2900:)

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

> годится ли бакэнд usb для этой задачи, или же надо делать драйвер бакэндом?

Бекендов usb существует два, выбор делается на этапе компиляции. Один (старый, в современных дистрибутивах не использующийся) работает через /dev/usb/lp0 или эквивалентное по семантике устройство в других UNIX-подобных системах, другой через libusb.

В драйвере на основе libusb есть комментарий:

TODO: Add back-channel support, along with better write error handling.

А в обычном:

*BSD's ulpt driver currently does not support the back-channel

Disable backchannel data when printing to Brother, Canon, or Minolta USB printers - apparently these printers will return the IEEE-1284 device ID over and over and over when they get a read request...

А тебе back-channel support, судя по комментариям в этом треде, нужен для того, чтобы дождаться, когда принтер закончит печатать текущую страницу.

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