SSブログ

EPSON製スキャナGT-9000をlinuxで使えるようにする [プログラム]

いまさらGT-9000ですか、と言われそうですが、年2回の出番しかないので積極的に買い換える理由もないのです。しかしながら、スキャンから印刷までの工程が面倒で、なんとかしたかったのです。
 今まではスキャナ専用のWinマシンにGT-9000をSCSIで接続して使っていました。そのマシンが、いくらLANで接続しているとはいえ、

スキャン → ftpでLinuxマシンに転送 → Macへ再転送 → レタッチ → 印刷

では不便で仕方ありません。

 しかしながら、例によって、ここ(GT-9000をlinuxで使えるようにする)までの道のりは遠かったのでした。

1. SCSIで認識してるのに使えない

 スキャナ用のソフトの定番、SANEを導入しました。supported scannerにGT-9000(ES-1200C)とあります。確認されている接続方法はパラレルですが、SCSIは動作確認してないだけでは?と考えて、まずSANEをインストールしました。

# apt-get install sane sane-utils
で、スキャナを探させます。
# sane-find-scanner
それらしいスキャナが見つかりました。SCSIでも使えそうです。しかし、…
# scanimage -L -d epson2
ん!? スキャナがないと言われます。どうしてでしょう?
 ググってみたところ、どうも、
SCSIではスキャナを認識するものの、SANEはパラレルでしか動作しない
ということらしいです。なんでー?と思いましたがが、たぶんソースを書いている人が、パラレル用とSCSI用の2つのコードを書きたくなかったのでしょう。
 しかたありません、パラレルで接続しましょう。しかし、…

2. パラレルプリンタポートがない

 デスクトップで使っている廉価版のマシンには、パラレルプリンタポートがついていません。さすが廉価版マシンです。実はシリアルもPS/2ポートもありません。周辺はすべてUSB機器にしなさい、ということらしいです。
 しかたないので、パラレルポートがあるサーバ機に接続しました。しかし、…

3. パラレルポートだと認識しない

 SCSIでは、特に設定しなくて認識しましたから、今度も大丈夫かと思ったのですが、認識してくれませんでした。あれこれ試した挙句、パラレルを使うには、設定ファイルを修正する必要があることがわかりました。dmesgでparportのポート番号を調べますと0x378でした。ですので、
/etc/sane.d/epson.conf
/etc/sane.d/epson2.conf

pio 0x378
を生かすようにコメントを外しました。epson.confはどうやら使われていないようです(なお、すでにソースのメンテナンスもされていないようです)。
 さて、これで、スキャナを探させます。
# sane-find-scanner
それらしいスキャナが見つかりました。続いて
# scanimage -L
で、ちゃんとスキャナが見つかりました。しかし、…

4. カラーでスキャンできない

 スキャンのためのアプリケーションで、以下の2つを使ってみました。
xscanimage
xsane
デフォルトは白黒(Binary)になっていて、スキャンできました。とにかくやれやれです。で、グレイスケール(Gray)もOKでした。
じゃぁ、カラーでスキャンしてみます。あれ? エラーしましたよ。
とにかく、何のエラーが起こっているのか、コマンドラインのscanimageで実行してエラーメッセージを確認してみます。
# scanimage -d epson2 --mode Color
どうやら「使えないオプションdepthを指定した」と言っているようです。おいおい、冗談じゃないですよ。私はColorを指定しただけでdepthなんか指定していません。Colorの副作用かと思って、--depth 8, --depth 1, --depth 0とかやってみましたが、どれもだめでした。使えないじゃないですか、これ。
 どうしたもんでしょう? まぁ基本はソースを持ってきて調査ですね。
# apt-get source --compile sane
面倒だなぁと思っていたせいもあるのでしょう、どうもうまくいきません。そうこうしているときに、ふと、
epson2でなくてepsonの方でやったらどうなんだ?
と思いついて、試してみました。しかし、…

