Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса

в 2:56, , рубрики: cups, sane, печать, принтеры

TL;DR: из-за отсутствия «умных» принт-серверов на рынке сделал собственное устройство, позволяющее печатать и сканировать на старых USB-принтерах через Wi-Fi и Ethernet, с любого смартфона и компьютера под любой ОС, без установки драйверов (AirPrint/Mopria). Девайс включает не только распространённые открытые драйверы, но и проприетарные, в режиме эмуляции x86-кода, plug&play.
Особенностью проекта является со-финансирование открытого ПО: разработчики сервера печати CUPS и сканирования SANE/AirSane получают по $2 с каждого проданного устройства, а оставшиеся деньги формируются в пул, для улучшения существующих открытых драйверов и написания новых.

Обложка https://t.me/detibezglaz / https://linktr.ee/whorma

Ох уж эти бумаги! Печатать мне приходится редко, в основном различные документы вроде билетов, виз, пропусков, которые требуются предъявлять обязательно в бумажном виде. Долгое время обходился салонами печати рядом с домом, но это не всегда удобно: иногда документ нужен срочно, иногда посреди ночи.

Поэтому надумал я купить принтер, хоть какой-то, чтобы печатать свои 20 листов в год. Выбирать решил из Б/У моделей монохромных лазерных принтеров. Почему Б/У?

  • Пик развития лазерников пришелся на 2001-2009 годы, именно в этот период выпускали множество надёжных моделей для домашнего рынка, которые проектировались с большим запасом прочности, и до сих пор легко и дёшево ремонтируются;

  • Производители ещё не ограничивали заправку и сторонние комплектующие: либо в принтере нет никаких проверок на оригинальность картриджа и количество тонера, либо они тривиально обходятся (зачастую способом из сервисного мануала) — простота обслуживания;

  • Принтеры медленно устаревают. Возьмите приличную домашнюю модель 15-летней давности и любую современную, отличие будет только в скорости печати в минуту и дизайне корпуса;

  • Дёшево! Хорошие Б/У модели стоят в 2-3 раза дешевле нового принтера начального ценового сегмента, переплачивать с моими объёмами печати бессмысленно.

Среди множества ранее популярных и заведомо хороших моделей была обнаружена неприлично дешевая: Canon LBP-1120.
Это самый базовый принтер от Canon модельного ряда 2002-2004 годов, единственной фишкой которого можно отметить два направления выхода бумаги, переключаемые тумблером. Средняя цена — от 500 до 1500 рублей, подключение по USB. Я купил свой за 1000₽.
Вот этот пузатый джентльмен:

Canon LBP-1120. В объявлениях часто отсутствуют направляющие для бумаги.

Canon LBP-1120. В объявлениях часто отсутствуют направляющие для бумаги.

Почему его отдают так дёшево? Причина проста — невозможность использования в современных версиях Windows из-за 32-битных драйверов. Принтеры просто отказываются умирать даже спустя 20+ лет эксплуатации, поэтому производитель решил затруднить их использование программно.
Кто-то городит виртуальные машины исключительно для печати, кто-то пытается установить Linux-версию драйвера под x86 на Raspberry Pi, безуспешно.

На сайте производителя доступен драйвер 2017 года под Linux. У него дрянная архитектура, требующая нестандартной ручной настройки, но с ним принтер печатает и в современных версиях 64-битных ОС — мне большего и не нужно!

 

А как печатать с телефона?

Так как в принтере отсутствуют сетевые функции, напрямую подключить к смартфону его можно только по USB. Проводная печать поддерживается и в iOS, и в Android, но каждый раз физически перетыкать принтер банально неудобно. Хочется такой же простоты использования, какую дают современные аппараты.

Для превращения принтера в сетевой существуют специальные устройства, совмещающие USB-вход и Ethernet-порт, а иногда и Wi-Fi — принт-серверы.
Вот несколько предложений с Амазона:

Принт-серверы на Amazon

Принт-серверы на Amazon

Недёшево. Наверное, у них много функций, много драйверов внутри, что оправдывает стоимость?

Современным устройствам не входить!

Современным устройствам не входить!

