14-Jul-2024
[イマドキのLinuxは]

CUPSが標準なので、昔ながらのlpdを使いたいという場合はかなり苦労するようです。とりあえずDebianの場合、Enable CUPS-LPD on Server 16.04 LTSにあるように/lib/systemd/systemにcups-lpd.socketcups-lpd@.serviceを配置して、systemctl start cups-lpd.socket; systemctl enable cups-lpd.socketとすれば一応lpd互換のサーバは立ち上がります。ただし、これに加えてsystem-config-printerで

この二つにチェックを入れておく必要があります。

実際にプリンタへデータ送信するのもアレだなーということでcups-pdfによるPDF printerを用意し、これに対するデータ送信を行ったログをtcpdumpで取ってみました。スプールのディレクトリにはデータが来ているものの(拡張子は適当に付加しています)、流石にPDF化まではしてくれないようです。印刷出力データが保存される実身とスプーラ内のファイルのMD5は一致していましたので、スプーラまでは正しくデータが届いていると考えて良さそうです。

Line Printer Daemon Protocol (RFC1179)を見ながらログを追うと、こうでしょうか?(→はlpdへの送信、←はlpdからの受信を意味します)

  1. →(5byte) 02 50 44 46 0a
    (Receive a printer job, "PDF")
  2. ←(1byte) 00
  3. →(26byte) 02 38 31 20 63 66 41 30 30 32 5f 5f 5f 30 2e 75 61 61 2e 6f 72 67 2e 75 6b 0a
    (sub command:Receive control file, 81bytes, "cfA002___0.uaa.org.uk")
  4. ←(1byte) 00
  5. →(82byte) 48 5f 5f 5f 30 2e 75 61 61 2e 6f 72 67 2e 75 6b 0a 50 6e 6f 62 6f 64 79 0a 6c 64 66 41 30 30 32 5f 5f 5f 30 2e 75 61 61 2e 6f 72 67 2e 75 6b 0a 55 64 66 41 30 30 32 5f 5f 5f 30 2e 75 61 61 2e 6f 72 67 2e 75 6b 0a 4e 6e 65 74 70 72 69 6e 74 0a
    (Host name "___0.uaa.org.uk", User identification "nobody", Print file leaving control characters "dfA002___0.uaa.org.uk", Unlink data file "dfA002___0.uaa.org.uk", Name of source file "netprint")
  6. ←(1byte) 00
  7. →(29byte) 03 35 39 32 35 38 20 64 66 41 30 30 32 5f 5f 5f 30 2e 75 61 61 2e 6f 72 67 2e 75 6b 0a
    (sub command:Receive data file, 59258 bytes, "dfA002___0.uaa.org.uk")
  8. ←(1byte) 00
  9. →(1byte) 1b
    (1st byte of print data)
  10. →...
    (2nd byte〜last byte)
  11. ←(1byte) 00

control fileのサイズが81byteとなっているのに対して、付随するペイロードのサイズが82byteとなっている点がよく分からないのですが、LF(0x0a)まで読み飛ばすようにすれば良いのでしょうか。なんとなく、この辺まで分かればそれっぽい物が作れそうな気がしているのですが(気のせいかも?)、お仕事が忙しいので一旦ここで置いておきます。56.3kg(21:55)

07-Jul-2024
[超漢字で作成したものを]

TADviewを使ってPDF化していたのですが、なんかTADviewが使えなくなってしまったようなのでどうにかしないといけません。

簡単に試してみたところ、HP DeskJet 955C向けの印刷データを実身に書き出し、これをGhostPCLで処理するとPDF化できるようです。04-Sep-2010の路線図らしきものをWindows版のGhostPCLを用い、.\gpcl6win64.exe -dNOPAUSE -sDEVICE=pdfimage24 -sOutputFile="output.pdf" input.pclで変換してみました(-sOutputFileで指定するファイル名は""で括る必要があり、モノクロならpdfimage24の代わりにpdfimage8とすると良いでしょう)。プリンタへ送信するイメージ(画像)データをPDF化することになるので、文字列検索が効かないという問題がありますがこれについては諦めてください。

超漢字側の印刷品質を通常/高速/高密度と変えてみましたが、通常と高速の違いはあまりよく分かりません。なんとなくですが、高密度一択という気がします。また、印刷データの含まれる実身を仮想マシンから実マシンに移すのが結構面倒なので、lpdへ飛んできたデータをファイルに保存するようなツールが欲しくなります。どこかにありそうな気がしますけど…それともlpdの設定をいじってファイルに保存する方が早いでしょうか?(可能なのか??)57.2kg(05:25)