SANE

提供: ArchWiki
2023年8月23日 (水) 10:54時点におけるAshMyzk (トーク | 投稿記録)による版 (→‎Device busy: 訳を修正)
ナビゲーションに移動 検索に移動

関連記事

SANE (Scanner Access Now Easy) は、GNU/Linux でスキャナを使うためのライブラリとコマンドラインツールを提供します。

インストール

sane パッケージをインストールしてください。ほとんどのフロントエンドとドライバはこのパッケージを依存関係としてインストールするため、たいてい、このパッケージを明示的にインストールする必要はありません。

スキャナドライバ

最近のスキャナの多くは "ドライバレス" スキャンをサポートしています。[1] デバイスの互換性については、sane-airscan GitHubApple AirPrint devices で調べられます。

あなたのスキャナが "ドライバレス" モードで動作することが分かっている場合は、sane-airscan パッケージをインストールしてください。スキャナが USB を使用する場合は、USB 接続で IPP プロトコルを使用できるようにするために、ipp-usb パッケージをインストールし、 ipp-usb.service起動/有効化してください。

"ドライバレス" で動作しないかもしれない場合は、SANE - Supported DevicesSANE/スキャナー別の問題 を確認し、あなたのスキャナが別のドライバで動作するかどうかを調べてください。

ほとんどのスキャナは特に設定をしなくても動作します。動作しない場合は、SANE/スキャナー別の問題 でインストール手順を確認してください。

ノート: 一部のドライバ (sane-airscan を含む) は、ネットワークスキャナを探索するためにマルチキャストを使用します。iptables#マルチキャストのトラフィックを許可する で、ファイアウォールを正しく設定する方法を確認してください。

フロントエンド

SANE には多数のフロントエンドが存在しています。不完全なリストは SANE プロジェクトのウェブサイトで見られます。

  • Simple Scan — XSane よりも GNOME デスクトップにより良く統合され、より使いやすくなるように設計されたシンプルな GUI。gnome の一部。
https://gitlab.gnome.org/GNOME/simple-scan || simple-scan
  • Skanlite — 画像のスキャンと保存しかできないシンプルな画像スキャンアプリケーション。KSane バックエンドがベース。
https://apps.kde.org/skanlite/ || skanlite
  • Skanpage — 複数ページのスキャンやドキュメントと画像の保存のために設計されたシンプルなスキャンアプリケーション。
https://apps.kde.org/skanpage/ || skanpage
  • XSane — 懐古な見た目ながら豊富な機能があるフル機能の GTK ベースのフロントエンド。
http://www.xsane.org/ || xsane

一部の OCR ソフトウェアは SANE を使って画像をスキャンできます: gImageReader、gscan2pdf、Linux-Intelligent-Ocr-Solution、OCRFeederPaperwork

ノート:
  • 16ビットの色深度モードで XSane を使って直接 PDF にスキャンすると 破損したファイル が生成される既知のバグがあり、pacman の出力でも警告されます。8ビットモードでは問題ないことが知られています。