Как бы ни так! Эти устройства — простые конвертеры USB-порта принтера в поток данных по TCP, прямиком из начала двухтысячных, и ничем не отличаются от подключения принтера к роутеру, если вам приходилось пользоваться этим.
Драйвер принтера всё ещё обязателен, а сканеры вовсе не поддерживаются.

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

Ни одна из программ не поддерживает мой LBP-1120, что неудивительно: производитель не сделал драйвер под ARM, энтузиасты не написали свою реализацию. Кроме того, в списках поддержки большинства принт-серверов прямо заявляют, что мой принтер работать не будет.
Этот вариант нам не подходит.

 

Почему актуальным принтерам не нужен драйвер?

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

Процессор 68000 с частотой 12 МГц в Apple LaserWriter был на 50% мощнее существующих компьютеров Mac, а 1,5 МБ памяти, необходимой для загрузки шрифтов PostScript и печати страницы с полным разрешением 300 точек на дюйм — в три раза больше, чем у топового Мака.
https://lowendmac.com/1985/apple-laserwriter/

В течение длительного времени каждый производитель выбирал решение для массового потребителя где-то посередине: делал собственный стандарт коммуникации и кодирования данных, в особенности для бюджетных моделей, чтобы принтер можно было снабдить простым процессором и крохотным количеством памяти, победив конкурентов ценой, а всю сложную обработку переложить на «большого брата», который с каждым годом становился производительней.
Модели с поддержкой PostScript и другими полноценными форматами описания страниц считались премиальной опцией, присутствующей в основном в офисных и профессиональных моделях, при этом собственный язык также в них присутствует — с ним печать идёт быстрее.

There's not an App for that

There's not an App for that

Так продолжалось 25 лет: в 2010-м люди начали покупать только что вышедший iPad как замену компьютеру, и внезапно узнавали, что он не поддерживает печать.
Просить производителей адаптировать весь зоопарк драйверов под новое устройство — бесперспективное и не прибыльное занятие. В ответ Apple решили разработать свой стандарт, совместив уже существующий на тот момент Internet Printing Protocol и собственную систему обнаружения устройств в локальной сети Bonjour, под названием AirPrint.

Такой подход позволил iPad'у и iPhone'у избавиться от драйверов: устройства просто отправляют PDF-файл или JPEG-картинку на принтер, полагаясь на обработку средствами печатающей машины, а в случае сложного и большого документа, планшет подгонит его под размер бумаги и преобразует в сжатый и поддерживающий стриминг Apple Raster — принтеру не требуется держать многомегабайтный файл в оперативной памяти целиком.
Производители принтеров были рады продать свежие модели появившимся потребителям в уже на тот момент стагнирующем сегменте.

Несколькими годами позже подтянулись до степени смешения похожие по своим характеристикам и принципу работы стандарты Mopria (Android 4.4+, Windows 10+) и IPP Everywhere (Linux).
Их объединяет:

  • Автообнаружение с использованием mDNS + DNS-SD
    Принтер не нужно устанавливать по IP-адресу вручную, он сообщает о себе и своих характеристиках всем участникам локальной сети

  • Универсальный протокол печати
    Internet Printing Protocol (IPP), основанный на HTTP, изначально рассчитанный на работу по сети, в отличие от USB-подключения

  • Универсальный язык общения с принтером
    Бездрайверная печать, не требующая установки программ

  • Унифицированные форматы данных
    PDF, PWG Raster, Apple Raster, JPEG, PCLm

  • Кросс-платформенная поддержка
    iOS, Android, macOS, Linux, Windows
    Если принтер сертифицирован для AirPrint, в 99% случаев он поддерживает и Mopria, и IPP Everywhere, и наоборот

 

А что там с DIY?

Возможность программного превращения "legacy"-принтера в AirPrint-совместимый стала доступна пользователям Mac практически сразу. Специальное стороннее ПО, подменяющее системные файлы из пред-релизной версии OS X, позволяло пользователям iPad и iPhone (и даже Android!) печатать на любых принтерах, подключённых к макбукам в локальной сети, уже в ноябре 2010г.

Годом позже похожие программы появились и для компьютеров с Windows. Однако сама ОС не поддерживала бездрайверную печать вплоть до конца 2018 года: в Windows 10 1809 добавили поддержку конкурирующего стандарта Mopria, охватывающего и печать, и сканирование — всё как у AirPrint. Отличие в незначительных деталях, прямую печать PDF-файлов поддерживают оба.

