渡辺一寛です。

スキャナ・プリンタ複合機の Canon PIXUS MP810 の動作報告です。

先に動作状況を書くと、プリンタは他機種用プリントフィルタを流用して動作
し、メモリカードスロットは認識状況からすると恐らく動作可能、スキャナは
対応ソフトウェアが開発中で現在動作せず、といったところです。なおテスト
は 6.2-RELEASE で行いました。

USB デバイス動作報告としては、これとは別に投稿します。

 1. プリンタ

次のように認識されます。

| ulpt0: Canon MP810, rev 2.00/1.04, addr 3, iclass 255/0
| ulpt0: using bi-directional mode

キヤノンからは MP810 に正式に対応したプリントフィルタがまだ提供されて
いませんが、PIXUS MP600 用のフィルタで動作しました。ただし厳密にはプリ
ンタヘッドのノズル数が異なるので、何らかの不具合が出る可能性はあるかも
しれません。

# PIXUS iP4200 用でも動くらしいです。

以下はその導入手順ですが、基本的には

 Canon PIXUS iP3100 を CUPS 経由で使う
 http://tabochan.f2g.net/pixus.html

と同じ (有用な情報に感謝します!) なので、なるべく簡潔に書きます。

 1.1. 準備

以下のソフトウェアを ports からインストールしておきます
(依存関係で他に色々インストールされますが省略)。

print/cups
japanese/ghostscript-gnu-jpnfont
emulators/linux_base-fc4
graphics/linux-jpeg
graphics/linux-png
graphics/linux-tiff
archivers/rpm2cpio

また CUPS 用フィルタのコンパイルのために、以下のソフトウェアも
ports からインストールしておきます。

devel/autotools
devel/gmake
shells/bash

そして /usr/ports/print/cups-base/pkg-message に従って設定し、
さらに /etc/rc.conf に以下の 2 行を追加しておきます。

linux_enable="YES"
cupsd_enable="YES"

 1.2. プリントフィルタのインストールと動作テスト

次に、

 キヤノン:サポート|ソフトウエアダウンロード
 http://cweb.canon.jp/drv-upd/bj/other.html#linux

にある「IJ Printer Driver Ver.2.70 for Linux」へのリンクを辿り、
以下のファイルをダウンロードします。

 * 「全機種共通で使用するファイル」から「ソースファイル」
 * 「PIXUS MP600 用ファイル」から「PIXUS MP600 用機種別パッケージ」と、
   「PIXUS MP600 用操作説明書 (HTML)」
 * 「FAQ」

上記「PIXUS MP600 用機種別パッケージ」を展開し、/compat/linux 以下に
コピーします。

$ mkdir mp600                           # 作業ディレクトリ。
$ cd mp600
$ rpm2cpio /PATH/TO/cnijfilter-mp600-2.70-1.i386.rpm | cpio -ivd
$ find ./usr -type d | xargs chmod 755  # 何故か 700 になっているので。
$ su
Password:
# cp -Ri ./usr /compat/linux/

ここでテスト印刷をします。印刷用の PostScript ファイルが必要ですが、
私は適当な日本語テキストファイルを ports/japanese/a2ps で PostScript
形式に変換して使用しました。

$ su                                    # /dev/ulpt0 の書き込み権限が必要。
Password:
# a2ps-j -nh -nt -ns -p nihongo.txt | \
gs -q -r600 -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ppmraw -sOutputFile=- - | \
/compat/linux/usr/local/bin/cifmp600 --imageres 600 --media plain > \
/dev/ulpt0

 1.3. CUPS 用フィルタのインストールとテスト

次は CUPS 用フィルタのコンパイルです。まず前述の「ソースファイル」を
展開し、以下のパッチを当てます。

http://homepage2.nifty.com/dumb_show/unix/cnijfilter-common-2.70-freebsd.diff

次に必要なものだけをコンパイルします。

$ mkdir common                          # 作業ディレクトリ。
$ cd common
$ rpm2cpio /PATH/TO/cnijfilter-common-2.70-1.src.rpm | cpio -ivd
$ tar zxvf cnijfilter-common-2.70-1.tar.gz
$ patch < /PATH/TO/cnijfilter-common-2.70-freebsd.diff
$ cd cnijfilter-common-2.70/libs
$ ./autogen.sh
$ gmake
$ cd ../pstocanonij
$ ./autogen.sh
$ gmake

必要なファイルだけをコピーします。

