[[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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS