후속 조치

후속 조치

오래된 것을 설정하려고 해요Lexmark 1100 프린터통해USB-병렬 포트 어댑터.
데비안은 어댑터를 올바르게 인식하는 것 같습니다:

root@debian:~# dmesg | tail --lines=6
[  130.042983] usb 5-1: new full-speed USB device number 2 using ohci-pci
[  130.232289] usb 5-1: New USB device found, idVendor=1a86, idProduct=7584
[  130.232297] usb 5-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[  130.232301] usb 5-1: Product: USB2.0-Print
[  130.399415] usblp 5-1:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 1 proto 2 vid 0x1A86 pid 0x7584
[  130.399507] usbcore: registered new interface driver usblp

 

CUPS도 눈에 띄는 오류 없이 설치되었습니다.
기본적으로 제공된 단계를 따르고 있습니다.인쇄 설치 열기:

  1. apt install lsb
  2. 다운로드Debian용 64비트 드라이버
  3. dpkg -i openprinting-lm1100_1.0.2a-6lsb3.2_amd64.deb
  4. 시작 메뉴 > 기본 설정 > 인쇄 설정
  5. CUPS에 프린터 추가
    (때로는 장치가 "알 수 없음"으로 나열되고 때로는 "Lexmark 1000"으로 나열되지만 올바른 장치는 "Lexmark 1100"이어야 하며 연결은 항상 "USB"로 나열됨)

안타깝게도 이러한 설치 단계를 거친 후에는 프린터에서 전혀 인쇄가 되지 않습니다. 테스트 페이지를 인쇄하려고 하면 대부분의 경우 프린터가 정지된 것처럼 조용합니다. CUPS에서 얻는 유일한 정보는 "프린터 상태: 처리 중 - 프린터로 데이터 전송 중"입니다.

드라이버 패키지를 살펴보면 프린트 헤드를 서비스 및 파킹 위치로 이동하는 두 가지 간단한 스크립트( lm1100change및 )가 있습니다.lm1100back

    root@debian:~# cat /opt/OpenPrinting-lm1100/bin/lm1100change 
    #!/bin/sh
    dd if=/opt/OpenPrinting-lm1100/share/lexmarkchange of=/dev/lp0

    root@debian:~# cat /opt/OpenPrinting-lm1100/bin/lm1100back 
    #!/bin/sh
    dd if=/opt/OpenPrinting-lm1100/share/lexmarkback of=/dev/lp0

사용하도록 하드코딩되어 /dev/lp0있으며 USB-병렬 어댑터를 사용하려면 편집해야 할 수도 있습니다. 그러나 이와 같은 스크립트 /dev/lp0로 대체해도 여전히 작동하지 않습니다./dev/usb/lp0

이 문제는 다음과 같은 이유로 하드웨어 불량으로 인한 것이 아니라고 확신합니다.

 

질문

  • lm1100change스크립트를 작성 하고 작업하는 방법을 아시나요 lm1100back?
  • Lexmark 1100 드라이버는 USB-병렬 어댑터를 지원합니까?
    그렇지 않은 경우 해결 방법이 있습니까? 전임자:심볼릭 링크?
  • USB 병렬 어댑터를 통해 Lexmark 1100 프린터를 설치하는 방법을 아시나요?

 


시스템 사양

 

디버그

root@debian:~# lpstat -lp
Lexmark-Lexmark-1000-3  root              1024   Tue 19 Nov 2019 12:26:55 PM -03
    Status: Sending data to printer.
    Alerts: job-printing
    queued for Lexmark-Lexmark-1000

root@debian:~# lpstat -v
device for Lexmark-Lexmark-1000: usb://Lexmark/1000

root@debian:~# cat /var/log/daemon.log | tail
Nov 19 13:16:30 debian systemd[1]: Stopped target Printer.
Nov 19 13:16:36 debian systemd[1]: cups.socket: Socket service cups.service already active, refusing.
Nov 19 13:16:36 debian systemd[1]: Failed to listen on CUPS Scheduler.
Nov 19 13:16:36 debian systemd[1]: Dependency failed for Configure Plugged-In Printer.
Nov 19 13:16:36 debian systemd[1]: [email protected]: Job [email protected]/start failed with result 'dependency'.
Nov 19 13:16:36 debian systemd[1]: Reached target Printer.
Nov 19 13:17:15 debian dbus[357]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Nov 19 13:17:15 debian systemd[1]: Starting Hostname Service...
Nov 19 13:17:15 debian dbus[357]: [system] Successfully activated service 'org.freedesktop.hostname1'
Nov 19 13:17:15 debian systemd[1]: Started Hostname Service.

