2016年7月20日水曜日

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)その2

前回の結果、とりあえずScanSnap Managerをwineで起動するところまでは出来た。
でも、ものすごく読み取りが遅くて実用に耐えない。しかも3枚までしか取れない。
何が問題で遅くなっているのか見てみようと思った。

遅い原因を探す(DEBUGフラグ)


https://wiki.winehq.org/Debug_Channels
を参考にデバッグフラグをつけて動かしてみた。
 +relay,+snoop

OKなとき、↓のInitializeのCALLで色々やったあと、RETで戻ってくる。
808373:0038:CALL PfuSsImgCtl.SsICSRGBInitialize(<unknown, check return>) ret=060bc073
808395:0038:RET  PfuSsImgCtl.SsICSRGBInitialize(060f023c "ScanSnap iX100") retval=00000000 ret=060bc073

NGのとき、戻ってこない。
これは、以下で戻ってこないのが原因っぽい(SsICSRGBInitializeの中で呼んでいる)
003b:Call mscms.OpenColorProfileA(001c3c58,00000001,00000001,00000003) ret=037211bb

OKの場合は、以下のような感じで、
ReadFileしたあと、FreeHeapして戻ってくるだけ





2025424 0038:Call KERNEL32.ReadFile(00000294,0c522540,00000c48,0cf0ee18,00000000) ret=7c56bb29
2025425 0038:Ret  KERNEL32.ReadFile() retval=00000001 ret=7c56bb29
2025426 0038:Call ntdll.RtlFreeHeap(00110000,00000000,0c4f51c8) ret=7c56c102
2025427 0038:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7c56c102
2025428 0038:Ret  mscms.OpenColorProfileA() retval=00000002 ret=037211bb


なのだが、NGの時は、スレッド0038はしばらく止まったあと以下のような感じでタイムアウトになる。
ロックしたまま開放されないのが原因であって、処理が遅いわけじゃないようだ。



2443843 0039:Call KERNEL32.Sleep(00000014) ret=00d7d00e
2443844 err:ntdll:RtlpWaitForCriticalSection section 0x7c575640 "handle.c: mscms_handle_cs" wait timed out in thread 003b, blocked by 0038, retrying (60 sec)
2443845 0039:Ret  KERNEL32.Sleep() retval=00000000 ret=00d7d00e

遅い原因を探す(printfデバッグ)


wineの最新をgit pullしてきて、dlls/mscms/handle.cで
mscms_handle_csの操作している前後に以下のような感じでprintfを入れて見てみる。

243     printf("%s:%d\n", __FILE__, __LINE__);
244     EnterCriticalSection( &mscms_handle_cs );
245     printf("%s:%d\n", __FILE__, __LINE__);

見てみようとしたら、動くようになってしまった。
printfの有無で動きが変わるので、タイミング的な問題のようだ。
根本的には何にも解決してないが、動くので良しとする。
(追記:やっぱり動かない。何が影響したのかわからない。)

カスタムwineをplayonlinuxで使う


wineのprefixをplayonlinuxのバイナリ置き場にする。
./configure --prefix=/home/****/.PlayOnLinux/wine/linux-x86/1-custom

あとはmake && make install


その他


これを調べてる最中にScanSnap Cloudってのがあることを知った。
これだと、PCなくてもiX100だけでキャプチャできるので、
linuxで動かすためにそこまで苦労する必要無かったかも。

でも、PCを介さず自動なのでレシートとか名刺がバラバラにJPGにされたりする。
ある程度制御したい場合はPCで使えたほうが便利。
なのでLinuxで動かすことに意味がなかったわけではない。(強がり)

あとは電波感度が良ければいいんだが。

追記


追記1:
やっぱり動かない。何が影響したのかわからない。
ログからすると、以下の2つの処理が遅いようだ。
P2ICRPPR.P2iGetDocPosMulti
P2IERASECLRBDR.P2iEraseClrBdr


2862806 1942566.330:003a:CALL P2ICRPPR.P2iGetDocPosMulti(<unknown, check return>
) ret=034b2c0f
3082841 1942605.508:003a:RET  P2ICRPPR.P2iGetDocPosMulti(0dd2cc6c,0dd2cca0,00000
000,00000000,0dd2d150) retval=00000000 ret=034b2c0f

3130018 1942619.899:003a:CALL P2IERASECLRBDR.P2iEraseClrBdr(<unknown, check retu
rn>) ret=034b37e6
3398921 1942702.424:003a:RET  P2IERASECLRBDR.P2iEraseClrBdr(0dd2cca0,0dd2cd9c,00
000000) retval=00000000 ret=034b37e6

追記2:
どうも使うwineをバージョン上げたりして変更したらしばらく使えるような感じがある。


2016年7月8日金曜日

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)

前回の結果、とりあえずlinux上のソフトでScanSnap iX100を動かすことが出来たが、やっぱり使い心地は製品には及ばない。windows用のソフトを使いたいが、いちいち仮想環境を動かすのはめんどくさいから、できればwineで動かしたい。
 ScanSnap iX100はWi-Fi接続で使える機能がある。USB接続はドライバがそもそも動かないが、Wi-FiならOS関係なく動くんじゃないか?と考え、色々やった結果を以下に記す。

前準備


windows等で、Wi-Fi接続の設定をやっておく。

wineの準備


PlayOnLinuxで、wine-1.9.10-stagingを使った。文字化けしないようにwinetricksで以下を入れておく。
  • fakejapanese
  • fakejapanese_ipamona
(多分どっちかでいいと思う)

インストール


付属のCDからインストール