В Linux AirPrint/Mopria заработали в сервере печати CUPS 2.2.2, однако наиболее знаковое событие произошло в версии 2.4 (октябрь 2021), вместе с добавлением возможности расшарить любой принтер по бездрайверным стандартам одной галочкой в веб-интерфейсе. Теперь любой может подключить одноплатный компьютер (вроде Raspberry Pi) к принтеру, и сделать его не только сетевым, но и пригодным к использованию на любом современном устройстве без дополнительных настроек, чего по непонятной причине не позволяют коммерческие принт-серверы.

Сетевое сканирование реализуется проектом AirSane, работающим по похожим с печатью принципам и стандартам (AirScan/Mopria/eSCL). Демон использует сервер сканирования SANE и его драйверы. Бездрайверное сканирование работает везде, кроме iOS: Apple реализовали только печать на смартфонах и планшетах, и программ с поддержкой AirScan я не нашел. Однако, благодаря наличию простого веб-интерфейса в AirSane, это не проблема.

Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса - 6

C ПО разобрались, остался драйвер. Для Canon LBP-1120 не существует работающего открытого драйвера, а пакет от производителя собран только под архитектуру x86. Чтобы запустить его на одноплатнике с ARM, необходим эмулятор.
Очевидный вариант в виде наиболее известного qemu разочаровал производительностью: несмотря на наличие JIT, едва ли можно напечатать четыре страницы в минуту.

Позже была найдена молодая разработка box86, проектирующаяся с возможностью использования библиотек нативной архитектуры, вместо эмуляции всего кода. Эмулятор разрабатывается прежде всего для запуска x86-игр в окружении Steam userspace, поэтому обёртки для библиотек не всегда поспевают за новыми версиями ОС. Доходит до абсурда: GTA V на Android идёт в 30 fps, но C++ Hello World не запускается 😢

JIT-компилятор box86 работает примерно в 4 раза быстрее qemu'вского, и дополнительно поддерживает прямую трансляцию SSE2 → NEON. Пример скорости на двухстраничном документе (Cortex-A7 @ 1 GHz):

# QEMU
root@uowprint:~# time qemu-i386 /tmp/captfilter --PageSize=A4 --MediaType=PlainPaper --Resolution=600 < /tmp/input.pbm > /tmp/output.bin

real    0m32.670s
user    0m32.440s
sys     0m0.090s

# box86
root@uowprint:~# time box86 /tmp/captfilter --PageSize=A4 --MediaType=PlainPaper --Resolution=600 < /tmp/input.pbm > /tmp/output.bin

real    0m7.915s
user    0m7.830s
sys     0m0.030s

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

 

Кому-то это ещё нужно?

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

Печать — как раз из этих. Стандарты стандартизированы, софт работает и поддерживается командой на зарплате уже 20+ лет, драйверы в большинстве не развалились со временем, но продукт бесконечно далеко от среднестатистического обывателя с принтером на столе и смартфоном в руке.

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

Нашлись 93 потенциальных покупателя. Что ж, почему бы и нет.

 

Железный капут

Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса - 7

На просторах Алиэкспресса был найден вполне подходящий по характеристикам, разительно выделяющийся ценой одноплатник Orange Pi 3G-IoT-A.
Построенный на мобильном процессоре Mediatek времён тормозных китайских телефонов, а по сему некондиционный, он идеально вписывался в концепцию доступного умного принт-сервера.

О плате подробно писал @MDXE1337в статье Одноплатный компьютер с 3G «за косарь». Что Orange Pi предлагает по цене ящика пива?

Размер

51.5 мм × 69 мм

Вес

25 г

CPU

Mediatek MT6572M ARMv7 Cortex-A7 Dual Core, 1 ГГц

RAM

256 MiB DDR2

Флеш-память

512 MiB NAND

USB

1×USB 2.0 Host для подключения принтера
1×USB 2.0 MicroUSB для питания 5V

Wi-Fi

802.11n 2.4 GHz

Аудио! Микрофон! Порты для дисплея и камеры!
И даже 3G-связь!

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

