USB로 연결된 Brother HL-2240 프린터를 Linux(컵 2.1.3-4ubuntu0.3이 포함된 Ubuntu Xenial)에서 작동하도록 하려고 합니다.
디버깅을 최대로 설정했고 컵 오류 로그에 모든 것이 성공적이었다는 내용이 자세히 나와 있었습니다. 페이지 로그에는 작업이 성공한 것으로만 나열됩니다.
PCL 파일을 수동으로 생성하고 /usr/lib/cups/backend/usb
strace에서 실행했는데 ioctl에 명백한 오류 없이 성공했다고 표시되었습니다(많은 USBDEVFS_REAPURBNDELAY
=> EAGAIN
이었지만 일종의 스핀 잠금인 것 같았습니다).
그러나 아무것도 인쇄되지 않습니다.
프린터가 물리적으로 잘 작동합니다. 프린터의 "시작" 버튼을 길게 누르면 테스트 페이지를 인쇄할 수 있습니다.
나는 usblp를 사용하거나 사용하지 않고 이것을 시도했습니다. 저는 android-udev가 없습니다(한 소스에서는 이것이 관련이 있을 수 있다고 생각했습니다). 컵을 다시 설치해 보았습니다.
오래 전에 작동했습니다. 아마 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를 사용하면 오류 메시지가 나타납니다.
usb 명령의 strace에는 다음이 포함됩니다.
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를 사용할 때 이 문제가 발생했습니다. 내가 뭔가 잘못했어요. 이 문서는 다음 사항에 도움이 됩니다.
답변: 프린터 브랜드 권장사항|list.debian.org
.ppd
나는 너무 영리해서 파일과 CUPS 필터를 사용하여 CUPS 웹 인터페이스를 통해 직접 프린터를 설치하려고 했습니다. CUPS 필터는 실제로 LPD 필터를 호출하므로 둘 다 필요합니다. 결국 Brother(hll2320dlpr-3.2.0-1.i386.deb
및 ) 에서 제공한 Debian 패키지만 설치하게 되었습니다hll2320dcupswrapper-3.2.0-1.i386.deb
.- 32비트 바이너리에 대한 지원이 필요합니다. 제안여기우분투 패키지가
gcc-multilib
저에게 효과적입니다.
자동 실패 모드의 원인은 필터 파이프라인의 다양한 부분이 실패를 CUPS에 제대로 보고하지 않고 실패하기 때문이라고 생각합니다. 프린터는 비어 있거나 유효하지 않은 파일을 수신하고 CUPS는 이를 성공한 것으로 간주합니다. 최상위 필터는 다음을 사용하여 다른 스크립트와 바이너리를 호출하는 Perl 스크립트입니다.체계종료 코드를 확인하지 않고 함수 또는 백틱을 사용합니다.
답변2
Shivaram Lingamneni의 답변 확장 ...
Brother 웹사이트에서 드라이버를 성공적으로 설치했습니다. 로그에서 알 수 있는 한, 완벽한 PCL 이외의 다른 것을 사용하여 유선을 통해 Brother 프린터로 데이터를 전송하면 프린터는 아무 작업도 수행하지 않습니다. 매우 짜증나.
답변3
위의 @Shivaram Lingamneni의 답변을 명확히 하기 위해: Brother 프린터용 Linux 드라이버는 i386이므로 실행하려면 32비트 라이브러리가 필요합니다. CentOS라면 그냥 설치하세요 glibc.i686
.