web-dev-qa-db-ja.com

SANEスキャン、scanbdボタンおよびサービス権限

私は一日中この仕事をしようとしています。もうすぐですが、まだ何かが足りません。これまでの話は次のとおりです。

  • Debian Jessie8.3ヘッドレスホームサーバー
  • Canon MP140 MFPスキャナー/プリンターは、USB経由でSANEによって完全にサポートされています
  • SANE dll.confが構成され、機能しています(netpixmaを除くすべてがコメントアウトされています)

scanimage -p --resolution 300 --format=tiff --mode Gray -x 210 -y 297 > test300.tiff ... A4用紙をグレースケールでスキャンし、tiffとして問題なく保存します。


Sudo service scanbd status
● scanbd.service - Scanner button polling Service
   Loaded: loaded (/lib/systemd/system/scanbd.service; disabled)
   Active: active (running) since Fri 2016-02-19 19:24:03 CET; 23min ago
 Main PID: 1740 (scanbd)
   CGroup: /system.slice/scanbd.service
           └─1740 /usr/sbin/scanbd -f

Feb 19 19:24:03 server scanbd[1740]: /usr/sbin/scanbd: dbus match type='signal',interface='org.freedesktop.Hal.Manager'

実行されているように見えますが、ボタンにはまったく反応しません。


私はサービスを停止し、rootとしてscanbdを開始しようとしましたそしてそれは機能します!

Sudo scanbd -f
scanbd: dbus match type='signal',interface='org.freedesktop.Hal.Manager'
scanbd: trigger action for button-1 for device pixma:04A9172B_ABCDEF with script example.script

だから、私の推測では、それはある種の権限の問題だと思います。 / etc/scanbd.confを変更して置き換えようとしました

user = scand  
group = scanner  

user = root  
group = root

しかし、scanbdサービスを再起動すると、これが表示され、ボタンが再び機能しなくなります。

● scanbd.service - Scanner button polling Service
   Loaded: loaded (/lib/systemd/system/scanbd.service; disabled)
   Active: active (running) since Fri 2016-02-19 20:07:11 CET; 4s ago
 Main PID: 2562 (scanbd)
   CGroup: /system.slice/scanbd.service
           └─2562 /usr/sbin/scanbd -f

Feb 19 20:07:11 server scanbd[2562]: /usr/sbin/scanbd: dbus match type='signal',interface='org.freedesktop.Hal.Manager'
Feb 19 20:07:11 server scanbd[2562]: /usr/sbin/scanbd: Not Primary Owner (-1)
Feb 19 20:07:11 server scanbd[2562]: /usr/sbin/scanbd: Name Error (Connection ":1.96" is not allowed to own the service "de.kmux.scanbd.server" due to security policies in the configuration file)

私はおそらくいくつかの明白な詳細を見落としていますが、それが何であるかを本当に理解することはできません。どんな助けでも大歓迎です。

1
vto80

私はついにそれをすべて機能させました...

私の最終的な目標は、スキャンボタンを機能させることでした。私がそれを理解するまでに、私はスキャンボタンが機能し、ネットワークスキャンも機能するようになりました。

私はそれを間違った方法で見ていました、そして結果としてそれを間違った方法で見ていました。
この作業を行うためのコマンドの正確なシーケンスを書き留めることができず、申し訳ありません。作業が完了するまでにかなり混乱してしまいました。しかし、私は少なくともそれの一般的な論理を助けることができることを願っています。

したがって、scanbd(スキャナーボタンサービス)またはsaned(スキャナーネットワークサーバーサービス)のいずれかがスキャナーにアクセスできますが、両方を同時にアクセスすることはできません。 scanbdはボタンの状態を絶えず更新することでスキャナーをロックし、sanedはネットワークスキャナーとして使用するためにスキャナーをロックします。

それが機能する方法は、サービスとしてscanbdのみを使用することです。
scanbdは、ボタンの状態を常に監視し、ボタンが押された場合に何らかのアクションを実行します。ただし、sane-port 6566(tcp)でリッスンすることもできます。トラフィックを検出すると、ボタンの監視を停止し、sanedサービスを開始して引き継ぎます。 sanedがネットワークスキャナーサーバーであることが完了すると、scanbdはボタンが押されるか、正常なポートでさらにネットワークトラフィックが増えるのを待つために再開します。

これが機能するためには、sanedを2回構成する必要があります。
同じマシン上のサーバーとクライアントの両方。サーバー部分は、scanbdがネットワークトラフィックを検出したときに開始され、上記の段落で説明されています。

クライアント部分は、scanimageを介してスキャンを開始したとき、またはscanbdがボタンの押下を検出したときに手動で開始されます。 sanedクライアントは、ネットワークsanedサーバーに接続するように構成する必要があります(同じマシン、つまりlocalhost、127.0.0.1またはホスト名、バックエンド 'net ')-USBではありません-したがって、scanbdとの競合を回避します。次に、scanbdは、ポート6566でネットワークトラフィックを検出し、実際にネットワーククライアントであるかのように、サーバーとしてsanedを起動します。

クライアント構成は/etc/sane.dにあり、サーバー構成は/etc/scanbd/sane.dにあります。サーバー構成を/etc/sane.dからコピーして(フォルダー全体をコピーするだけ)、サーバーとして機能し、USB経由でスキャナーと通信するように変更する必要があります。つまり、スキャナーが実際に使用するバックエンドです。 /etc/scanbd/scanbd.confでは、SANE_CONFIG_DIRはsanedサーバー部分を指している必要があります。/etc/scanbd/sane.d

編集:また、マシンがファイアウォールで保護されている場合は、ポート6566を開き、カーネルモジュールnf_conntrack_saneをロードします。

Sudo ufw allow 6566/tcp

Sudo modprobe nf_conntrack_sane

それでも機能する場合は、nf_conntrack_sane/etc/modulesに追加します

2
vto80