Ответ прост — в нём едва ли что-то работает. Как и большинство плат лучшего в мире производителя Shenzhen Xunlong, она была снята с программной поддержки сразу после выхода, но была обречена стать принт-сервером ещё до запуска конвейера: модели с индексом "A" не хватит 256 МиБ оперативной и 512 МиБ постоянной памяти для нормальной работы Android 4.4, а в Linux не работает добрая часть железа, включая самое главное — 3G-модем.

Проблемы возникли буквально со всем необходимым для осуществления проекта:

  • Загрузчиком, в который зачем-то вписали аргументы ядру прямо в коде, что мешало загрузке со встроенной NAND-памяти;

  • Ядром, настолько старым, что не удовлетворяет минимальным требованиям systemd в свежих дистрибутивах (3.4.67 от Mediatek);

  • Wi-Fi: регулярно перестаёт работать multicast, из-за чего ломается автообнаружение принтера. Приходится передёргивать режим модуля каждую минуту по cron'у (что не отразилось на работе и стабильности соединения);

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

В исправлении ошибок и адаптации ядра под современные ОС помогли исходники бюджетного смартфона Aquaris E4.5 Ubuntu Edition на операционной системе Ubuntu Touch, который BQ и Canonical выпустили в 2015 году для развивающихся рынков. Устройство продавалось и в России.

А что там с Wi-Fi Multicast?

Если ваш принтер постоянно подключен к сети (и вы это видите в веб-интерфейсе роутера), но его обнаружение в сети работает только ровно 1 час, 1 день или другое круглое время, попробуйте:

  1. Проверить маршрутизатор на наличие опции мультикаста и IGMP Snooping

  2. Сменить режим безопасности Wi-Fi на "WPA-PSK/WPA2-PSK Mixed"

  3. Отключить смену ключа GTK (группового ключа)

  4. Создать отдельную (но не изолированную) сеть только для принтера

Протоколы автоматического обнаружения (mDNS/DNS-SD) используют мультикаст, который работает не так тривиально через Wi-Fi по сравнению с проводной сетью.

Wi-Fi использует разные алгоритмы шифрования и разные ключи шифрования, в зависимости от вида пакета: индивидуальные ключи шифрования для каждого клиента для обычного юникаст-трафика (pairwise key) и отдельный общий ключ шифрования для группового (group key / GTK) броадкаст и мультикаст-трафика.

В некоторых условиях могут возникнуть проблемы с групповым трафиком. Драйверы Intel Wi-Fi в Windows неправильно обрабатывают мультикаст-трафик после отправления компьютера в сон, а точки доступа Ubiquiti известны неправильной обработкой GTK.

Что касается IGMP Snooping: некоторые точки доступа требуют, чтобы устройство присоединилось к multicast-адресу протокола mDNS для получения mDNS-запросов. Большинство точек доступа пересылают запросы mDNS независимо от того, присоединялся ли клиент к адресу, или нет, но некоторые этого не делают или обрабатывают multicast неправильно.

 

Варим ритейл

Чтобы обычный человек быстро разобрался с настройкой и мог без проблем пользоваться принт-сервером, устройство должно обладать свойствами бытового прибора, а не компьютера.
Приборы выключаются исключительно выдёргиванием вилки/кабеля, не ломаются сами по себе, не настраиваются редактированием конфигурационных файлов по SSH, и в идеале интуитивно понятны без инструкции.

Иными словами, ваша тёща должна разобраться с девайсом без вашей помощи.

Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса - 8

Принт-сервер из коробки поднимает свою Wi-Fi-сеть, данные к которой указаны на корпусе устройства. Сканирование QR-кода камерой ускоряет настройку на смартфонах и планшетах.

Подключение к существующей сети настраивается через веб-интефейс, причём для доступа не нужно судорожно искать IP-адрес устройства в списке DHCP-клиентов на роутере — он всегда доступен по адресу http://uowprint.local, спасибо mDNS.

Здесь также можно включить особые опции. В частности, драйвер для моего Canon настолько другой, что использует не стандартные интерфейсы взаимодействия (как все нормальные драйверы), а общается с принтером отдельным демоном, имеющим собственную конфигурацию — всё, вместе с поддержкой совсем древних LPT (Parallel)-принтеров и эмулируемых драйверов настраивается во вкладке «прочее».

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

Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса - 9

