[[diary/Kojima]]
・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のような機能を持たない通常のファイルマネージャでも操作できる。
#ref("jmtpfs.png")
しばらく試した感じでは、ファイルを異なるディレクトリに移動させるような
処理はPC側のファイルマネージャからはうまく行かないようだけど、
データの転送と削除は問題なさそうなので、これでほぼ必要な機能は使えそうだ。
# Nexus 7側でファイルマネージャを使えばファイルの移動は問題ないので、MTPスタックレベルの問題っぽい気がする。
fuseはあまり真面目に使ったこと無かったので、
その便利さが分かったのが今回の最大の収穫かも(w