09 September 2012

NEC MultiWriter PR-L5100をUbuntu Linuxで使う

以前の記事『レーザープリンター MultiWriter 5100購入』でUbuntuでの利用を試したが、ドライバが存在しないため諦めていた。

(VMWareでWindows 2000を走らせてしのいでいた)

たまたま、米国Xeroxのウエブページを見ていたところ、似たようなプリンタが見つかったので、試しにドライバを無理やりインストールしてみたら、成功。

互換性があると思われるプリンタ

Xerox Phaser 3040

Ubuntu 12.04 32bit版の場合

Ubuntu12.04にインストールしたドライバ(debパッケージ)

Phaser 3010 / 3040 Linux Package - DEB Package

ドライバのdebパッケージを dpkg -i xerox-phaser-3010-3040_1.0-28_i386.deb のようにインストールした後に、CUPSのWeb管理画面 http://localhost:631 にアクセスして、「管理」メニューの「プリンターの追加」からプリンタを追加するだけ。

その時に、ドライバとして強制的にXerox Phaser 3040を指定する

テストプリントした用紙は次のようになっている。

20120909-pr-l5100-print.jpg

Driver : XRP3040.PPD
Description : NEC MultiWriter 5100
Driver Version : NEC MultiWriter 5100
Make and Model : Xerox Phaser 3040 v1.0

つまり、このプリンタはXerox製で、NECやエプソンはOEMで販売してるだけということなのだろう。

海外では公開されているような情報を小出しにしたり、隠蔽したり、最近の日本のメーカーはダメやね。 グローバル市場で売れない理由は、多分そのあたりにあると思う。

Ubuntu 14.04 64bit版の場合

Xeroxは32bit版のドライバしか配布していないため、32bit版ドライバを次のように強制インストールしてみた。

$ sudo dpkg --force-all -i xerox-phaser-3010-3040_1.0-28_i386.deb

ドライバをインストール後、CUPSの管理画面でプリンタを追加し状況を観察すると、"Filter failed"というエラーが出て停止する。

dpkgインストール時に--force-allを付けない場合、次のような依存関係来ぶらりが無い旨を知らせていたので、それらのi386版ライブラリを強制インストールしないといけないのだろう。

$ sudo dpkg -i xerox-phaser-3010-3040_1.0-28_i386.deb 
Preparing to unpack xerox-phaser-3010-3040_1.0-28_i386.deb ...
Unpacking xerox-phaser-3010-3040 (1.0-28) ...
dpkg: 依存関係の問題により xerox-phaser-3010-3040 の設定ができません:
 xerox-phaser-3010-3040 は以下に依存 (depends) します: libc6 (>= 2.3.2).
 xerox-phaser-3010-3040 は以下に依存 (depends) します: libcups2 (>= 1.2.7) | libcupsys2 (> = 1.2.7) | libcupsys2-gnutls10 (>= 1.1.23-1).
 
dpkg: error processing package xerox-phaser-3010-3040 (--install):
 依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
 xerox-phaser-3010-3040

インターネット上を検索してみると、Ubuntu 10.04まで配布されていたia32-libsというパッケージをインストールすれば何とかなるようだが、あいにく、Ubuntu 12.04以降はパッケージが削除されてしまった。

参考にしたのは、ここ → "Filter failed" printer error - Xerox Phaser 3010 on Ubuntu/Kubuntu 12.10

リポジトリに過去のパッケージ配布サイトを登録して、強制インストールしてみる。まずは、リポジトリの登録

/etc/apt/sources.list.d/old-releases-ubuntu-com.list
deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse

その後、コマンドラインより次のようにしてインストール。インストールされるファイルは、なんと277MBytesと特大サイズ。

$ sudo apt-get update
$ sudo apt-get install ia32-libs

この処理で、プリンタはなんの問題もなく印刷できるようになった。ただ、古いライブラリ類を大量にインストールしたわけで、このパッケージが消された理由がわからない以上、システムが不安定になる可能性も...

Ubuntu 15.10 64bit版で再挑戦

無理やり過去バージョンのia32-libsを強制インストールするのではなく、エラーメッセージを一つずつ潰していく手法を取ってみる。

まずは、Xerox社Phaser 3010 / 3040用プリンタドライバのインストールから。

$ sudo dpkg -i xerox-phaser-3010-3040_1.0-28_i386.deb 
以前に未選択のパッケージ xerox-phaser-3010-3040:i386 を選択しています。
(データベースを読み込んでいます ... 現在 217273 個のファイルとディレクトリがインストールされています。)
xerox-phaser-3010-3040_1.0-28_i386.deb を展開する準備をしています ...
xerox-phaser-3010-3040:i386 (1.0-28) を展開しています...
dpkg: 依存関係の問題により xerox-phaser-3010-3040:i386 の設定ができません:
 xerox-phaser-3010-3040:i386 は以下に依存 (depends) します: libc6 (>= 2.3.2).
 xerox-phaser-3010-3040:i386 は以下に依存 (depends) します: libcups2 (>= 1.2.7) | libcupsys2 (>= 1.2.7) | libcupsys2-gnutls10 (>= 1.1.23-1).
 