インストールは割とすんなり行った。
最後にUSBを接続して確認とか、Wi-Fiで確認とか、アップデートの確認とか出てくるが、USBが使えないと進めないので全部キャンセルする。
(おそらくこれはかなり重要。キャンセルせずUSBで固まったりすると、インストールが正常終了しないので、中途半端な状態になる。)

インストール後勝手に動く。PlayOnLinux Wizardが終了しないので、とりあえず一旦全部終了する。バックグラウンドで色々動いているので、それっぽいものは適当にkillしていく。
全部終わらせたらwizardが進む。

 


とりあえずはScanSnap Manager.lnkとScanSnap Managerの設定.lnkを登録しておけばいいと思う。

動かしてみる。


ScanSnapManagerを動かす。
.lnkだと起動に失敗したりする。「ScanSnap Managerの設定.lnk」の方を動かしたらいいかもしれない。



Wi-Fi接続をやってみる。



登録していないものには繋がらないようだ。
(他人にうっかり使われないようにみたいな配慮か?)

Wi-Fiにつなげる


色々ファイルを探しまわった結果、PfuSsMon.iniというのが怪しそうなので、これをWindowsから取ってきて置き換える。
コピー先:drive_c/Program Files/PFU/ScanSnap/Driver/

もう一度起動。

 

認識した。
スキャンしてみる。



ダメっぽい。

スキャンが失敗する原因


色々探しまわったら、詳しい情報が書いてあるサイトを見つけた。
なんか執念を感じるほど調べてある。すばらしい。

これを元に調べると(3) RAW画像の出力はできていて、(5)のJpgTmpへの出力ができていない。ってことで(4)のカラープロファイルのところで失敗しているっぽい。
で、もうちょっと上を見ると以下の2つを読んでいるらしい。

  • %SYSTEMROOT%\system32\spool\drivers\color\ScanSnap S1500.icm
  • %SYSTEMROOT%\system32\spool\drivers\color\sRGB Color Space Profile.icm 

このうち2個めのファイルがwineの方には無かったのでwindowsから取ってきて入れる。
コピー先:drive_c/windows/system32/spool/drivers/color/

 

よめた。
けど、変換が超遅い。
これはこれで実用にならない。

諦めた。
(と見せかけて続き

2016年7月5日火曜日

ScanSnap iX100 on Ubuntu Linux 16.04

なんとなく銀行の明細とか保管してしまう。
ほとんどの場合必要ないので捨てたいんだけど、
ごく稀に取っとけばよかったって物があるので、つい捨てるのをためらってしまう。
いい加減ゴミだらけになるので、PCに取り込んで捨てることにした。

 ○Linuxで使えそうなものを調べる。

SANEでサポートされているやつを調べて
http://www.sane-project.org/sane-mfgs.html

ScanSnap iX100ってやつを買った。
ゴミを整理するのに馬鹿でかいものは要らんかなと思ったので小さそうなやつ。

○一応Windowsから使ってみる。

うごいた。(当たり前)

○SANEで認識できるか?


$ sane-find-scanner

 を実行すると

could not open USB device 0x04c5/0x13f4 at 001:027: Access denied (insufficient permissions)

とかUSB接続のデバイスがずらずら出てくる。
アクセス出来てないようなので、とりあずrootで実行してみる。


found USB scanner (vendor=0x04c5 [Fujitsu], product=0x13f4 [ScanSnap iX100]) at libusb:001:027
  # Your USB scanner was (probably) detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.

とりあえず書いてある通りscanimage -Lを打ってみる。

$ sudo scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

見つからないらしい。
googleによると/etc/sane.d/fujitsu.confに設定があるらしい。
確かに見てみたらiX500はあるのにiX100が無い。
↑で出てきたvendor IDとproduct IDを追記した。

#ScanSnap iX100
usb 0x04c5 0x13f4

もう一度やってみる。

$ sudo scanimage -L

device `fujitsu:ScanSnap iX100:1202619' is a FUJITSU ScanSnap iX100 scanner

なんか認識したっぽい。
sudo xsaneでスキャンしたら普通にうごいた。

○一般ユーザで動かしたい。


USBデバイスの権限の問題っぽいのでudevに書いた。
所有groupをscannerにしたけど、666なので関係ない。

 $ cat /etc/udev/rules.d/96-saned.rules
 SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", ATTR{idProduct}=="13f4", MODE="0666",GROUP="scanner"

(scannerグループはsaneを入れた時に作られたのかもしれないが、
ユーザをscannerグループに入れても何の影響もなさげ。
何のためのグループなのか?)

○スキャナソフト


・xsane

問題外レベルで使いにくい。

・simple-scan

名前の通りsimple、手動だがトリミングできる。

・gscan2pdf

余白を自動トリミングしたりできる。(完璧ではない)
色々パラメータをいじればなんとか使い物になるかも。
たまにバグって止まる。なんか遅い。

○結果

苦労してlinuxで動かしたけど連続で何枚も取るなら
virtualbox立ち上げてwindowsからやったほうが良い。という結論になった。
wineでwifi接続で動けばいいんだけど、wifiで認識させるときにUSB繋がないと登録できないみたい。


あと、何枚も取ると疲れる。
ちょっとでかいやつ(複数枚セットできるやつ)買えばよかった。

・linuxで取ったやつ


gscan2pdfの結果。調整次第だが、windowsの3倍位のサイズ。
トリミングは3回に1回くらいうまく行く。
向きは手動で合わせる。




・windowsで取ったやつ



ScanSnap Managerで自動でこうなる。サイズも1/3くらい。さすが商品レベル。

















wineで動かそうとした続き↓

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)
ScanSnap iX100 on Ubuntu Linux 16.04 (wine)その2

追記:
ScanSnap Cloud使えば何もしなくても全て解決する