フォローアップ

フォローアップ

古いものを設定しようとしています。Lexmark 1100プリンタ経由USB-パラレルポートアダプタ
Debian はアダプタを正しく認識しているようです:

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へのプリンタの
    追加

残念ながら、これらのインストール手順を実行した後は、プリンタからまったく印刷されません。テストページを印刷しようとすると、ほとんどの場合プリンタが静止しているかのように静かです。 CUPSから得られる唯一の情報は、「プリンタの状態:処理中 - プリンタへのデータ転送中」です。

ドライバパッケージを見ると、プリントヘッドをサービスとパーキングの場所に移動する2つの簡単なスクリプト(および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まず実行可能ファイルもnotlm1100でハードコーディングされると推測できます。/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に有効な改行構文です。生きて学ぶ...

上記のコマンドラインは、デフォルトですべてのgsPDFまたはPS形式の印刷ジョブをppmraw(たとえばGhostScript)を使用して形式に変換し、結果をバイナリファイルであるコマンド/opt/OpenPrinting-lm1100/bin/lm1100にパイプします。プリンタに適した形式で印刷ジョブデータを出力し、/dev/usb/lp1USB->パラレルコンバータを使用するのと同様に、CUPSを実際のプリンタデバイスに接続する必要があります。

には、という/opt/OpenPrinting-lm1100/bin/名前の2つの単純なユーティリティスクリプトもあります。これらはハードコードされており、使用するために編集できる必要があります(または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で発生する問題を説明できます。

関連情報