如何强制将设备安装为大容量媒体存储 (MMS) 而不是媒体传输协议 (MTP)?

Jer*_*emy 7 mount mtp

我使用各种索尼随身听随时随地录制大量简短的音频笔记(跑步、游泳、步行或乘公共汽车时)。

我曾经将每个设备作为大容量媒体存储 (MMS) 安装到/media/$USER/WALKMAN/linux 下,并/media/WALKMAN/Record/Voice通过脚本将音频笔记 (in )移动到我的硬盘驱动器,该脚本通过重命名包含音频笔记的文件夹来准备特殊的处理顺序。

自从几个月前升级到新的 linux 内核以来,随身听被认为是媒体传输协议 (MTP) 设备而不是 MMS。这不仅将安装点从 更改为/media/$USER/WALKMAN/类似/run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Media,而且脚本(或 shell)无法访问这个新位置:从那时起,我一直在“通过鼠标”移动和重命名音频笔记的文件夹。

即使使用已知的 MTP 接口(例如 Python 中的 PyMTP,mtpfs)也会失败,因为设备在插入时已经安装。许多其他用户抱怨他们的 android 设备的 MTP。从 MMS 到 MTP 的转变在很大程度上对 Android 设备来说是合理的,因为那些与安装机器共享对其文件的访问权限,我认为它不适合随身听设备。在这种情况下,MMS 协议更简单、更快(并且在上次内核升级之前是默认值)。


笔记

  1. 如果我了解将手机等有源设备的文件系统安装为 MTP 的优势,我会假设其他设备会保留 MMS 模式(所以我假设我错过了一点?)。
  2. 我将设法使用 pymtp 库重新编程我的脚本:如果有更简单的解决方案,我会在这里询问。我想要一个更简单的解决方案,不仅是出于懒惰,还因为它会鼓励其他人对他们的工作环境进行编程和个性化?
  3. 重新编译内核可能会产生一个解决方案链接,但如果它是最简单的,我会感到惊讶。
  4. 根据thisthis帖子设置UDEV规则(使用足够的脚本)应该已经解决了问题,但是当设备被识别为mtp时似乎甚至没有安装该设备(gparted和gnome-disks都没有显示它甚至一旦在文件管理器中可见):(
  5. 我认为usbmount会解决我的问题,但我再次认为随身听没有被检测为 USB 密钥,而是作为 MTP 设备......
  6. 我的问题不在于安装点的变化:我确实在/run/user/1003/gvfs/mtp:host=*/Storage\ Media/. 问题是 shell 中从这个位置到我的硬盘驱动器的简单 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
    
    Run Code Online (Sandbox Code Playgroud)

    `

  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
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)

XTL*_*XTL 0

我不熟悉该设备,但这里有一些想法:

USB-modeswitch 能否将设备转回大容量存储模式?

有多种 mtp fusion 文件系统。也许它们会比 gvfs 更兼容。