За основу взята ОС Debian 12 — она содержит большинство необходимого софта и драйверов, легко кастомизируется, а система сборки .deb-пакетов поддерживает кросс-компиляцию, что значительно ускоряет генерацию прошивки в сравнении с запуском всей ОС для целевой архитектуры на компьютере в эмуляторе.

Для сборки прошивки используется система подготовки и обработки образов физических устройств и виртуальных машин mkosi, от разработчиков systemd. Она похожа по сути на docker build и альтернативы, но также работает с файловыми системами, загрузчиками, UEFI и другими аттрибутами железных машин.
Преимущество mkosi в унификации: каждый этап запускается одной командой, работает на любом дистрибутиве, не требует установки нестандартных зависимостей.

  1. Построение образа-сборщика с помощью debootstrap под x86_64, внутри него:
    • Кросс-компиляция необходимых пакетов под ARM
    • Пересборка части ПО и драйверов с дополнительными патчами
    • Компиляция утилит для ФС ubi

  2. Сборка ядра Linux и загрузчика littlekernel под плату

  3. Построение образа под ARMv7, установка всех ранее собранных пакетов образом-сборщиком, применение дополнительных настроек

  4. Компоновка всех получившихся файлов в файловую систему UBIFS + образ UBI для неуправляемой флеш-памяти NAND

Проприетарные драйверы подогнаны для совместимости с эмулятором box86 и также собраны в deb-пакеты, что упрощает установку и контроль версий.

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

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

Безопасность соответствует основным положениям свежей спецификации Connectivity Standard Alliance IoT Device Security Specification 1.0 (PDF):

  • Межсетевой экран блокирует любые входящие соединения вне диапазонов локальной сети (IPv4 и IPv6);

  • Данные для подключения к Wi-Fi-сети и доступа к настройкам на каждом устройстве уникальны, а не общие у всех;

  • Отсутствие стандартных/вшитых паролей;

  • Контроль цепочки поставки (supply chain) компонентов: ПО, отсутствующее в репозиториях Debian, собирается из исходных кодов фиксированных версий или git-коммитов;

  • Генерация Software Bill of Materials (SBOM) — списка компонентов, попавших в релиз прошивки, для отслеживания уязвимостей в разных версиях ПО.

DependencyTrack показывает список уязвимостей в устаревшей версии прошивки

DependencyTrack показывает список уязвимостей в устаревшей версии прошивки

Однако не стоит питать иллюзий по поводу комплексной защищенности принт-сервера: актуальный userspace соседствует с неподдерживаемым ядром и Wi-Fi-стеком 10-летней давности, ввиду некондиционного состояния системы-на-чипе в целом и нашей платы в частности.
Из интернета вам вряд ли что-то прогрузят, но LPE — запросто.

И последнее, что раньше воспринималось как само-собой разумеющееся, но теперь требует отдельного упоминания — отсутствие говна.
Устройство не использует подписочную модель, не собирает телеметрию и аналитику, не обрабатывает персональные данные, не требует подключения к интернету (ни для начальной настройки, ни в процессе использования), не выходит в интернет (кроме как для синхронизации времени по NTP), не зависит от какого-либо внешнего сервера и облака, не передает данные на сервер, не требует учётной записи, не обновляется автоматически, не имеет незадекларированных возможностей, не применяет искусственные (маркетинговые) ограничения и запланированное устаревание, не разрабатывается с непрозрачной моделью монетизации, не является частью рекламной индустрии и соцопросов, не задействует рекомендательные алгоритмы и вовлечение, не ограничивает пользователя в модификации.
Это обычный, заурядный, скучный, предельно понятный digital native'ам и деду с бабой, с одним портом и одной кнопкой, полностью на русском языке как игры Фаргуса, бионеразлагаемый принт-сервер.

 

Ошибки, устранённые проектом

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

Подсистема печати на ОС от Microsoft очень привередлива: если что-то идёт не так, принтер устанавливается бесконечно долго без каких-либо сообщений, а в отдельных случаях установка проходит якобы успешно, но не как принтер, а как «устройство», на котором нельзя печатать. Без удаления из списка «устройств» (отдельная секция в панели управления) принтер нельзя найти заново через диалог установки.