dpkg: パッケージ xerox-phaser-3010-3040:i386 の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
 xerox-phaser-3010-3040:i386

足りないと表示されているi386用ライブラリをインストールする

$ sudo apt-get install libc6:i386
   ...
以下のパッケージが新たにインストールされます:
  gcc-5-base:i386 libc6:i386 libgcc1:i386
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
4,157 kB のアーカイブを取得する必要があります。
この操作後に追加で 9,844 kB のディスク容量が消費されます。
 ...
 
$ sudo apt-get install libcups2:i386
 ...
以下のパッケージが新たにインストールされます:
  libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386
  libcomerr2:i386 libcups2:i386 libdbus-1-3:i386 libffi6:i386 libgcrypt20:i386
  libgmp10:i386 libgnutls-deb0-28:i386 libgpg-error0:i386
  libgssapi-krb5-2:i386 libhogweed4:i386 libk5crypto3:i386 libkeyutils1:i386
  libkrb5-3:i386 libkrb5support0:i386 liblzma5:i386 libnettle6:i386
  libp11-kit0:i386 libsystemd0:i386 libtasn1-6:i386 zlib1g:i386
アップグレード: 0 個、新規インストール: 23 個、削除: 0 個、保留: 0 個。
2,977 kB のアーカイブを取得する必要があります。
この操作後に追加で 9,281 kB のディスク容量が消費されます。
 ...

その後、プリンタドライバを再インストールすると正常にインストールされる

$ sudo dpkg -i xerox-phaser-3010-3040_1.0-28_i386.deb 
以前に未選択のパッケージ xerox-phaser-3010-3040:i386 を選択しています。
(データベースを読み込んでいます ... 現在 217683 個のファイルとディレクトリがインストールされています。)
xerox-phaser-3010-3040_1.0-28_i386.deb を展開する準備をしています ...
xerox-phaser-3010-3040:i386 (1.0-28) を展開しています...
xerox-phaser-3010-3040:i386 (1.0-28) を設定しています ...
[ ok ] Restarting cups (via systemctl): cups.service.

CUPSのWeb管理画面 http://localhost:631 にアクセスして、「管理」メニューの「プリンターの追加」からプリンタを追加する。追加条件は次の通り

20160130-cups-multiwriter5100.jpg

CUPSでプリンタ追加後、テスト印刷するとエラーが出るので一つずつ潰していく。

/var/log/cups/error_log
D [30/Jan/2016:20:24:10 +0900] [Job 7] NEC_MultiWriter_5100: error while loading shared libraries: libcupsimage.so.2: cannot open shared object file: No such file or directory
 
 ...
 
E [30/Jan/2016:20:33:27 +0900] [Job 8] /usr/lib/xrhr3acl.so: cannot open shared object file: No such file or directory
E [30/Jan/2016:20:33:28 +0900] [Job 8] Unable to open raster stream - : Broken pipe
 
 ...
 
E [30/Jan/2016:20:40:50 +0900] [Job 9] libstdc++.so.6: cannot open shared object file: No such file or directory
E [30/Jan/2016:20:40:51 +0900] [Job 9] Unable to open raster stream - : Broken pipe

これらのエラーに対して、次のように対処。なお、xrhr3acl.soは同じディレクトリにあるxrhr1acl.soにシンボリックリンクを作ってやればそれで良いようだ。

$ sudo apt-get install libcupsimage2:i386
 
$ sudo ln -s /usr/lib/xrhr1acl.so /usr/lib/xrhr3acl.so
 
$ sudo apt-get install libstdc++6:i386

Ubuntu 22.04 で汎用ドライバ foo2hbpl2 を使う方法

前のセクションで解説した32bitドライバ、32bitライブラリを用いる方法では、64bit Linuxに32bitライブラリを無理やりインストールしてしまっている。

今回は、Ubuntuにデフォルトでインストール済みの汎用HBPL2ドライバ(foo2hbpl2)と、プリンターメーカーから供給されているPPDファイルを用いる。

Open Printing : Xerox Phaser 3040

XeroxからXerox Phaser 3040 Linux用ドライバをダウンロードする。rpm(32/64bit)とdeb(32bit)の2つがあるが、中身はどちらも同じ32bit版。

20220514-xerox-official-driver.jpg
Xerox公式Webで配布されているLinuxドライバ

ダウンロードしたパッケージを解凍し、中身を比較すると、実は同一の32bitドライバ。(説明には64bitと書いてあるのに、使えないな...)

