Я пытаюсь заставить принтер Brother HL-2240, подключенный по USB, работать на Linux (Ubuntu Xenial с cups 2.1.3-4ubuntu0.3).
Я включил отладку на максимум, и журнал ошибок cups очень подробно сообщает мне, что все прошло успешно. Журнал страниц просто перечисляет задание как успешное.
Я вручную сгенерировал файл PCL, запустил его /usr/lib/cups/backend/usb
под управлением strace, и он сообщил, что все прошло успешно, без видимых ошибок в ioctl (много USBDEVFS_REAPURBNDELAY
=> EAGAIN
, но, похоже, это какая-то спин-блокировка).
Но ничего не печатается.
Принтер физически работает нормально. Я могу распечатать тестовую страницу, удерживая кнопку «go» на принтере.
Я пробовал это с usblp и без него. У меня нет android-udev (один источник посчитал, что это может быть важно). Я пробовал переустановить cups.
Это работало много лет назад. Думаю, я тогда был на Precise Pangolin. Да, это долгое время без печати, и в то время могли быть и другие важные вещи.
Я не уверен, что документы PCL, которые я генерирую, правильные. Есть ли способ их проверить? Или источник заведомо хороших документов для этого принтера?
Но, в общем, есть ли у кого-нибудь идеи, как это исправить?
(Я собирался опубликовать здесь вывод error_log и strace, но они слишком длинные. Я довольно тщательно их просмотрел, но если есть странные вещи, на которые стоит обратить внимание, пожалуйста, укажите их.)
Отредактируйте, чтобы добавить:
Я почти уверен, что он находит нужный принтер, судя по строкам в журнале:
D [28/Nov/2017:00:06:11 -0500] [Job 19] envp[23]="DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940"
Это тот же серийный номер, что и в dmesg
.
Кроме того, когда я напрямую вызываю /usb:
export DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940
/usr/lib/cups/backend/usb 25 dspeyer hello 1 "" < /etc/hosts
я получил
DEBUG: Loading USB quirks from "/usr/share/cups/usb".
DEBUG: Loaded 131 quirks.
DEBUG: Printing on printer with URI: usb://Brother/HL-2240%20series?serial=B3N746940
DEBUG: libusb_get_device_list=13
STATE: +connecting-to-device
STATE: -connecting-to-device
DEBUG2: Printer found with device ID: MFG:Brother;CMD:PJL,HBP;MDL:HL-2240 series;CLS:PRINTER;CID:Brother Laser Type1; Device URI: usb://Brother/HL-2240%20series?serial=B3N746940
DEBUG: Device protocol: 2
INFO: Sending data to printer.
DEBUG: Read 195 bytes of print data...
DEBUG: Wrote 195 bytes of print data...
DEBUG: Sent 195 bytes...
DEBUG: Waiting for read thread to exit...
(И то же самое, если я использую файл PCL вместо текстового файла, но длиннее.)
Если я использую любой другой DEVICE_URI, я получаю сообщения об ошибках.
А strace на команду usb содержит:
ioctl(10, USBDEVFS_GET_CAPABILITIES, 0xe4c198) = 0
write(2, "STATE: +connecting-to-device\n", 29STATE: +connecting-to-device
) = 29
ioctl(10, USBDEVFS_GETDRIVER, 0xbf941308) = -1 ENODATA (No data available)
timerfd_settime(9, TFD_TIMER_ABSTIME, {it_interval={0, 0}, it_value={3607344, 967184000}}, NULL) = 0
ioctl(10, USBDEVFS_SUBMITURB, 0xe65ea0) = 0
Что совершенно ясно указывает на то, что данные передаются через USB.
решение1
У меня была такая проблема с Brother HL-L2320D. Я делал несколько вещей неправильно. Этот пост помог:
Re: Рекомендации по выбору марки принтера | lists.debian.org
- Я был слишком умен и пытался установить принтер напрямую через веб-интерфейс CUPS, используя
.ppd
файл и фильтр CUPS. Фильтр CUPS на самом деле вызывает фильтр LPD, поэтому оба необходимы. В итоге я просто установил пакеты Debian, предоставленные Brother (hll2320dlpr-3.2.0-1.i386.deb
иhll2320dcupswrapper-3.2.0-1.i386.deb
). - Мне нужна была поддержка 32-битных двоичных файлов. Предложениездесьпакета Ubuntu
gcc-multilib
мне помогло.
Что касается того, что вызывает режим молчаливого сбоя, я думаю, что это различные части конвейера фильтра, которые выходят из строя без правильного сообщения об ошибке обратно в CUPS; принтер получает либо пустой файл, либо недействительный, и CUPS видит успех. Фильтры верхнего уровня — это скрипты Perl, которые вызывают другие скрипты и двоичные файлы ссистемафункция или обратные кавычки, без проверки кодов выхода.
решение2
Развивая ответ Шиварама Лингамнени...
Установка драйверов с сайта Brother сработала. Насколько я могу судить по журналам, если вы отправляете данные по проводам на принтер Brother в чем-то, кроме идеального PCL, принтер просто ничего не сделает. Очень раздражает.
решение3
Просто для пояснения ответа @Shivaram Lingamneni выше: поскольку драйверы Linux для принтеров Brother являются i386, для их работы требуются 32-битные библиотеки. В случае CentOS достаточно установить glibc.i686
.