Я хочу получить доступ к своему принтеру DCP 195C (Brother) по локальной сети. Для этого я купил Raspberry Pi и установил на него CUPS. CUPS работает нормально, а все остальное работает гладко. Моя проблема в том, что я не могу установить драйверы, которые поставляет брат (они предназначены только для x86 и x64), на мой pi. Есть ли вариант, который я пропустил, чтобы установить драйвер на мой пи?
2 ответа
Коротко: вы должны извлечь файл ppd из драйвера linux
долго:
ПЕРВЫЙ
- Перейти на сайт драйвера Brothers и найти DCP195: http://support.brother.com
- Загрузите версию deb для Linux « Драйвер принтера CUPSwrapper (пакет deb) »
- Откройте файл deb с помощью инструмента сжатия и следуйте по пути до «dcp195ccupswrapper-1.1.3-1.i386/opt/brother/Printers/dcp195c/cupswrapper»
- Извлеките файл "brother_dcp195c_printer_en.ppd"
ВТОРОЙ
- Откройте веб-интерфейс cups через
https://192.168.1.2:631/admin
[замените ip на pi] - Нажмите "Добавить принтер". Выберите «Brother DCP-195C (Brother DCP-195C)» и нажмите "Продолжить".
- Отредактируйте следующую информацию, если необходимо, отметьте "поделиться принтером" и нажмите "продолжить"
- В разделе "Или предоставить файл PPD" найдите извлеченный файл «brother_dcp195c_printer_en.ppd» и загрузите его. Выполните следующие действия ... готово
После этого принтер был доступен, но с ошибкой:"Файл"/usr/lib/cups/filter/brlpdwrapperdcp195c "недоступен". Поскольку я установил драйвер на свой ноутбук Ubuntu, я мог просто скопировать файл с моего ноутбука в /usr/lib/cups/filter/ to pi
После этого мой ноутбук мог найти принтер
Вы можете заставить драйвер i386 работать на Raspberry Pi с помощью эмуляции, даже если у него другой набор команд. Это очень медленно и занимает несколько минут, пока распечатка не прибудет, но это работает.
Я нашел подсказку в этом сообщении на форуме:https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=15526&start=25#p708038.
Шаг 1. Установите драйвер, следуя инструкциям в документации Brother.
У вас должен быть каталог, такой как /opt/brother/Printers/dcp195c/lpd
с двоичным фильтром brdcp195cfilter
. Этот двоичный файл вызывается сценарием оболочки filterdcp195c
рядом с ним в том же каталоге.
Я считаю, что сейчас они предлагают установочный скрипт, но я сделал это без. Где-то есть инструкции, что нужно предварительно установить.
Шаг 2: Получите эмуляцию i386
Это следует за шагами в https://wiki.debian.org/QemuUserEmulation
В конце шага 2 вы сможете запустить двоичные файлы i386, как обычные двоичные файлы. В ps ax
они покажут
Установить Qemu
Установите пакеты qemu
, binfmt-support
и qemu-user-static
.
Запустите update-binfmts --display
чтобы увидеть, какие двоичные форматы поддерживаются.
Они должны быть автоматически включены в Raspbian и Debian.
Установите библиотеки поддержки x86
На Raspbian добавьте такую строку в ваш /etc/apt/sources.list
:
## Debian i386
deb [arch=i386] http://http.debian.net/debian stable main contrib non-free
Подойдет и другой репозиторий Debian.
В репозитории Raspbian нет бинарных файлов x86, поэтому добавьте строку [arch=armhf]
в существующие строки, начиная с deb
. Строки, начинающиеся с deb-src
можно оставить как есть.
Скажите Raspbian, что вы хотите многоархивную систему с пакетами i386, и получите libc i386. Чтобы шаг update
заработал, вам нужно импортировать и доверять ключам Debian GPG для управления пакетами.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386
На этом этапе вы сможете выполнить двоичный файл brdcp195cfilter
который поставляется вместе с драйвером:
$ ./brdcp195cfilter
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
Error: invalid option !!
Если вы видите этот вывод, это сработало. Error: invalid option !!
строка brdcp195cfilter
жалобой на то, что вы должны были передать аргументы.
Необязательно: Удалите сообщение об ошибке ld.so
Raspbian использует /etc/ld.so.preload
для предварительной загрузки библиотеки libarmmem
во все процессы. Библиотека заменяет некоторые дорогие подпрограммы памяти более быстрыми подпрограммами, написанными на сборке ARM, но для запуска Raspbian это не обязательно.
Безопасно игнорировать предупреждение, но также безопасно удалить или закомментировать эту строку из /etc/ld.so.preload
. Предупреждение будет отображаться в журналах ошибок CUPS, если оно не отключено.
Шаг 3: Получите это, работая с CUPS
Вы должны установить CUPS, следуя инструкциям на веб-сайте Brother.
Flaky USB-соединение
На моем Raspberry журнал dmesg
быстро чередовался между этими строками:
[58981.586842] usblp0: removed
[59222.794260] usblp 1-1.3:1.0: usblp0: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0222
Для меня это исправило переход на localhost:631
(веб-интерфейс CUPS) и изменил принтер в разделе "Принтеры", чтобы он использовал USB-устройство, распознаваемое CUPS, а не usb://dev/usb/lp0
устройство.
Пусть принтер получает данные с нормальной скоростью
brdcp195cfilter
- это шаг в процессе печати, который получает огромное входное растровое изображение и преобразует его во что-то, что впоследствии передается на устройство принтера. Я измерил размер входного файла ~ 90 МБ для простого сообщения "Hello world" в верхней части страницы.
Эмуляция на Raspberry не достаточно быстрая, чтобы не отставать от загрузки данных принтером. Печать работает, но я слышал нездоровые шумы от моторов принтера, работающих во время ожидания данных.
Чтобы это исправить, установите утилиту sponge
из пакета moreutils
и отредактируйте filterdcp195c
так, чтобы вывод $BRCONV $BRCONV_OP
(он же brdcp195cfilter
) передавался через sponge
. Там должно быть три строки в случаях "PostScript", "PDF" и "*" в конце файла, заканчивающиеся на ... | $BRCONV $BRCONV_OP | sponge
Для этого нужно сожрать весь вывод из продолжительного процесса преобразования и отправить его на принтер сразу после завершения преобразования. Таким образом, до начала печати требуется больше времени, но принтер получает данные в обычном темпе.
(sponge
хранит данные, которые она буферизует во временном каталоге, поэтому вы не ограничены оперативной памятью Raspberry Pi)