Вызвано это было, в одном случае, небольшим несоответствием стандарту IPP: поле media-source-supported, описывающее лоток подачи бумаги, должно начинаться с буквы, а оно начиналось с цифры.
Во втором случае принтер не добавлялся из-за отсутствия производителя и названия устройства в одном из служебных полей.

Баг-трекеры проектов

Баг-трекеры проектов

Windows и Android не позволяют указывать произвольные размеры бумаги, отсутствующие в спецификации IPP. От этого страдают принтеры этикеток и особенно чеков, где есть просто рулон ≈бесконечной длины, а приходится печатать в неудобном предустановленном формате. Вроде как будущие версии Windows 11, доступные по программе Insider Preview, уже поддерживают произвольные размеры, если их сообщает сам принтер, но у меня задействовать эту функцию не получилось.

Увы, сообщить о какой-либо проблеме в Microsoft невозможно — на форуме предлагают написать обращение с помощью встроенной программы Feedback Hub, которые никто не читает. Чего-то большего от компании, которая 4 месяца распространяла сломанную прошивку UEFI на собственный планшет Surface Go через Windows Update, ожидать не приходится — пользователи успевали обменять устройства по гарантии, только чтобы снова брикнуть их неотключаемым обновлением.

Клиент купил принт-сервер, а ничего не печатается? Разбираться придётся мне, а не дяде Васе корейцу из опенсорсного проекта💸

  • Пришлось дополнительно купить 3 принтера, для отладки и устранения багов

  • Проблема устранена ⇒ патч отправляется в CUPS/SANE upstream

  • Проблема не устранена ⇒ отправляется максимально детальное сообщение об ошибке, чтобы её мог устранить разработчик ПО

Повышенное внимание и правильная отладка улучшает открытое ПО, но обычный пользователь не в силах разобраться в причинах, а разработчик драйвера не во всех случаях сможет помочь, не имея принтера на руках. На стыке софта и железа на одном лишь энтузиазме далеко не уедешь.
Иногда, увы, обращаться попросту не к кому: люди умирают, оставляя проект (например, foo2zjs) без поддержки, а свежая кровь не интересуется принтерами.

 

Финансовые вливания

Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса - 12

Чтобы помочь потенциальным инициативным одиночкам в улучшении печати и сканирования, проект откладывает по $2 с каждого проданного принт-сервера, аккумулируя деньги в общий пул, который можно потратить на покупку железа или прямую оплату труда разработчика.

По $2 также получают CUPS, SANE и AirSane каждый, как основополагающие проекта, без которых он бы не состоялся.

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

 

Промежуточные итоги

  • Все некондиционные платы успешно освоены
    135 серверов ушли владельцам принтеров, вся оставшаяся у производителя партия Orange Pi'ев переиспользована, а не оказалась на свалке.

  • Открытые проекты получили пожертвования
    По ≈$320 каждый, чуть больше $2 с устройства благодаря пожертвованиям заинтересованных людей (без покупки устройств). Немного, но это только начало.

  • Мой устаревший Canon теперь печатает с любого компьютера и смартфона👍
    Я также написал рабочий прототип открытого драйвера CAPTv1, но на данный момент в устройстве используется проприетарный.

  • Пользователи довольны и просят еще😄
    Увы, найти подходящие по характеристикам и стоимости платы не так просто.

 

Бонус: Какой Б/У принтер купить для дома?

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

Если хотите купить новый (не Б/У) принтер, убедитесь, что он сертифицирован AirPrint или Mopria. Покупать принтер без поддержки одной из этих технологий в нашем году бессмысленно, каким бы хорошим он ни был. Они работают и по проводу, а не только по сети.

Список лучших Б/У принтеров и МФУ

На пятёрочку

