CUPS сообщает об успешном завершении, но на USB-принтере Brother серии HL-2240 ничего не печатается

CUPS сообщает об успешном завершении, но на USB-принтере Brother серии HL-2240 ничего не печатается

Я пытаюсь заставить принтер 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

  1. Я был слишком умен и пытался установить принтер напрямую через веб-интерфейс CUPS, используя .ppdфайл и фильтр CUPS. Фильтр CUPS на самом деле вызывает фильтр LPD, поэтому оба необходимы. В итоге я просто установил пакеты Debian, предоставленные Brother ( hll2320dlpr-3.2.0-1.i386.debи hll2320dcupswrapper-3.2.0-1.i386.deb).
  2. Мне нужна была поддержка 32-битных двоичных файлов. Предложениездесьпакета Ubuntu gcc-multilibмне помогло.

Что касается того, что вызывает режим молчаливого сбоя, я думаю, что это различные части конвейера фильтра, которые выходят из строя без правильного сообщения об ошибке обратно в CUPS; принтер получает либо пустой файл, либо недействительный, и CUPS видит успех. Фильтры верхнего уровня — это скрипты Perl, которые вызывают другие скрипты и двоичные файлы ссистемафункция или обратные кавычки, без проверки кодов выхода.

решение2

Развивая ответ Шиварама Лингамнени...

Установка драйверов с сайта Brother сработала. Насколько я могу судить по журналам, если вы отправляете данные по проводам на принтер Brother в чем-то, кроме идеального PCL, принтер просто ничего не сделает. Очень раздражает.

решение3

Просто для пояснения ответа @Shivaram Lingamneni выше: поскольку драйверы Linux для принтеров Brother являются i386, для их работы требуются 32-битные библиотеки. В случае CentOS достаточно установить glibc.i686.

Связанный контент