root@debian:~# systemctl cat [email protected]
# /lib/systemd/system/[email protected]
[Unit]
Description=Configure Plugged-In Printer
Requires=cups.socket
After=cups.socket

[Service]
ExecStart=/lib/udev/udev-configure-printer add "%i"

 


후속 조치

스크립트 lm1100changelm1100back위치가 /dev/lp0not 로 하드코딩 되어 있다는 점을 고려하면 /dev/usb/lp0먼저 실행 파일 도 not lm1100로 하드코딩될 것이라고 추측할 수 있습니다 ./dev/lp0/dev/usb/lp0

그러나 자세히 살펴보면소스 코드표시된 유일한 인용은 /dev/lp0주석과 추가 정보에 있습니다.

lx.c
 * Usage:
 *  Create the script 'lp':
 *      !/bin/sh
 *      gs -q -sDEVICE=pbmraw -r288 \
 *      -dNOPAUSE -dSAFER -dBATCH \
 *      -sOutputFile=- \
 *      $1 | lx > /dev/lp0
 *  then call:
 *      lp <file>.ps


README
    A way to print a postscript file would be to run:

    gs -q -sDEVICE=ppmraw \
          -r300 \
          -sPAPERSIZE=(Letter|A4|Legal) \
          -dNOPAUSE \
          -dSAFER \
          -sOutputFile=- \
          -  | lm1100 - > /dev/lp(0|1|2)

lx따라서 장치 경로는 관련이 없으며 소스 코드를 다시 컴파일할 필요가 없는 것 같습니다 . 전화만 하면 됩니다:

    gs -q -sDEVICE=pbmraw -r288 \
    -dNOPAUSE -dSAFER -dBATCH \
    -sOutputFile=- \
    $1 | lx > /dev/usb/lp0

USB 병렬 어댑터를 통해 인쇄하려면

 

최근에 한 개발자와 이야기를 나눴는데 그는 다음과 같이 설명했습니다.

"lx" 프로그램은 매우 간단합니다. 픽셀을 가져와 강력한 변환 없이 프린터로 보냅니다. 프로그램이 프린터가 수신하는 것과 동일한 이진 스트림을 보내면 작동해야 합니다. 그렇지 않기 때문에 시스템 어딘가(USB에서 병렬 드라이버로, USB 드라이버로) 및/또는 USB에서 병렬 장치로 바이너리 스트림이 변경되었음을 의미합니다. 그것이 어디 있는지 나는 모른다.

 

그리고:

문제는 해결하기 쉽지 않습니다. 낮은 수준의 디버깅이 필요합니다. 가장 먼저 확인해야 할 것은 프린터(/dev/lp0 등) 생성이며, 간단한 명령(헤드 이동)이 제대로 작동하는지...

 

마지막으로, 개발자들이 이 문제로 어려움을 겪고 있기 때문에 포기하고 부피가 큰 데스크탑 PCI 병렬 카드를 고수해야 할 것입니다.

답변1

openprinting-lm1100_1.0.2a-6lsb3.2_amd64.deb드라이버 패키지를 다운로드하고 수동으로 추출했습니다 .

mkdir /tmp/workdir
cd /tmp/workdir
wget https://www.openprinting.org/download/printdriver/debian/dists/lsb3.2/contrib/binary-amd64/openprinting-lm1100_1.0.2a-6lsb3.2_amd64.deb
ar x openprinting-lm1100_1.0.2a-6lsb3.2_amd64.deb
tar xvf data.tar.gz
[... results at /tmp/workdir/opt/OpenPrinting-lm1100...]

/opt/OpenPrinting-lm1100/여기에는 디렉토리에 설치될 여러 파일이 포함되어 있습니다 .

디렉터리의 PPD 파일은 /opt/OpenPrinting-lm1100/ppds/Lexmark/프린터 모델 이름을 제외하고 동일한 것으로 나타납니다. 따라서 드라이버는 Lexmark 1000, 1020 및 1100을 정확히 동일하게 처리합니다.

