SANE

提供: ArchWiki
2018年2月6日 (火) 23:42時点におけるKusakata.bot (トーク | 投稿記録)による版 (文字列「http://launchpad.net/」を「https://launchpad.net/」に置換)
ナビゲーションに移動 検索に移動

関連記事

SANE は GNU/Linux でスキャナーを使うためのライブラリとコマンドラインツールを提供しています。ここ であなたのスキャナーを SANE がサポートしているか確認できます。

インストール

sane パッケージをインストールしてください。

検証

sane があなたのスキャナーを認識しているか確認してください:

$ scanimage -L

上記のコマンドが失敗する場合、root で再度コマンドを実行してパーミッションが問題なのかどうか確認してください。root で実行しても失敗する場合、スキャナーがコンピュータに接続されていることを確認してください。スキャナーを一度切断して再度接続すると /etc/udev/rules.d/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 パッケージに含まれていない場合 (hpliphpaio.conf など)、/etc/sane.d/dll.conf 内の関係するエントリをアンコメントする必要があります。

フロントエンドのインストール

SANE には多数のフロントエンドが存在しています。sane-project のウェブサイト にはフロントエンドのリストが載っています。もしくは pacman を使って "sane" や "scanner" などのキーワードでリポジトリを検索してください。

  • gscan2pdf — スキャンした文章から PDF, TIFF, DjVu を生成する GTK2 ベースの GUI。他のエンジンを使うことで OCR をすることもできます。
http://gscan2pdf.sourceforge.net/ || gscan2pdfAUR
  • Simple ScanGNOME デスクトップに統合され XSane よりも使いやすいシンプルな GUI。元は Ubuntu 用に作られたソフトウェアで Canonical Ltd. の Robert Ancell によって GNU/Linux 版はメンテナンスされています。
https://launchpad.net/simple-scan || simple-scan
  • Skanlite — 画像のスキャンと保存しかできないシンプルな画像スキャンアプリケーション。KSane バックエンドがベース。
https://www.kde.org/applications/graphics/skanlite || skanlite
  • XSane — 懐古な見た目ながら豊富な機能があるフル機能の GTK ベースのフロントエンド。
http://www.xsane.org/ || xsane
ノート: 16ビットの色深度モードで XSane を使って直接 PDF にスキャンすると 破損したファイル が生成される既知のバグがあります。8ビットモードでは問題ありません。

ネットワークスキャニング

ネットワークを介してスキャナーを共有する

スキャナーをネットワーク上の 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) を参照。

リモートのワークステーションからスキャナーにアクセス

ノート: 一部のネットワークスキャナーでは別の設定が必要です。SANE/スキャナー別の問題を見てください。

リモートの Arch Linux ワークステーションからネットワークスキャナーにアクセスすることができます。

まず /etc/sane.d/net.conf ファイルにサーバーのホストネームあるいは IP アドレスを指定してください:

# static IP address
192.168.0.1
# or host name
stratus

それからワークステーションの接続をテストしてください:

$ scanimage -L

これでフロントエンドにネットワークスキャナーが表示されるはずです。

トラブルシューティング

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 製スキャナーと epson2epson バックエンドで発生する問題です。その場合、/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 端子で接続した場合にスキャナーが機能しません。USB 2 端子が使える場合は大きな問題ではありません。USB 3 端子しか使えない場合、問題を解決する方法が複数あります:

  • BIOS/EFI で xHCI を無効化する。eHCI が使われるようになってスキャナーが動作します。欠点として全ての USB 端子の速度が落ちます。
  • 一部の Intel のチップセットでは 'setpci' コマンドを使って特定の USB 端子で xHCI と eHCI コントローラーのどちらを使うか指定することができます。詳しくは [1][2] を見てください ("setpci" について書かれている部分までスクロールしてください)。シンプルなシェルスクリプトでひとつの USB ポートだけモードを切り替えることができます。
  • ネットワークを介してスキャナーを接続する (ネットワークスキャナーの場合)。

起動が遅い

起動が遅い場合 (例: xsanescanimage -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.confblacklist usblp を記述して usblp カーネルモジュールをブラックリスト化してください (usblp がロードされなくなりますが、CUPS あるいは xsane などのツールでは必要ありません)。その後再起動してください [3]

パーミッション問題

systemd によって scannerlp グループは廃止されました。ユーザーをグループに追加する必要はありません。詳しくはユーザーとグループ#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 です。03f0vendorID2504productID です。

/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