Самые надежные модели, дешевые запчасти и ремонт, поддерживаются всеми текущими ОС (Windows 11/macOS Intel и ARM/Linux по состоянию на 2024 г.), хорошие драйверы.

  • HP 1010, 1015, 1018, 1020, 1022, P1005, P1006, P1505: очень компактные, складной лоток для бумаги, картриджи без чипов или блокировок. Односторонняя печать.

  • HP 1160, 1320, P2035, P2055: модель типа «кубик», со скрытым лотком для бумаги, чипом без блокировок. Двусторонняя печать поддерживается на моделях 1320, P2055d.

  • Canon LBP2900, LBP3000, LBP3010, LBP6000, LBP6020, LBP6030: картриджи без чипа/блокировок, односторонняя печать. 2900/3000 выпускается еще с 2005 года (но новые модели стоят недешево, около $200). Драйверы все еще работают, но, вероятно, не будут активно обновляться (Win 11 официально не поддерживается, чуть устаревший драйвер для MacOS).

  • Canon LBP6650, LBP6670: «кубики» с картриджами без чипа, двусторонняя печать.

На четвёрочку

Потенциальные проблемы с драйверами, но механически хорошие модели. Подразделение принтеров Samsung было куплено HP в 2017 году, обновлений драйверов не ждите.

  • Samsung ML1610/1640: чипованные картриджи, дешево заправить или взломать прошивку (1$)

  • Samsung ML1710/1750: серия постарше, но всё ещё норм

На троечку

Устаревшие модели.

  • Samsung ML1210: устаревшие драйверы

  • Canon LBP810, LBP1120: устаревшие драйверы, нет поддержки Windows 64-бит

  • HP P2015: отвалы BGA-чипов из-за плохого припоя. Драйверы в норме.

  • HP 1200, 1300: старые модели

МФУ

Просто список, без рангов.

  • HP M1005/M1120/M1132: картриджи без чипов.

  • HP 3390

  • HP 2727/1536/1522: Выходят из строя BGA-чипы из-за плохой пайки, проверяйте перед покупкой! 1536/2727 поддерживают двустороннюю печать, 2727 — кубик.

Подразделение принтеров Samsung было куплено HP в 2017 году, обновлений драйверов не ждите

  • Samsung SCX-3200, SCX-3400: чипованные картриджи, дешево взломать прошивку ($1)

  • Samsung SCX-4200 / Xerox WorkCentre 3119: картриджи с чипами, но можно прошить сам чип дёшево

  • Samsung SCX-4x21: устаревшая модель, бесчиповая.

  • Xerox WorkCentre 3210/3220: чипованные картриджи, дешево взломать прошивку ($1), «кубики». 3220 с двусторонней печатью.

 

Бонус 2: Нарушители лицензии GPL

Большинство импортозамещённых принтеров основаны на китайских механизмах печати (print engine) и используют драйверы с компонентами, лицензированными на условиях GNU General Public License (GPL). Эта лицензия обязывает распространять модификации с такими же условиями, что и оригинальная программа, иначе говоря, раскрывать исходный код.

И что же мы видим внутри?

Принтеры фирм Катюша (М240), Гравитон (ГП2201), Pantum (P2500) используют железо и ПО, изначально сделанное производителем принтеров Avision. В состав драйвера входит код библиотеки JBIG-KIT 2.0, поставляемый как под коммерческой платной лицензией, так и свободно под GPL.

Исполняемый файл драйвера в HEX-редакторе

Исполняемый файл драйвера в HEX-редакторе

Как видно из строк в исполняемом файле драйвера, в данном случае была использована GPL-версия кода.

Ответ автора JBIG-KIT

Ответ автора JBIG-KIT

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

Булат и Катюша симулировали бурную деятельность в ответ на обращение, безуспешно (хотя я допускаю, что они целиком работают через китайского подрядчика, и у них действительно нет исходных кодов). Pantum оставил обращение без ответа. 1, 2, 3, 4.

Схожая ситуация с принтерами Булат (P1024) и Digma (DHP-2401W). Драйвер основан на foomatic-rip 1.27.4, также распространяемого на условиях GPL v2. Ответ не получен. 1.

Умный принт-сервер: печать и скан без драйверов на старых принтерах + финансирование опенсорса - 15

 

Попытка №2: кому-то это ещё нужно?

А теперь, уважаемые пользователи Хабра, предлагаю поучаствовать в опросе о необходимости второй партии устройств, на куда более производительном и современном железе в виде Orange Pi Zero 3, по предварительной цене в 2650 рублей (≈$27).

Автор: ValdikSS

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js