장치를 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

변경 사항을 영구적으로 적용할 수 있는 방법을 찾지 못했지만 적어도 수동으로 수행할 수 있는 방법은 있습니다.드라이버 변경:

내 Sony Walkman을 예로 들어보겠습니다.

  • 연결하고 다음을 사용하여 공급업체 및 제품 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
    

자동으로 설치되어야 합니다(적어도 우분투에서는).


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."

답변2

기기에 대해 잘 모르지만 다음과 같은 몇 가지 아이디어가 있습니다.

USB 모드 스위치를 사용하면 장치를 다시 대용량 저장 모드로 전환할 수 있나요?

다양한 mtp 퓨전 파일 시스템이 있습니다. 어쩌면 gvfs보다 더 호환성이 높을 수도 있습니다.

관련 정보