[[diary/Kojima]]

・Nexus 7とMTP(その2)

MTP自体はLinux上でもlibmtpで対応しているようだけど,
Plamo-5.0でこのライブラリをリンクしているのはvlcとamarokぐらい.

これらを使ってファイルの転送ができるとは思えないので,
もう少しMTP回りを調べてみたところ,GNOMEならNautilusがlibmtpを使えるようで,
KDEならばkio-slave-mtpというのが次のバージョンでマージされるそうな.

どっちも今の問題の解決には使えないなぁ,,
と調査を続けたところ,
[[gMTP:http://gmtp.sourceforge.net/]] というのを見つけた.

説明を読んでみると,GTKベースのMTPメディアプレイヤークライアント,
ということで,元々はSolaris用に開発されたソフトウェアらしい.

ざっくりとビルド,インストールして起動してみると,
とりあえずNexus 7と接続して,
相手のディレクトリ構成とかは拾ってこれる.

#ref("gmtp01.png")

「ほほう,,」と思って,適当なディレクトリに移動して,
「Add(+)」コマンドを使ってファイルを転送してみたところ,
英語のファイル名は問題なく送れるものの,
日本語のファイル名はprogress barのレベルから文字化けしていて,
処理が進まない.
多分,文字コードがらみの問題だろうなぁ,,と,
日本語のファイル名をUTF8に変換してハードリンクを張ってやると問題なく転送できる.

#ref("gmtp02.png")

とりあえず,昔々にNetatalkとsambaでファイル共有してた時みたく,
転送したい日本語ファイル名をUTF8に変換して,
同じディレクトリにUTF8/ なディレクトリを作って,
UTF8なファイル名のリンクを作る,
みたいなPythonのスクリプトを書いてごまかすことにした.

 #! /usr/bin/python
 # -*- coding: euc-jp -*-;
 
 import getopt, sys, os
 
 def make_file_link(name):
     inner = name.decode('euc-jp')
     utf8 = inner.encode('utf8')
     # print utf8
     #print("utf8 name:{0}".format(utf8))
     if os.path.isdir("UTF8") == True:
         if os.path.exists("UTF8/" + utf8) == True:
             print("UTF8 name {0} is already exists".format(utf8))
         else:
             os.link(name, "UTF8/" + utf8)
     else:
         os.mkdir("UTF8")
         os.link(name, "UTF8/" + utf8)
         
 def make_directory_link(name):
     files = os.listdir(name)
     if os.path.isdir(name + "/UTF8") == True:
         for i in files:
             inner = i.decode('euc-jp')
             utf8 = inner.encode('utf8')
             if os.path.exists("UTF8/" + utf8) == True:
                 print("UTF8 name {0} is already exists".format(utf8))
             else:
                 print i
                 os.link(i, "UTF8/" + utf8)
     else:
         os.mkdir("UTF8")
         for i in files:
             inner = i.decode('euc-jp')
             utf8 = inner.encode('utf8')
             os.link(i, "UTF8/" + utf8)
 
 def main():
     for item in sys.argv[1:]:
         if os.path.exists(item) == True:
             if os.path.isfile(item) == True:
                 print("{0} is file".format(item))
                 make_file_link(item)
             elif os.path.isdir(item) == True:
                 print("{0} is directory".format(item))
                 make_directory_link(item)
             else:
                 print("{0} is not file/directory".format(item))
         else:
             print("{0} is not real file/directory".format(item))
 
 if __name__ == "__main__":
     dry_run = False
     main()
 
このコードは,引数に日本語のファイル名を指定すると,
同じディレクトリに UTF8/ というディレクトリを作って,
そこにそのファイル名をUTF8で収める,というだけのもの.
とりあえずこれで日本語のファイル名もNexus 7に送れるようにはなったが,
いちいちUTF8に変換しないといけないのは面倒なので何とかしたいところ(続く).
- ここでは文字コードの問題に限定して書いているけど、実のところ、gMTPとNexus 7の接続はかなり不安定で、それぞれの操作にずいぶん待たされたり、一度Disconnectすると、いったんUSBケーブルを抜き挿ししてやらないと、Re-Connectできない、といった問題もある。一応、このあたりの問題はREADMEファイルにも解説してあるのだけど、最初にMTPプロトコルを使ったWMPにdisconnect処理が無かったために、世の中のMTPクライアント側でdisconnect処理がきちんと実装されていないそうな。とりあえず抜き挿しし直せば初期化するので何とかなるのだけど、MTPというプロトコル自体がまだまだ洗練されていないなぁ、、という印象。 -- [[kojima]] &new{2013-01-10 (木) 17:44:39};

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