Wie erzwinge ich die Bereitstellung eines Geräts als Mass Media Storage (MMS) anstelle von Media Transfer Protocol (MTP)?

7

Ich benutze verschiedene Sony Walkmans , um unterwegs eine Vielzahl von kurzen Audionoten aufzunehmen (beim Laufen, Schwimmen oder einfach zu Fuß oder mit dem Bus).

Früher habe ich jedes Gerät als Mass Media Storage (MMS) /media/$USER/WALKMAN/unter Linux gemountet und die Audionoten (in /media/WALKMAN/Record/Voice) über ein Skript auf meine Festplatte verschoben , das eine spezielle Reihenfolge für die Verarbeitung vorbereitet, indem die Ordner mit den Audionoten umbenannt werden.

Seit dem Upgrade auf den neuen Linux-Kernel vor einigen Monaten werden die Walkmans als MTP-Geräte (Media Transfer Protocol) anstelle von MMS erkannt. Dies ändert nicht nur den Einhängepunkt von /media/$USER/WALKMAN/so etwas wie /run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Media, sondern Skripte (oder Shell) können nicht auf diesen neuen Speicherort zugreifen: Ich habe seitdem wieder die Ordner von Audionoten "mit der Maus" verschoben und umbenannt.

Selbst die Verwendung bekannter MTP-Schnittstellen (z. B. PyMTP in Python, mtpfs) schlägt fehl, da das Gerät bereits beim Einfügen bereitgestellt wurde. Viele andere Benutzer haben sich über MTP für ihr Android-Gerät beschwert. Der Wechsel von MMS zu MTP ist für Android-Geräte weitgehend gerechtfertigt, da diese den Zugriff auf ihre Dateien mit dem Mounting-Computer teilen. Ich finde ihn für Walkman-Geräte nicht gerechtfertigt. Das MMS-Protokoll ist in diesem Fall einfacher und schneller (und war bis zum letzten Kernel-Upgrade die Standardeinstellung).


Anmerkungen

  1. Wenn ich den Vorteil der Bereitstellung des Dateisystems aktiver Geräte wie Mobiltelefone als MTP verstanden hätte, hätte ich angenommen, dass der MMS-Modus für andere Geräte beibehalten wurde (also gehe ich davon aus, dass ich einen Punkt verpasst habe?).
  2. Ich werde es schaffen, mein Skript mithilfe der Pymtp-Bibliothek neu zu programmieren: Ich frage hier, falls es eine einfachere Lösung gibt. Ich möchte, dass eine einfachere Lösung nicht nur aus Faulheit existiert, sondern weil sie andere dazu ermutigt, ihr Arbeitsumfeld zu programmieren und zu personalisieren.
  3. Erneutes Kompilieren des Kernels könnte eine Lösung ergibt Link , aber ich würde überrascht sein , wenn es die einfachste möglich ist.
  4. Das Einrichten einer UDEV-Regel (mit geeigneten Skripten) hätte das Problem gemäß diesem und diesem Beitrag lösen sollen , aber es scheint, dass das Gerät nicht einmal gemountet ist, wenn es als MTP-Gerät erkannt wird (weder gparted noch gnome-disks zeigen es sogar an einmal im Dateimanager sichtbar) :(
  5. Ich dachte, dass usbmount mein Problem lösen würde, aber ich denke wieder, dass der Walkman nicht als USB-Stick, sondern als MTP-Gerät erkannt wird.
  6. Mein Problem ist NICHT die Änderung des Montagepunkts: Ich habe den neuen Montagepunkt in gefunden /run/user/1003/gvfs/mtp:host=*/Storage\ Media/. Das Problem ist, dass ein einfaches cp oder mv in einer Shell von diesem Speicherort auf meine Festplatte nicht funktioniert: Das Kopieren (oder Verschieben) des Ordners oder einzelner Dateien wird nicht unterstützt:

    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. Die Ausgabe von dmesg nach dem Einsetzen des Geräts lautet:

    [  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. Die Ausgabe von "mount" ändert sich nicht zwischen vor und nach der Montage des Geräts. Es ist wie folgt:

    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)
    
Jeremy
quelle
Dies erklärt den Operation not supportedFehler, aber die Lösung ist nur für Android - askubuntu.com/questions/284762/…
Graeme
Können Sie erkennen, welche Kernel-Version das Problem verursacht hat? Dies könnte das Aufspüren erleichtern. Wenn Sie mit Ubuntu / Debian arbeiten, können Sie in /var/log/apt/history.logoder /var/log/apt/history.x.gznach älteren suchen .
Graeme
2
Können Sie die Ausgabe hinzufügen, mountwenn das Gerät montiert ist? Dies sollte die Gerätedatei und die Mount-Optionen anzeigen.
Graeme
@Graeme: Danke für den Zeiger, es gibt mir einen weiteren Grund, den Walkman in MMS zu mounten. Der durch "uname -r" angegebene Kernel ist 3.13.0-24-generic. Die Ausgabe von "mount" ändert sich vor und nach dem Einfügen des Walkman nicht: Ich habe herausgefunden, dass ich den Walkman über den Befehl 'gvfs-mount -u "mtp: // [usb: 002,007] vom Terminal" aushängen "kann. '(und Dateien über gvfs-copy kopieren), aber ich möchte es wirklich als MMS anstatt als MTP bereitstellen.
Jeremy
Erstellt der Kernel ein Blockgerät für den Walkman? Was ist die Ausgabe dmesg | tail -20unmittelbar nach dem Einstecken des Walkman?
Graeme

Antworten:

2

Ich habe noch keine Möglichkeit gefunden, die Änderungen dauerhaft zu ändern , aber es gibt zumindest eine Möglichkeit, die Treiber manuell zu ändern :

Zum Beispiel mit meinem Sony Walkman:

  • Schließen Sie es an und finden Sie den Hersteller und die Produkt-ID heraus mit 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
    ...
    

    -> also in diesem Fall : 054c 04be.

  • Wechseln Sie zu usb_storage mit:

    # mtp_switch 054c 04be
    

Es sollte automatisch gemountet werden (zumindest auf Ubuntu)


mtp_switch Skript:

#!/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."
Zitronenqueeze
quelle
Ich habe dies auf Debian 10 (Buster, derzeit im Test) versucht. Es scheint bei "Unbinding mtp driver ..." zu hängen.
Danuker
0

Ich bin mit dem Gerät nicht vertraut, aber hier sind einige Ideen:

Könnte der USB-Modusschalter das Gerät wieder in den Massenspeichermodus versetzen?

Es gibt mehrere MTP-Sicherungsdateisysteme. Vielleicht sind sie kompatibler als gvfs.

XTL
quelle
Nach weiteren Erkundungen denke ich, dass das Problem darin besteht, dass etwas den Walkman nicht richtig montiert. Ich habe org.gnome.deskptop.media-handle im dconf-editor ohne Erfolg bearbeitet. Ich experimentiere mit dem Hinzufügen einiger udev-Regeln und Ausnahmen ohne großen Erfolg, werde aber weiterhin versuchen. Ich werde in USB-Modi-Schalter schauen, danke.
Jeremy