この記事またはセクションの正確性には問題があります。
理由: skanlite が mDNS を処理する必要はありません。mDNS ホスト名解決が正しく設定されていて、スキャナのアドレスが hostname.local として指定されている限り、動作するはずです。これは hplip の制限/バグのようです。 (議論: トーク:SANE#)
  • フロントエンドを使用するというだけでは設定が不要になるわけではありません。特に mDNS でデバイスを設定する場合などです。例えば skanlite は mDNS を扱うことができないため、ネットワークスキャナを正しく認識するにはコマンドラインに情報を追加する必要があります。HP Officejet Pro L7590 での設定例: skanlite --device "hpaio:/net/Officejet_Pro_L7500?ip=192.168.0.17"

検証

インストールが終わった今、sane がスキャナを認識するかどうか試してみることができます:

$ scanimage -L

上記のコマンドが失敗する場合、root で再度コマンドを実行してパーミッションが問題なのかどうか確認してください。root で実行しても失敗する場合、スキャナーがコンピュータに接続されていることを確認してください。また、/usr/lib/udev/rules.d/65-sane.rules にスキャナを認識させるために、スキャナを抜き差しする必要があるかもしれません。

確認したら、スキャナが実際に動作するかどうか確認できます:

$ scanimage --format=png --output-file test.png --progress

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 --output-file test.tiff --progress

Sane は、数々のスキャナのタイプに対して多く特別なバックエンドオプションを提供しています。あなたのデバイス用のバックエンドは何か確認するには:

$ scanimage -A

ファームウェア

ノート: このセクションが必要になるのは、スキャナにファームウェアをアップロードする必要がある場合だけです。

通常、ファームウェアには .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.d/etc/sane.d/dll.conf 内の関連するエントリをアンコメントする必要があります。

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

sanexsane、xsane を有効化した GIMP を使用する、ネットワーク上の他のホストとスキャナを共有することができます。サーバをセットアップするには、まず、ネットワーク上のどのホストにアクセスを許可するか指定してください。/etc/sane.d/saned.conf ファイルを変更してください。例えば:

# 必要
localhost
# ローカルサブネットを許可
192.168.0.0/24

次に、マルチキャストでスキャナを発見できるようにするために、サーバ上で avahi-daemon をインストールし、有効化、起動してください (avahi-daemon がまだアクティブでない場合)。あるいは、スキャナが Airscan によってサポートされている場合、代わりに sane-airscan パッケージをインストールしても良いです。

iptables を使っている場合、nf_conntrack_sane モジュールを追加し、ファイアーウォールが saned の接続を追跡するようにしてください。

Conntrack ヘルパはデフォルトで無効化されているようです。[2] 以下のコマンドでアクティブ化できます:

# echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper  

これを永続化するには、nf_conntrack モジュールに対して nf_conntrack_helper=1 オプションを設定してください (カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う を参照)。

そして、saned.socket起動/有効化してください。これで、スキャナがネットワークを介して利用可能になりました。詳細は saned(8) を参照してください。

ノート: saned は意図的に net: バックエンドを使用するスキャナの共有を拒否することがあります (一部 USB スキャナも含まれます)。FS#54786 に共有を許可するパッチが存在しますが、ネットワークによっては問題が発生します。サーバーで scanimage -L の出力からスキャナの URL を確認してください。

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

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

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

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

# 静的 IP アドレス
192.168.0.1
# あるいはホスト名
stratus

次に、サーバ側での設定に応じて、リモートワークステーションに avahi-daemon をインストール、起動、そして有効化するか、あるいは、sane-airscan をインストールしてください。

そして、ワークステーションの接続をテストしてください。

$ scanimage -L

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

Windows クライアント

SANE の Windows 移植版はサポートされておらず、古くなっていて、入手するのが難しいため、代わりに SANEWinDSSaneTwain (古い) を試すことができます。

トラブルシューティング

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 をコメントアウトします:

/etc/sane.d/dll.conf
#epson2
epson

独立した iscanAURepkowa バックエンドが snapscan バックエンド (epson スキャナ) と干渉することもあります。scanimage -L コマンドを使ったときにこのエラーが表示されるでしょう。(xsane などの) スキャナーアプリを2回起動することで問題は解決します。もしくは /etc/sane.d/epkowa.conf の設定が間違っていないか確認したり、あるいは iscanAUR パッケージを削除してください。

xHCI による通信ができない (旧式のスキャナ)

一部の古いモデルのスキャナーでは USB3 端子で接続した場合にスキャナーが機能しません。この問題が発生する場合、フロントエンドを起動する前に SANE_USB_WORKAROUND=1 環境変数を設定してみてください。[3][4]

上記の設定で問題が解決しない場合、以下の回避策を試してみてください:

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

ファイアーウォール

ネットワークスキャンスキャナがハングすると、invalid argument (無効な引数) エラーが発生します。

saned はデータポートの範囲を使用するため、6566/tcp と /etc/sane.d/saned.conf の data_portrange への接続を有効化するか、または、sane が上記のデータポートを有効化できるようにするために conntrack ファイアーウォールモジュールを使用しなければなりません。

起動が遅い

起動が遅い場合 (例: xsanescanimage -L が結果を返すまでに非常に長い時間がかかる)、使用していないドライバのどれかが原因である場合があります。

/etc/sane.d/dll.conf を編集して、使用しないスキャナドライバをコメントアウトすることで、この問題を解決できます。scanimage -L を使うことで、どのドライバが必要であるかを判断することができます:

$ scanimage -L
device `brother4:net1;dev0' is a Brother DCP-L2550DW
device `v4l:/dev/video0' is a Noname Logitech Webcam C925e virtual device
device `escl:http://192.168.1.2:80' is a Brother DCP-L2550DW series adf,platen scanner

出力の `: の間の部分が、対象のデバイスのドライバを示しています。例えば、ウェブカメラや汎用スキャナドライバを使用せず、Brother スキャナだけを使用したい場合は、/etc/sane.d/dll.conf 内の brother4 ドライバ以外はすべてコメントアウトできます。

Device busy

この記事またはセクションの正確性には問題があります。
理由: ユーザを scanner グループに追加する必要はないはずです (ユーザーとグループ#systemd 以前のグループ を参照)。 (議論: トーク:SANE#)

USB デバイスが scanimage -L で表示されるのに、テストで scanimage pixma:04A9173E_11DAD1 --format=tiff --output-file test.tiff を実行すると必ず 'Device busy' エラーが発生する場合、あなたのユーザ名を scanner グループに追加し (usermod -a -G scanner yourusername)、/etc/modprobe.d/no-usblp.conf 内に blacklist usblp を記述して usblp カーネルモジュールをブラックリスト化してみてください (スキャンのサポートのために usblp がロードされることを防ぎます。このモジュールは xsane や関連するツールでは必要なく、CUP と競合するかもしれません)。最後に再起動してください。[5]

これに加えて、一部の Cannon プリンタは、スキャンモードが "Computer" に設定されている場合、"device busy" と返します。"Remote Scanner" モードに設定することで、問題が解決するはずです。[6]

パーミッションの問題

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 です。

または、sane-find-scanner を root 権限で実行しても、同じ vendorIDproductID 得ることができます。

/usr/lib/udev/rules.d/65-sane.rules を開いてあなたのスキャナーの vendorIDproductID が書かれた行が存在するか確認してください。存在しない場合、新しいファイル /etc/udev/rules.d/65-sane-missing-scanner.rules を以下の内容で作成します:

ATTRS{idVendor}=="vendorID", ATTRS{idProduct}=="productID", MODE="0664", GROUP="lp", ENV{libsane_matched}="yes"

ファイルを保存したら、スキャナを一度切断してから再接続すればファイルのパーミッションが正しく設定されているはずです。

この記事またはセクションの正確性には問題があります。
理由: 正しいバックエンドファイルにスキャナを追加する必要があります。全てのスキャナで hp4200.conf が機能するわけではありません。 (議論: トーク:SANE#)

デバイス (スキャナー) をバックエンドファイルに追加することもできます:

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#接続インターフェイス を参照。

avahi-daemon は必須ではありません

一部のスキャナアプリケーションでは、起動時に avahi-daemon が起動している必要があります。実は、これは SANE が原因なのです。有線スキャナを使っていたり、スキャナのドライバがセットアップ時にすでにネットワークをサポートしていたりして avahi-daemon サービスを有効化する必要がない場合、SANE の設定ファイルから net バックエンドをコメントアウトしてください:

/etc/sane.d/dll.conf
# The next line enables the network backend; comment it out if you do not
# need to use a remote SANE scanner over the network -- see sane-net(5)
# and saned(8) for details.
#net

そして、saned デーモンを再起動してください。

参照

翻訳ステータス: このページは en:SANE の翻訳バージョンです。最後の翻訳日は 2023-07-13 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。