SANE
SANE は GNU/Linux でスキャナーを使うためのライブラリとコマンドラインツールを提供しています。ここ であなたのスキャナーを SANE がサポートしているか確認できます。
インストール
検証
sane があなたのスキャナーを認識しているか確認してください:
$ scanimage -L
上記のコマンドが失敗する場合、root で再度コマンドを実行してパーミッションが問題なのかどうか確認してください。root で実行しても失敗する場合、スキャナーがコンピュータに接続されていることを確認してください。スキャナーを一度切断して再度接続すると /usr/lib/udev/rules.d/49-sane.rules
がスキャナーを認識することもあります。
実際にスキャンができるかどうか確認するには:
$ scanimage --format=png > test.png
scanimage: sane_start: Invalid argument
というメッセージを吐いてスキャンが失敗する場合、デバイスを指定する必要があります:
$ scanimage -L
device `v4l:/dev/video0' is a Noname Video WebCam virtual device device `pixma:04A91749_247936' is a CANON Canon PIXMA MG5200 multi-function peripheral
以下のように実行してみてください:
$ scanimage --device "pixma:04A91749_247936" --format=tiff > test.tiff
Sane はスキャナーのタイプにあわせて多数のバックエンドを用意しちえます。あなたのデバイスのバックエンドを確認するには:
$ scanimage -A
スキャナードライバーのインストール
ほとんどのスキャナーは特に設定をしなくても動作します。動作しない場合は SANE/スキャナー別の問題を読んでください。
ファームウェア
一般的にファームウェアの拡張子は .bin
です。
まずファームウェアをどこか安全なところに置いてください。/usr/share/sane/
のサブディレクトリが推奨です。
それから sane にファームウェアの場所を教える必要があります:
- sane がサポートしているデバイスのリスト からあなたのスキャナーのバックエンドの名前を確認してください。
/etc/sane.d/<backend-name>.conf
ファイルを開きます。- 該当ファームウェアエントリをアンコメントしてファイルパスを先ほど置いたファームウェアファイルに書き換えてください。
scanner
グループのユーザーが/etc/sane.d/<backend-name>.conf
ファイルにアクセスできるようにしてください。
あなたのスキャナーのバックエンドが sane パッケージに含まれていない場合 (hplip の hpaio.conf
など)、/etc/sane.d/dll.conf
内の関係するエントリをアンコメントする必要があります。
フロントエンドのインストール
SANE には多数のフロントエンドが存在しています。sane-project のウェブサイト にはフロントエンドのリストが載っています。もしくは pacman
を使って "sane" や "scanner" などのキーワードでリポジトリを検索してください。
- Simple Scan — GNOME デスクトップに統合され XSane よりも使いやすいシンプルな GUI。元は Ubuntu 用に作られたソフトウェアで Canonical Ltd. の Robert Ancell によって GNU/Linux 版はメンテナンスされています。
- Skanlite — 画像のスキャンと保存しかできないシンプルな画像スキャンアプリケーション。KSane バックエンドがベース。
- XSane — 懐古な見た目ながら豊富な機能があるフル機能の GTK ベースのフロントエンド。
ネットワークスキャニング
ネットワークを介してスキャナーを共有する
スキャナーをネットワーク上の sane を使っている他のホストと共有することができます。サーバーをセットアップするためには、まずネットワーク上のどのホストにアクセス許可を与えるのか指定してください。
/etc/sane.d/saned.conf
ファイルを変更して下さい。例:
# required localhost # allow local subnet 192.168.0.0/24
iptables を使っている場合、nf_conntrack_sane
モジュールを追加してファイアウォールが saned
の接続を記録するようにしてください。
その後 systemd を使って saned.socket
を起動・有効化してください。それでネットワークからスキャナーが使えるようになります。詳しくは saned(8) を参照。
リモートのワークステーションからスキャナーにアクセス
リモートの Arch Linux ワークステーションからネットワークスキャナーにアクセスすることができます。
まず /etc/sane.d/net.conf
ファイルにサーバーのホストネームあるいは IP アドレスを指定してください:
# static IP address 192.168.0.1 # or host name stratus
それからワークステーションの接続をテストしてください:
$ scanimage -L
これでフロントエンドにネットワークスキャナーが表示されるはずです。
Windows クライアント
SANE の Windows 版は サポートが切れており動かすのが難しい ため、代わりに SaneTwain を使ってみてください。
トラブルシューティング
SANE/スキャナー別の問題も見てください。
Invalid argument
xsane などの sane フロントエンドで "Invalid argument" エラーが出る場合、理由として以下のような理由が考えられます:
ファームウェアファイルがない
スキャナーを使うためのファームウェアファイルが存在しない (詳しくはファームウェアを参照)。
ファームウェアファイルのパーミッションがおかしい
ファームウェアファイルのパーミッションが間違っている場合、以下のコマンドを実行してください:
# chown root:scanner /usr/share/sane/SCANNER_MODEL/FIRMWARE_FILE # chmod ug+r /usr/share/sane/SCANNER_MODEL/FIRMWARE_FILE
複数のバックエンドがスキャナーを要求している
スキャナーをサポートしているバックエンドが複数ある場合、Sane はサポートがないバックエンドを選んでしまうことがあります (その場合 scanimage -L
でスキャナーが表示されません)。旧式の Epson 製スキャナーと epson2
と epson
バックエンドで発生する問題です。その場合、/etc/sane.d/dll.conf
で使用しないバックエンドをコメントアウトすることで解決できます。Epson の場合は、以下の行を:
epson2 #epson
以下のように変更してください:
#epson2 epson
iscan の epkowa バックエンドと snapscan バックエンド (epson スキャナー) が干渉することもあります。scanimage -L
コマンドを使ったときにエラーが表示されます。(xsane などの) スキャナーアプリを2回起動することで問題は解決します。もしくは /etc/sane.d/epkowa.conf
の設定が間違っていないか確認したり、あるいは iscan パッケージを削除してください。
xHCI による通信ができない (旧式のスキャナー)
一部の古いモデルのスキャナーでは USB 3 端子で接続した場合にスキャナーが機能しません。この問題が発生する場合、フロントエンドを起動する前に SANE_USB_WORKAROUND=1
環境変数を設定してみてください [1][2]。
上記の設定で問題が解決しない場合、以下の解決方法を試してみてください:
- USB3 端子の代わりに USB2 端子を使うことができる場合、使ってみる。
- BIOS/EFI で xHCI を無効化する。eHCI が使われるようになってスキャナーが動作します。欠点として全ての USB 端子の速度が落ちます。
- 一部の Intel のチップセットでは 'setpci' コマンドを使って特定の USB 端子で xHCI と eHCI コントローラーのどちらを使うか指定することができます。詳しくは [3] や [4] を見てください ("setpci" について書かれている部分までスクロールしてください)。シンプルなシェルスクリプトでひとつの USB ポートだけモードを切り替えることができます。
- ネットワークを介してスキャナーを接続する (ネットワークスキャナーの場合)。
起動が遅い
起動が遅い場合 (例: xsane
や scanimage -L
でスキャナーが認識されるまで時間がかかる)、おそらくスキャナーをサポートしているドライバが複数あるのが原因です。
/etc/sane.d/dll.conf
を開いて不必要なドライバーをコメントアウトしてください (例: epson, epson2, epkowa が同時に使われる場合 epson あるいは epkowa だけを残して他をコメントアウトする)。
ネットワークスキャナーが存在しない場合 "net" ドライバーもコメントアウトできます。
スキャンデバイスとしてウェブカメラがある場合も起動時に認識が遅くなります。/etc/sane.d/v4l.conf
の全ての行をコメントアウトすることでウェブカメラをブラックリストにできます。
Device busy
scanimage -L
で USB デバイスが確認できるのに scanimage pixma:04A9173E_11DAD1 --format=tiff > test.tiff
でテストすると 'Device busy' エラーしか返ってこない場合、scanner グループにユーザーを追加 usermod -a -G scanner yourusername
してから /etc/modprobe.d/no-usblp.conf
に blacklist usblp
を記述して usblp カーネルモジュールをブラックリスト化してください (usblp がロードされなくなりますが、CUPS あるいは xsane などのツールでは必要ありません)。その後再起動してください [5]。
パーミッション問題
systemd によって scanner
と lp
グループは廃止されました。ユーザーをグループに追加する必要はありません。詳しくはユーザーとグループ#systemd 以前のグループを見てください。
USB デバイスのパーミッションを変更することもできますが推奨されません。Udev ルールを使ってスキャナーが認識されるように修正するほうが良いでしょう。
まずは lsusb
で接続されている USB デバイスを確認してください:
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 003: ID 04d9:1603 Holtek Semiconductor, Inc. Bus 003 Device 002: ID 04fc:0538 Sunplus Technology Co., Ltd Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 006: ID 03f0:2504 Hewlett-Packard Bus 001 Device 002: ID 046d:0802 Logitech, Inc. Webcam C200 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
上記の場合はスキャナーは Bus 001 Device 006: ID 03f0:2504 Hewlett-Packard
です。03f0
が vendorID で 2504
が productID です。
/usr/lib/udev/rules.d/49-sane.rules
を開いてあなたのスキャナーの vendorID と productID が書かれた行が存在するか確認してください。存在しない場合、新しいファイル /etc/udev/rules.d/49-sane-missing-scanner.rules
を以下の内容で作成します:
ATTRS{idVendor}=="vendorID", ATTRS{idProduct}=="productID", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
ファイルを保存したら、スキャナを一度切断してから再接続すればファイルのパーミッションが正しく設定されているはずです。
デバイス (スキャナー) をバックエンドファイルに追加することもできます:
usb 0x03f0 0x2504
を /etc/sane.d/hp4200.conf
に追加すると以下のようになります:
# # Configuration file for the hp4200 backend # # # HP4200 #usb 0x03f0 0x0105 usb 0x03f0 0x2504
パラレルポート接続のスキャナー
パラレルポートで接続されたデバイスは全てプリンターとして認識され lp
グループが割り当てられます。udev ルールを作成して該当するパラレルポートを libsane_matched
として設定するか、あるいはユーザーを lp
グループに追加してください。CUPS も設定ファイルを読み取るために lp
グループを使うため、ユーザーを lp
グループに追加すると潜在的にセキュリティ上問題があります。詳しくは CUPS#接続インターフェイスを参照。