SANE
SANE (Scanner Access Now Easy) は、GNU/Linux でスキャナを使うためのライブラリとコマンドラインツールを提供します。
インストール
sane パッケージをインストールしてください。ほとんどのフロントエンドとドライバはこのパッケージを依存関係としてインストールするため、たいてい、このパッケージを明示的にインストールする必要はありません。
スキャナドライバ
最近のスキャナの多くは "ドライバレス" スキャンをサポートしています。[1] デバイスの互換性については、sane-airscan GitHub や Apple AirPrint devices で調べられます。
あなたのスキャナが "ドライバレス" モードで動作することが分かっている場合は、sane-airscan パッケージをインストールしてください。スキャナが USB を使用する場合は、USB 接続で IPP プロトコルを使用できるようにするために、ipp-usb パッケージをインストールし、 ipp-usb.service
を起動/有効化してください。
"ドライバレス" で動作しないかもしれない場合は、SANE - Supported Devices と SANE/スキャナー別の問題 を確認し、あなたのスキャナが別のドライバで動作するかどうかを調べてください。
ほとんどのスキャナは特に設定をしなくても動作します。動作しない場合は、SANE/スキャナー別の問題 でインストール手順を確認してください。
フロントエンド
SANE には多数のフロントエンドが存在しています。不完全なリストは SANE プロジェクトのウェブサイトで見られます。
- Simple Scan — XSane よりも GNOME デスクトップにより良く統合され、より使いやすくなるように設計されたシンプルな GUI。gnome の一部。
- Skanlite — 画像のスキャンと保存しかできないシンプルな画像スキャンアプリケーション。KSane バックエンドがベース。
- Skanpage — 複数ページのスキャンやドキュメントと画像の保存のために設計されたシンプルなスキャンアプリケーション。
- XSane — 懐古な見た目ながら豊富な機能があるフル機能の GTK ベースのフロントエンド。
一部の OCR ソフトウェアは SANE を使って画像をスキャンできます: gImageReader、gscan2pdf、Linux-Intelligent-Ocr-Solution、OCRFeeder、Paperwork。
検証
インストールが終わった今、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 パッケージに含まれていない場合 (hplip の hpaio.conf
など)、/etc/sane.d/dll.d
か /etc/sane.d/dll.conf
内の関連するエントリをアンコメントする必要があります。
ネットワークスキャニング
ネットワークを介してスキャナーを共有する
スキャナーをネットワーク上の 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 をコメントアウトします:
/etc/sane.d/dll.conf
#epson2 epson
独立した iscanAUR の epkowa
バックエンドが snapscan
バックエンド (epson スキャナ) と干渉することもあります。scanimage -L
コマンドを使ったときにこのエラーが表示されるでしょう。(xsane などの) スキャナーアプリを2回起動することで問題は解決します。もしくは /etc/sane.d/epkowa.conf
の設定が間違っていないか確認したり、あるいは iscanAUR パッケージを削除してください。
xHCI による通信ができない (旧式のスキャナ)
一部の古いモデルのスキャナーでは USB3 端子で接続した場合にスキャナーが機能しません。この問題が発生する場合、フロントエンドを起動する前に SANE_USB_WORKAROUND=1
環境変数を設定してみてください。[2][3]
上記の設定で問題が解決しない場合、以下の回避策を試してみてください:
- 可能であれば、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 ファイアーウォールモジュールを使用しなければなりません。
起動が遅い
起動が遅い場合 (例: xsane
や scanimage -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
USB デバイスが scanimage -L
で表示されるのに、テストで scanimage pixma:04A9173E_11DAD1 --format=tiff --output-file test.tiff
を実行すると必ず 'Device busy' エラーが発生する場合、あなたのユーザ名をスキャナグループに追加し (usermod -a -G scanner yourusername
)、/etc/modprobe.d/no-usblp.conf
内に blacklist usblp
を記述して usblp
カーネルモジュールをブラックリスト化してみてください (スキャンのサポートのために usblp
がロードされることを防ぎます。このモジュールは xsane や関連するツールでは必要なく、CUP と競合するかもしれません)。最後に再起動してください。[4]
これに加えて、一部の Cannon プリンタは、スキャンモードが "Computer" に設定されている場合、"device busy" と返します。"Remote Scanner" モードに設定することで、問題が解決するはずです。[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 です。
または、sane-find-scanner
を root 権限で実行しても、同じ vendorID と productID 得ることができます。
/usr/lib/udev/rules.d/65-sane.rules
を開いてあなたのスキャナーの vendorID と productID が書かれた行が存在するか確認してください。存在しない場合、新しいファイル /etc/udev/rules.d/65-sane-missing-scanner.rules
を以下の内容で作成します:
ATTRS{idVendor}=="vendorID", ATTRS{idProduct}=="productID", MODE="0664", GROUP="lp", 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#接続インターフェイス を参照。
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
デーモンを再起動してください。
参照
- Wikipedia:WS-Discovery (Microsoft の "ドライバレス" プロトコル)