古いものを設定しようとしています。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も顕著なエラーなしでインストールされました。
基本的に提供されている手順に従っています。印刷インストールを開く:
apt install lsb
- ダウンロードDebian用64ビットドライバ
dpkg -i openprinting-lm1100_1.0.2a-6lsb3.2_amd64.deb
- スタートメニュー>基本設定>印刷設定
- 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
この問題は、次の理由でハードウェアの不良によるものではないと確信しています。
- プリンタはPCIパラレルカードを介して正しく動作します。
- USB-パラレルアダプタは次のように動作します。Epsonスタイラスカラー480プリンタ。
質問
lm1100change
スクリプトを書いて作業する方法を知っていますかlm1100back
?- Lexmark 1100ドライバはUSBパラレルアダプタをサポートしていますか?
そうでない場合、回避策はありますか?前任者:シンボリックリンク? - USBパラレルアダプタを介してLexmark 1100プリンタをインストールする方法をご存知ですか?
システム仕様
- オペレーティングシステム:Debian 拡張 LXDE
- USB-パラレルプリンタアダプタ: BF-1284|手動
- 印刷機: 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"
フォローアップ
スクリプトlm1100change
とlm1100back
場所が/dev/lp0
notでハードコーディングされていることを考慮すると、/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に有効な改行構文です。生きて学ぶ...
上記のコマンドラインは、デフォルトですべてのgs
PDFまたはPS形式の印刷ジョブをppmraw
(たとえばGhostScript)を使用して形式に変換し、結果をバイナリファイルであるコマンド/opt/OpenPrinting-lm1100/bin/lm1100
にパイプします。プリンタに適した形式で印刷ジョブデータを出力し、/dev/usb/lp1
USB->パラレルコンバータを使用するのと同様に、CUPSを実際のプリンタデバイスに接続する必要があります。
には、という/opt/OpenPrinting-lm1100/bin/
名前の2つの単純なユーティリティスクリプトもあります。これらはハードコードされており、使用するために編集できる必要があります(またはUSB->パラレルアダプタは何でも)。文書は、カートリッジを交換するときにプリントヘッドを適切な位置に移動し、再び通常の駐車位置に移動する必要があることを示しています。lm1100change
lm1100back
/dev/lp0
/dev/usb/lp1
/opt/OpenPrinting-lm1100/doc/README.maintenance
lm1100change
lm1100back
デバイスが「不明」と表示されたり、「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で発生する問題を説明できます。