diary/Kojima

・Nexus 7とMTP(その2)

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

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

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

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

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

gmtp01.png

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

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に変換しないといけないのは面倒なので何とかしたいところ(続く).


添付ファイル: filegmtp02.png 169件 [詳細] filegmtp01.png 173件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:42