시리즈의 개별 프린터를 구별할 수 없는 경우 CUPS에서 수신한 식별 문자열은 실제 모델이 아닌 모델 시리즈만 식별할 수 있습니다. 이는 usb://Lexmark/1000현재 보고 있는 문자열을 설명할 수 있습니다.

PPD 파일에는 정확히 71자로 줄 바꿈되고 &&줄 바꿈을 나타내는 다양한 줄이 포함되어 있는 것으로 나타났습니다. 예를 들면 다음과 같습니다.

*FoomaticRIPCommandLine: "gs -q -sDEVICE=ppmraw -r300 %A -dBATCH -dNOP&&
AUSE -dPARANOIDSAFER %Z -sOutputFile=- - | /opt/OpenPrinting-lm1100/bin/lm1100 %B -"

분명히 이것은 PPD에 유효한 개행 구문입니다. 살고 배우다...

위에서 언급한 명령줄은 기본적으로 gs모든 PDF 또는 PS 형식 인쇄 작업을 ppmraw(예: GhostScript)을 사용하여 형식으로 변환한 다음 결과를 /opt/OpenPrinting-lm1100/bin/lm1100바이너리 파일인 명령으로 파이프합니다. 프린터에 적합한 형식으로 인쇄 작업 데이터를 출력해야 하며, /dev/usb/lp1USB->병렬 변환기를 사용하는 것과 유사하게 CUPS를 실제 프린터 장치에 연결해야 합니다.

에는 및 이라는 /opt/OpenPrinting-lm1100/bin/이름 의 두 가지 간단한 유틸리티 스크립트도 있습니다 . 이들은 하드코드되어 있으며 사용하기 위해 편집할 수 있어야 합니다 (또는 USB->병렬 어댑터가 무엇이든). 문서 에는 카트리지를 교체할 때 프린트 헤드를 적절한 위치로 이동해야 하며 다시 일반 주차 위치로 이동해야 한다고 명시되어 있습니다 .lm1100changelm1100back/dev/lp0/dev/usb/lp1/opt/OpenPrinting-lm1100/doc/README.maintenancelm1100changelm1100back

장치가 "알 수 없음"으로 표시되는 경우도 있고 "Lexmark 1000"으로 표시되는 경우도 있습니다. 이는 USB->병렬 어댑터가 IEEE-1284 병렬 포트 프린터 식별 문자열을 읽어 CUPS가 해당 문자열을 PPD 파일과 일치시키고 다음과 같이 찾을 수 있음을 나타냅니다. PPD를 자동으로 수정할 수 있습니다. 파일 Lexmark-1100-lm1100-en.ppd에는 다음 줄이 포함되어 있습니다.

*1284DeviceID: "DRV:Dlm1100,R1,M0,TF;"

다음을 통해 식별 문자열을 볼 수 있습니다 cat /sys/class/usbmisc/lp1/ieee1284_id. 문자열이 비어 있지 않으면 어댑터가 식별 문자열을 감지하고 프린터로부터 응답을 받은 것입니다.

당신의 로그 메시지

[email protected]: Job [email protected]/start failed with result 'dependency'.

systemd서비스가 생성되었지만 [email protected]종속성 오류로 인해 실패했음을 나타냅니다. 그러나 이것은 장치에 대한 CUPS 인쇄 대기열을 자동으로 생성하는 udev 기반 스크립트인 것 같습니다. 기본적으로 이미 수동으로 수행한 작업을 복제하므로 여기서는 중요하지 않은 것 같습니다... udev 기반 스크립트가 아닌 한 스크립트 스크립트는 /dev/usb/lp*어댑터 장치 생성을 어느 정도 방해합니다.

USB->병렬 어댑터에 해당하는 것도 있지만 이는 /dev/bus/usb/*/*다른 사용자 공간 USB 드라이버와 함께 사용하기 위한 일반 USB 인터페이스입니다. libusb이는 다른 API를 사용하며 기존 병렬 포트(예: Lexmark 드라이버)와 유사한 인터페이스가 필요한 응용 프로그램에는 유용하지 않습니다. 장치 노드가 누락되거나 일관되지 않게 생성된 경우 /dev/usb/lp*이는 CUPS에 발생하는 문제를 설명할 수 있습니다.

관련 정보