$ su
Password:
# cd common
# cd cnijfilter-common-2.70
# cp -i pstocanonij/filter/pstocanonij /usr/local/libexec/cups/filter/
# cp -i ppd/*.ppd /usr/local/share/cups/model/

ここで cupsd を再起動 (/usr/local/etc/rc.d/cupsd restart) した後、
プリンタを登録します。

$ su
Password:
# lpadmin -p PIXUSMP600 -m canonmp600.ppd -v usb:/dev/ulpt0 -E

続いて http://localhost:631/ に Web ブラウザでアクセスし、テストページ
の印刷が行えることを確認できれば成功です。

 2. メモリカードスロット

以下のように umass デバイスとして認識されており、恐らく動作するとは思
いますが、未確認です。

| umass0: Canon MP810, rev 2.00/1.04, addr 3

| da0 at umass-sim0 bus 0 target 0 lun 0
| da0: <Canon MP810Storage 0104> Removable Direct Access SCSI-2 device 
| da0: 1.000MB/s transfers
| da0: Attempt to query device size failed: NOT READY, Medium not present

 3. スキャナ

uscanner(4) のソースに MP810 の ID を追加します。

--- sys/dev/usb/usbdevs.releng62        Tue Nov 14 21:54:38 2006
+++ sys/dev/usb/usbdevs Wed Aug 29 16:32:01 2007
@@ -737,6 +737,7 @@
 product CANON N676U            0x220d  CanoScan N676U
 product CANON N1240U           0x220e  CanoScan N1240U
 product CANON LIDE25           0x2220  CanoScan LIDE 25
+product CANON MP810            0x171a  Canon PIXUS MP810
 product CANON S10              0x3041  PowerShot S10
 product CANON S100             0x3045  PowerShot S100
 product CANON S200             0x3065  PowerShot S200
--- sys/dev/usb/uscanner.c.releng62     Tue Nov 14 21:54:38 2006
+++ sys/dev/usb/uscanner.c      Thu Aug 30 17:52:47 2007
@@ -128,6 +128,7 @@
  {{ USB_VENDOR_CANON, USB_PRODUCT_CANON_D660U }, 0 },
  {{ USB_VENDOR_CANON, USB_PRODUCT_CANON_N1240U }, 0 },
  {{ USB_VENDOR_CANON, USB_PRODUCT_CANON_LIDE25 }, 0 },
+ {{ USB_VENDOR_CANON, USB_PRODUCT_CANON_MP810 }, 0 },
 
   /* Kye */
  {{ USB_VENDOR_KYE, USB_PRODUCT_KYE_VIVIDPRO }, 0 },

これによって uscanner デバイスとして認識することができます。

| uscanner0: Canon MP810, rev 2.00/1.04, addr 4

ただしこのようにすると、MP810 のプリンタとメモリカードスロットが認識さ
れなくなります。これは uscanner(4) の制限によるものだと思うのですが、
詳細はよくわかりません。同じ現象はエプソンの複合機でも起こるようです。

 usb/92462: [patch] Add support for Epson CX3500/3600/3650 scanners.
 http://www.freebsd.org/cgi/query-pr.cgi?pr=92462

そして SANE (ports/graphics/sane, http://www.sane-project.org/) の開発
版に、MP810 を含む Canon MP シリーズに対応するライブラリが含まれている
とのことなので試してみました。開発版は anonymous CVS またはデイリース
ナップショットのどちらかで入手できます。

# 私が試した時 (2007-08-31) は、SANE バックエンドの lexmark
# ライブラリがコンパイルできずに gmake が中断する状況でした。
# これは configure の引数 BACKENDS で lexmark ドライバ *以外* を
# 指定することで回避しました (configure.in 参照)。

しかし残念ながら、スキャナは認識されるものの動作しません。MP810 の液晶
パネルを眺めていると、いったん「読み取っています」と表示するのですが、
すぐに「操作を中止しています」と表示 (メカは動かない) して中断するとい
う状況です。上級機でスキャナ部分の仕様が似ている MP960 はまがりなりに
も動作しているようなので期待したのですが。

# 各種メッセージとソースをちょろっと読んだ限りでは、
# スキャナから全然データがきていないようです。

以下はその pixma ライブラリの開発を行っている方の Web ページです。開発
に必要なドキュメントが全然無く、USB トラフィックをスニファで横取りした
ものを解析しているそうです。

 Scanner utility and SANE backend for Canon PIXMA MP series
 http://home.arcor.de/wittawat/pixma/

---
Watanabe Kazuhiro 
([&#x30E1;&#x30FC;&#x30EB;&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x4FDD;&#x8B77;])

メールによる返信