デバイスをメディアトランスポートプロトコル(MTP)ではなく大量のメディアストレージ(MMS)に強制的にマウントするにはどうすればよいですか。

デバイスをメディアトランスポートプロトコル(MTP)ではなく大量のメディアストレージ(MMS)に強制的にマウントするにはどうすればよいですか。

いろいろ使いますソニーウォークマンいつでもどこでも(ランニング、スイミング、ウォーキング、バスに乗っている間)、数多くの短いオーディオメモを録音します。

/media/$USER/WALKMAN/私はLinuxで各デバイスをMMS(バルクメディアストア)としてインストールし、/media/WALKMAN/Record/Voiceオーディオメモを含むフォルダの名前を変更して、特別なファイルを準備するスクリプトを介してオーディオメモ()を自分のハードドライブに移動しました。

数ヶ月前に新しいLinuxカーネルにアップグレードした後、WalkmanはMMSの代わりにメディアトランスポートプロトコル(MTP)デバイスとして認識されています。これにより、マウントポイントが/media/$USER/WALKMAN/同様の場所に変更されただけでなく、/run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Mediaスクリプト(またはシェル)がこの新しい場所にアクセスできなくなりました。それ以来、私は再びオーディオノートフォルダを「マウスに」移動し、名前を変更しました。

既知のMTPインターフェイス(PythonのPyMTP、mtpfsなど)を使用しても、デバイスはすでにプラグインにマウントされているため失敗します。他の多くのユーザーがAndroidデバイスのMTPについて文句を言いました。 Androidデバイスの場合、MMSからMTPへの移行は基本的に合理的です。共有するインストーラを使用してファイルにアクセスすると、Walkmanデバイスでは機能しないようです。この場合、MMSプロトコルはより簡単で高速です(最後のカーネルアップグレードまでの基本プロトコルでした)。


ノート

  1. 電話などのアクティブデバイスのファイルシステムをMTPとしてマウントすることの利点を理解した場合は、MMSモードが他のデバイス用に予約されているとします。
  2. pymtpライブラリを使ってスクリプトを再プログラムしてみましょう。より簡単な解決策があるかどうか尋ねたいです。単に怠惰なためではなく、他の人が自分の作業環境をプログラムしてパーソナライズすることを奨励することができるより簡単な解決策があることを願っています。
  3. カーネルを再コンパイルすると、解決策が出ることがあります。協会しかし、それが最も簡単な場合は驚くでしょう。
  4. 十分なスクリプトを使用してUDEVルールを設定すると、次のように問題が解決します。これそしてこれ投稿ですが、mtpデバイスとして認識されると、デバイスはマウントされていないようです(gpartedやgnome-disksにも表示されず、ファイルマネージャに一度だけ表示されます):(
  5. 私は思ったUSBマウントこれで問題は解決しますが、ウォークマンがUSBキーではなくMTPデバイスとして検出されるようです。
  6. 私の問題は、マウントポイントの変更に関するものではありません。/run/user/1003/gvfs/mtp:host=*/Storage\ Media/問題は、シェルからその場所のハードドライブへの単純なcpまたはmvが機能しないことです。フォルダまたは個々のファイルをコピー(または移動)することはサポートされていません。

    cp -r /run/user/1003/gvfs/mtp:host=*/Storage\ Media/Record/Voice ~/Unison/Boxes/MyBoxes/AudioNotesToProcess/2014-12-28-09-17
    cp: cannot open ‘/run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C016%5D/Storage Media/Record/Voice/VR0001.WAV’ for reading: Operation not supported
    cp: cannot open ‘/run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C016%5D/Storage Media/Record/Voice/VR0002.WAV’ for reading: Operation not supported
    

    `

  7. デバイスを接続した後、dmesgの出力は次のようになります。

    [  217.097691] usb 2-1: new high-speed USB device number 6 using xhci_hcd
    [  217.114176] usb 2-1: New USB device found, idVendor=054c, idProduct=059a
    [  217.114186] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=8
    [  217.114192] usb 2-1: Product: WALKMAN
    [  217.114197] usb 2-1: Manufacturer: SONY
    [  217.114201] usb 2-1: SerialNumber: 0E4A0C57283357
    [  217.134426] usb-storage 2-1:1.0: USB Mass Storage device detected
    [  217.134471] scsi4 : usb-storage 2-1:1.0
    [  217.134551] usbcore: registered new interface driver usb-storage
    
  8. 「mount」の出力は、デバイスをマウントする前後に変更されません。次のように:

    mount
    /dev/sda7 on / type ext4 (rw,errors=remount-ro)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    none on /sys/fs/cgroup type tmpfs (rw)
    none on /sys/fs/fuse/connections type fusectl (rw)
    none on /sys/kernel/debug type debugfs (rw)
    none on /sys/kernel/security type securityfs (rw)
    udev on /dev type devtmpfs (rw,mode=0755)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
    tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
    none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
    none on /run/shm type tmpfs (rw,nosuid,nodev)
    none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
    none on /sys/fs/pstore type pstore (rw)
    binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
    systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
    gvfsd-fuse on /run/user/1003/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=jbarbay)
    

ベストアンサー1

変更を永久に適用する方法が見つかりませんでしたが、少なくとも手動で実行できる方法はあります。ドライバーの変更:

私のソニーウォークマンを例に挙げましょう。

  • 接続し、以下を使用してベンダーと製品IDを見つけますlsusb

    # lsusb 
    Bus 001 Device 003: ID 0402:7675 ALi Corp. 
    Bus 001 Device 025: ID 054c:04be Sony Corp. 
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ...
    

    -> したがって、この場合:054c 04be

  • 次のコマンドを使用して usb_storage に切り替えます。

    # mtp_switch 054c 04be
    

自動的にインストールする必要があります(少なくともUbuntuでは)。


mtp_switchスクリプト:

#!/bin/bash

usage()
{
    echo "Usage: mtp_switch vendor_id product_id"
    echo "  switch usb device driver from mtp to usb storage."
    exit 1
}

[ $# = "2" ] || usage

vendor="$1"
product="$2"

die()
{
    echo "$@"
    exit 1
}

find_bus_id()
{
    cd /sys/bus/usb/devices/
    for f in *:* ; do
    if grep -qi "^usb:v${vendor}p${product}" "$f/modalias" 2>/dev/null; then
        echo $f
        return
    fi
    done
}

driver()
{
    readlink "/sys/bus/usb/devices/$bus_id/driver"
}

bus_id=`find_bus_id`
[ -n "$bus_id" ]         || die "couldn't find device"
driver | grep -q 'usbfs' || die "device's driver is not mtp"

cd "/sys/bus/usb/drivers"
echo -n "Unbinding mtp driver ..."
while driver | grep -q usbfs; do
    echo -n "$bus_id" > usbfs/unbind
    sleep 0.5
done
echo ""

echo -n "$bus_id" > usb-storage/bind
echo "Done."

おすすめ記事