・jmtpfsとfuse
たまたま jmtpfs -h すると、こんなメッセージが出てきた。
general options: -o opt,[opt...] mount options -h --help print help -V --version print version FUSE options: -d -o debug enable debug output (implies -f) -f foreground operation -s disable multi-threaded operation -o allow_other allow access to other users -o allow_root allow access to root -o auto_unmount auto unmount on process termination -o nonempty allow mounts over non-empty file/dir -o default_permissions enable permission checking by kernel -o fsname=NAME set filesystem name -o subtype=NAME set filesystem type -o large_read issue large read requests (2.4 only) -o max_read=N set maximum size of read requests -o hard_remove immediate removal (don't hide files) -o use_ino let filesystem set inode numbers -o readdir_ino try to fill in d_ino in readdir -o direct_io use direct I/O -o kernel_cache cache files in kernel -o [no]auto_cache enable caching based on modification times (off) -o umask=M set file permissions (octal) -o uid=N set file owner -o gid=N set file group -o entry_timeout=T cache timeout for names (1.0s) -o negative_timeout=T cache timeout for deleted names (0.0s) -o attr_timeout=T cache timeout for attributes (1.0s) -o ac_attr_timeout=T auto cache timeout for attributes (attr_timeout) -o noforget never forget cached inodes -o remember=T remember cached inodes for T seconds (0s) -o intr allow requests to be interrupted -o intr_signal=NUM signal to send on interrupt (10) -o modules=M1[:M2...] names of modules to push onto filesystem stack -o max_write=N set maximum size of write requests -o max_readahead=N set maximum readahead -o max_background=N set number of maximum background requests -o congestion_threshold=N set kernel's congestion threshold -o async_read perform reads asynchronously (default) -o sync_read perform reads synchronously -o atomic_o_trunc enable atomic open+truncate support -o big_writes enable larger than 4kB writes -o no_remote_lock disable remote file locking -o no_remote_flock disable remote file locking (BSD) -o no_remote_posix_lock disable remove file locking (POSIX) -o [no_]splice_write use splice to write to the fuse device -o [no_]splice_move move data while splicing to the fuse device -o [no_]splice_read use splice to read from the fuse device Module options: [iconv] -o from_code=CHARSET original encoding of file names (default: UTF-8) -o to_code=CHARSET new encoding of the file names (default: EUC-JP) [subdir] -o subdir=DIR prepend this directory to all paths (mandatory) -o [no]rellinks transform absolute symlinks to relative jmtpfs options: -l --listDevices list available mtp devices and then exit -device=<busnum>,<devnum> Device to mount. It not specified the first device found is used
これを見ると、iconvの機能を使って、 from_code、to_codeで異なるCHARSETを指定できそうな気配。
当初はどうやって -o from_code=... を指定するのか分からずに、 jmtpfs -o from_code.. とか、 fuseのモジュールをロードする時のオプション指定かとも思って、 modprobe fuse from_code=... みたいなことをやってみたがどちらもエラーになる。
さて、どうしたものか、、 とGoogleあたりで調べてみると-omodules=iconv,from_code=.. という書式になるらしい。 そう知った上で、改めて先のヘルプメッセージを見ると、確かに from_code=... は Module options: の節に書かれているし、 モジュールについては、-o modules=M1[:M2...] となっている。
なるほど、と思って、
$ jmtpfs ~/Mtp -omodules=iconv,from_code=UTF-8,to_code=EUC-JP
としてやると、~/MtpにNexus 7の内部ストレージがEUC-JPで見えるようになった。
$ ls ~/Mtp/ 内部ストレージ/
ファイルシステムレベルで文字コードを変換しているので、 FDcloneのような機能を持たない通常のファイルマネージャでも操作できる。
しばらく試した感じでは、ファイルを異なるディレクトリに移動させるような 処理はPC側のファイルマネージャからはうまく行かないようだけど、 データの転送と削除は問題なさそうなので、これでほぼ必要な機能は使えそうだ。
# Nexus 7側でファイルマネージャを使えばファイルの移動は問題ないので、MTPスタックレベルの問題っぽい気がする。
fuseはあまり真面目に使ったこと無かったので、 その便利さが分かったのが今回の最大の収穫かも(w