debパッケージの中身
$ 7z e xerox-phaser-3010-3040_1.0-28_i386.deb  
$ 7z x data.tar
$ tree -sD --timefmt "%Y/%m/%d %H:%M:%S" ./usr/
usr/
├── [       4096 2011/10/07 14:31:11]  lib
│   ├── [       4096 2011/10/07 14:31:11]  cups
│   │   └── [       4096 2011/10/07 14:31:11]  filter
│   │       ├── [      92801 2011/10/07 14:31:11]  xrhr1ap
│   │       └── [      92801 2011/10/07 14:31:11]  xrhr2ap
│   └── [    1002411 2011/10/07 14:31:11]  xrhr1acl.so
└── [       4096 2011/10/07 14:31:11]  share
    ├── [       4096 2011/10/07 14:31:11]  cups
    │   └── [       4096 2011/10/07 14:31:11]  Xerox
    │       └── [       4096 2011/10/07 14:31:11]  dlut
    │           └── [     235900 2011/10/07 14:31:11]  xrhr1alut.dat
    ├── [       4096 2011/10/07 14:31:11]  doc
    │   └── [       4096 2011/10/07 14:31:12]  xerox-phaser-3010-3040
    │       ├── [        184 2011/10/07 14:30:49]  changelog.Debian.gz
    │       ├── [        177 2011/10/07 14:31:11]  changelog.gz
    │       └── [        147 2011/08/23 15:03:11]  copyright
    └── [       4096 2011/10/07 14:31:11]  ppd
        └── [       4096 2011/10/07 14:31:11]  Xerox
            ├── [       4010 2011/10/07 14:31:11]  Xerox-Phaser-3010.ppd.gz
            ├── [       3343 2011/10/07 14:31:11]  Xerox-Phaser-3010_fr.ppd.gz
            ├── [       4009 2011/10/07 14:31:11]  Xerox-Phaser-3040.ppd.gz
            └── [       3342 2011/10/07 14:31:11]  Xerox-Phaser-3040_fr.ppd.gz

11 directories, 11 files
rpmパッケージの中身
$ 7z e Xerox-Phaser-3010_3040-1.0-28.i586.rpm  
$ 7z x Xerox-Phaser-3010_3040-1.0-28.i586.cpio 
$ tree -sD --timefmt "%Y/%m/%d %H:%M:%S" ./usr/
usr-rpm/
├── [       4096 2022/05/13 23:17:45]  lib
│   ├── [       4096 2022/05/13 23:17:45]  cups
│   │   └── [       4096 2011/10/07 12:58:35]  filter
│   │       ├── [      92801 2011/10/07 12:58:35]  xrhr1ap
│   │       └── [      92801 2011/10/07 12:58:35]  xrhr2ap
│   └── [    1002411 2011/10/07 12:58:35]  xrhr1acl.so
└── [       4096 2022/05/13 23:17:45]  share
    └── [       4096 2022/05/13 23:17:45]  cups
        ├── [       4096 2011/10/07 12:58:35]  Xerox
        │   └── [       4096 2011/10/07 12:58:35]  dlut
        │       └── [     235900 2011/10/07 12:58:35]  xrhr1alut.dat
        └── [       4096 2022/05/13 23:17:45]  model
            └── [       4096 2011/10/07 12:58:35]  Xerox
                ├── [       3343 2011/10/07 12:58:35]  Xerox-Phaser-3010-fr.ppd.gz
                ├── [       4010 2011/10/07 12:58:35]  Xerox-Phaser-3010.ppd.gz
                ├── [       3342 2011/10/07 12:58:35]  Xerox-Phaser-3040-fr.ppd.gz
                └── [       4009 2011/10/07 12:58:35]  Xerox-Phaser-3040.ppd.gz

9 directories, 8 files

Ubuntu 22.04マシンにMultiWriter PR-L5100をUSB接続すると、自動的にプリンタが認識されインストールされる。

CUPSのWeb管理画面を確認すると、

NEC MultiWriter Foomatic/npdl (recommended)

というドライバで認識されている。

MultiWriter 5100のページ記述言語は、NECのPostScript言語NBPL (NEC Printer Description Language) ではなく、単なる画像転送 HBPL (Host Based Printer Language)である。廉価版プリンタなので、PostScriptが実装されていないのだ。

デフォルトの認識は、PostScript対応のNEC製レーザープリンタを期待していて、安物のMultiWriter 5100では使えない。

そこで、Ubuntuにデフォルトでインストール済みの汎用HBPL2ドライバ(foo2hbpl2)と、プリンターメーカーから供給されているPPDファイルを用いればよいのだ。

CUPSのWebインターフェースを開いて、Xeroxのドライバを解凍して得られたPPDファイルを指定すれば、自動的に汎用HBPL2ドライバと組み合わされて認識される。

20220514-cups-add-foo2hbpl.jpg

これで、次のようなドライバで認識されることになる

Xerox Phaser 3040 Foomatic/foo2hbpl2 (recommended) (en)