FreeBSD では、画像スキャナに対するアクセスは SANE (Scanner Access Now Easy) API によって実現されており、 FreeBSD Ports Collection でも提供されています。 SANE はスキャナのハードウェアにアクセスするために FreeBSD デバイスドライバを使用します。
FreeBSD は SCSI 接続および USB 接続のスキャナのどちらにも対応しています。 設定を始める前に、 SANE がスキャナに対応しているか確認してください。 SANE には スキャナについての情報とその状況がまとめられている 対応デバイスの一覧 があります。また、FreeBSD の uscanner(4) マニュアルページにも対応 USB スキャナの一覧が記載されています。
前述のように、FreeBSD はスキャナのインタフェースとして SCSI と USB の両方に対応しています。 スキャナのインタフェースによって、必要となるドライバが異なります。
GENERIC カーネルにはデフォルトで USB スキャナに対応するためのデバイスドライバが搭載されています。 カスタムカーネルを使用する際には、 以下の行がカーネルコンフィグレーションファイルにあることを 確認してください。
device usb device uhci device ohci device uscanner
マザーボードにどんな USB チップセットが実装されているかによって、 device uhci か device ohci のどちらかが必要となります。ただし、両方を カーネルコンフィグレーションファイルに記載しても害はありません。
使用しているカーネルが GENERIC カーネルではなく、 カーネルを再構築したくなければ、 kldload(8) コマンドを使用して uscanner(4) デバイスドライバモジュールを直接読み込むことができます。
# kldload uscanner
このモジュールをシステムを起動するたびに読み込みたければ、 以下の行を /boot/loader.conf ファイルに追加してください。
uscanner_load="YES"
適切なドライバを組み込んだカーネルで再起動するか、 必要となるモジュールを読み込んだ後、 USB スキャナをシステムに接続します。 すると、メッセージバッファ (dmesg(8)) にスキャナが認識されたことを示すメッセージが出力されます。
uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2
この例では、スキャナが /dev/uscanner0 デバイスノードを使用していることがわかります。
スキャナに付属しているインタフェースが SCSI であれば、 重要なのはどの SCSI ボードを使用すればよいか把握することです。 使用する SCSI チップセットによって、 カーネルコンフィグレーションファイルを調整する必要があります。 GENERIC カーネルは 一般に使用される SCSI コントローラのほとんどに対応しています。 NOTES ファイルを読んで、 適切な行をカーネルコンフィグレーションファイルに追加してください。 また、SCSI アダプタドライバに加えて、 以下の行をカーネルコンフィグレーションファイルに 記述する必要があります。
device scbus device pass
カーネルを適切にコンパイルしてインストールすると、 システムの起動時にデバイスがメッセージバッファに出力されるはずです。
pass2 at aic0 bus 0 target 2 lun 0 pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device pass2: 3.300MB/s transfers
システムを起動する際にスキャナの電源を入れてなければ、 camcontrol(8) コマンドを使用して SCSI バスをスキャンし、 以下のように手動でデバイスを検出させることもできます。
# camcontrol rescan all Re-scan of bus 0 was successful Re-scan of bus 1 was successful Re-scan of bus 2 was successful Re-scan of bus 3 was successful
すると、スキャナは SCSI デバイスの一覧に現れるでしょう。
# camcontrol devlist <IBM DDRS-34560 S97B> at scbus0 target 5 lun 0 (pass0,da0) <IBM DDRS-34560 S97B> at scbus0 target 6 lun 0 (pass1,da1) <AGFA SNAPSCAN 600 1.10> at scbus1 target 2 lun 0 (pass3) <PHILIPS CDD3610 CD-R/RW 1.00> at scbus2 target 0 lun 0 (pass2,cd0)
SCSI デバイスについての詳細は、scsi(4) および camcontrol(8) のマニュアルページをご覧ください。
SANE システムは、 二つの部分、すなわちバックエンド (graphics/sane-backends) とフロントエンド (graphics/sane-frontends) に分割されています。 バックエンドはスキャナそのものに対するアクセスを提供します。 SANE の 対応デバイスの一覧 には、どのバックエンドが画像スキャナに対応しているかが記載されています。 デバイスを使用するためには、正しいバックエンドを決定するのは必須です。 また、フロントエンドはグラフィカルなスキャニングインタフェース (xscanimage) を提供します。
はじめに、 graphics/sane-backends の port または package をインストールしましょう。 次に、sane-find-scanner コマンドを使用して、 SANE システムで使用するバックエンドを検出します。
# sane-find-scanner -q found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3
この出力から、 スキャナインタフェースの種類と システムに接続されているスキャナが使用するデバイスノードがわかります。 ベンダ名や製品のモデル名は表示されないかも知れませんが、 重要ではありません。
Note: USB スキャナではファームウェアを読み込む必要がある場合があります。 これはバックエンドのマニュアルページで説明されています。 sane-find-scanner(1) と sane(7) のマニュアルページも読んでください。
スキャナがフロントエンドで認識されるか調べてみましょう。 デフォルトでは、SANE のバックエンドには scanimage(1)
と呼ばれるコマンドラインツールが付属します。 このコマンドを使用すると、
デバイスの一覧を表示したり画像を取得することができます。 -L
オプションを使うと、 スキャナデバイスの一覧が出力されます。
# scanimage -L device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
何も出力が得られなかったり、 スキャナが見つからなかったというメッセージが表示されたら、 scanimage(1) はスキャナを認識できなかったのでしょう。 このような場合は、バックエンドの設定ファイルを編集し、 使用するスキャナデバイスを定義する必要があります。 /usr/local/etc/sane.d/ ディレクトリには、 バックエンドが使用するすべての設定ファイルがあります。 このデバイスの認識による問題は、 特定の USB スキャナで発生するものです。
たとえば、 Section 7.6.2.1 で使用した USB スキャナを接続したシステムで sane-find-scanner コマンドを実行すると、以下のような情報が得られます。
# sane-find-scanner -q found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0
スキャナは正しく検出されました。 USB インタフェースを使用し、 /dev/uscanner0 デバイスノードに接続されていることがわかります。 次に、スキャナが正しく認識されているかどうか確認してみましょう。
# scanimage -L No scanners were identified. If you were expecting something different, check that the scanner is plugged in, turned on and detected by the sane-find-scanner tool (if appropriate). Please read the documentation which came with this software (README, FAQ, manpages).
スキャナが認識されなかったので、 /usr/local/etc/sane.d/epson.conf ファイルを編集する必要があります。 このスキャナのモデルは EPSON Perfection® 1650 なので、 epson バックエンドを使用すればいいことがわかります。 バックエンドの設定ファイルに書かれているコメントを必ず読んでください。 設定ファイルを変更するのは非常に簡単です。 使用しているスキャナには不適切なインタフェースをすべてコメントアウトし (今回の場合は、USB インタフェースを使用するので scsi という語で始まる行をすべてコメントアウトします)、 ファイルの末尾に使用するインタフェースとデバイスノードを追加します。 この例では、以下の行を追加しました。
usb /dev/uscanner0
詳細と使用すべき構文は、 バックエンドのマニュアルページはもちろんのこと、 バックエンドの設定ファイルに書かれているコメントも読んでください。 以上の設定で、スキャナが認識されたかどうかを確認できます。
# scanimage -L device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner
USB スキャナが認識されました。 ブランドやモデルがスキャナに一致しなかったとしても、それほど重要ではありません。 着目すべきは `epson:/dev/uscanner0'という部分で、 バックエンド名とデバイスノードが正しく認識されていることがわかります。
scanimage -L コマンドを実行してスキャナが認識されたことがわかれば、設定は終了です。 デバイスはスキャンする準備ができました。
scanimage(1) コマンドを使用すると コマンドラインから画像を取得することができます。その一方で、 GUI を使用して画像を取得できると一層良いでしょう。 SANE は、簡素ですが役に立つグラフィカルなインタフェース xscanimage (graphics/sane-frontends) を提供しています。
Xsane (graphics/xsane) はもう一つのグラフィカルなスキャニングフロントエンドで、 人気があります。 Xsane には、さまざまなスキャニングモード (写真、FAX など)、 色補正、バッチスキャンなど先進的な機能があります。 これらのアプリケーションの両方とも GIMP のプラグインとして使用することができます。
前述の操作には、 すべて root 権限が必要となります。 しかしながら、他のユーザがスキャナに アクセスできるようにすることも可能です。 そのためには、スキャナが使用するデバイスノードへの 読み込み権限と書き込み権限をユーザに与えます。 一例として、USB スキャナが、グループ operator が所有する、/dev/uscanner0 デバイスノードを使用しているものとします。 ユーザ joe を グループ operator に加えると、 彼はスキャナを使用できるようになります。
# pw groupmod operator -m joe
詳細は pw(8) のマニュアルページをご覧ください。 また、初期設定では、operator グループに所属するメンバのみが /dev/uscanner0 デバイスノードを読み出すことができます。 このデバイスノードに書き込めるようにするには、 適切な許可属性 (0660 または 0664) を設定する必要があります。 まず、/etc/devfs.rules に次の行を追加してください。
[system=5] add path uscanner0 mode 660
次に、/etc/rc.conf に以下の行を追加して システムを再起動します。
devfs_system_ruleset="system"
/etc/devfs.rules で設定した内容についての詳細は、devfs(8) のマニュアルページをご覧ください。
Note: もちろん、ユーザをどんなグループ (特にグループ operator) に追加する時はいつでも、 セキュリティ上の理由から二度は検討を行うべきです。