5. epsonにするには?

どうやってepson2でなくepsonに切り替えるのでしょう?、マニュアルも読んでいませんから分かりません(おぃ)。
こんなときは、
# grep epson /etc/sane.d/*
です。おお、/etc/sane.d/dll.confにそれらしいのがありました。
epsonがコメントアウトされていて、epson2が生きています。なるほど、だから、常にepson2だったのですね。
これを逆にしてみましょう。
# sane-find-scanner
それらしいスキャナがepsonで見つかりました。続いて
# scanimage -L
で、スキャナがepsonで見つかりました。
じゃ、試してみましょう。
# scanimage -d epson2 --mode Color > test.pnm
おお、動くじゃないですか。もちろん、xsaneもxscanimageもOKでした。しかし、…

6. 一般ユーザが使えない

今までの作業はすべてrootで行なってきました。一般ユーザが、スキャナのつながっているデバイスを直接操作することができないためです。
これを解決して一般ユーザが使えるようにするには、scanimage等を
  • 常にrootで使う
  • sudoに追加する
  • sビットを立てる
などがありますが、実はすべてrootでの実行になるため、セキュリティ上の問題があります。実は、その辺はsanedを使ってネットワーク化することで解決するようになっています。もともと、SANEがバックエンドとフロントエンドが分かれているのも、アクセス制限に都合がよいわけです。しかし、…

7. sanedを起動する(ネットワーク化)

なにはともあれ、デーモンsanedを起動しましょう。
/etc/default/sanedの
RUN=no

RUN=yes
に変えて、
# /etc/init.d/saned start
を実行します。エラーなく起動しました。しかし、…

8. クライアントから接続できない

で、別のマシンのフロントエンド(scanimageなど)からこのデーモンに接続するのはどうやるのでしょう?
$ scanimage -d デバイス
で、デバイスが「ホスト:デバイス」と書くのかと思ってやってみましたが、さっぱりさっぱりです。
あ、/etc/sane.d/saned.confを修正しなきゃいけません。sanedにアクセスできるマシンを制限しているのです。アクセスリストを登録する必要がありました。
192.168.0.0/24
127.0.0.0/8
を追加します。ネットワークとループバックを登録しました。そして、
# /etc/init.d/sane restart
を実行して、デーモンを起動しなおします。
しかしながら、他マシン上でのフロントエンドはまだ動きません。
うーむ。ここでsane-netのマニュアルを読み返しました。あ、そういうことですか。
クライアントマシン上のフロントエンドは、クライアントマシン上のバックエンドとしか通信できないようになっています。
クライアントマシン上のバックエンドが、サーバマシン上のバックエンド(saned経由)と通信するようになっているのです。
ということは、クライアント側にもSANEのバックエンドを入れて設定する必要があるというわけです。
クライアントマシン上にsaneをインストールして、スキャナとつながっているサーバマシン名を設定します。
/etc/sane.d/net.conf
ここに、サーバマシンのホスト名を追加します。
で、クライアントマシン上で
$ scanimage
を実行します。おお、動きました。ついでに、
$ scanimage -L
も。なんと、サーバのデバイスがみえます。なるほど、サーバ側のデバイスは、
net:ホスト名:デバイス
で指定するのですね…、 ん!? あ、そうか、epsonやepson2同様、netもデバイス名だと考えるべきなんですね。バカだねー、私は。
ともあれ、これで設定は終わりだと思いました。しかし、…

9. iptablesの調整

サーバマシンは、ゲートウェイも兼ねているため、iptablesが設定されています。そのため、sanedの通信のためにiptablesを調整しなければなりません。
# modprobe nf_conntrack_sane
# iptables -A INPUT -m helper --helper sane -j ACCEPT
# iptables -A INPUT -p tcp --dport 6566 -j ACCEPT

以上、「構想1年、作業3日」の内容でした。

共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。