Làm cách nào để buộc một thiết bị được gắn kết là Bộ lưu trữ đa phương tiện (MMS) thay vì Giao thức truyền phương tiện (MTP)?


7

Tôi sử dụng nhiều Sony Walkmans để ghi lại vô số thính phòng ngắn khi di chuyển (trong khi chạy, bơi hoặc đơn giản là đi bộ hoặc đi xe buýt).

Tôi đã từng gắn từng thiết bị dưới dạng Mass Media Storage (MMS) vào /media/$USER/WALKMAN/linux và để di chuyển các audionote (trong /media/WALKMAN/Record/Voice) vào ổ cứng của mình thông qua một tập lệnh, chuẩn bị một thứ tự đặc biệt để xử lý bằng cách đổi tên các thư mục chứa audionote.

Kể từ khi nâng cấp lên kernel linux mới vài tháng trước, walkman được công nhận là thiết bị Giao thức truyền tải phương tiện (MTP) thay vì MMS. Điều này không chỉ thay đổi điểm gắn kết /media/$USER/WALKMAN/thành một cái gì đó giống như /run/user/1003/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Media, mà các tập lệnh (cũng không phải vỏ) không thể truy cập vị trí mới này: Tôi đã quay lại để di chuyển và đổi tên các thư mục của audionote "bằng chuột" kể từ đó.

Ngay cả khi sử dụng các giao diện MTP đã biết (ví dụ PyMTP trong Python, mtpfs) đều không thành công, vì thiết bị đã được gắn vào lúc chèn. Nhiều người dùng khác đã phàn nàn về MTP cho thiết bị Android của họ. Việc chuyển từ MMS sang MTP phần lớn là hợp lý cho các thiết bị Android vì những người này đang chia sẻ quyền truy cập vào tệp của họ với máy lắp, tôi không thấy hợp lý cho các thiết bị walkman. Giao thức MMS đơn giản và nhanh hơn trong trường hợp này (và là mặc định cho đến lần nâng cấp kernel cuối cùng).


Ghi chú

  1. Nếu tôi hiểu lợi thế của việc gắn hệ thống tệp của các thiết bị hoạt động như điện thoại di động như MTP, tôi sẽ cho rằng chế độ MMS sẽ được giữ cho các thiết bị khác (vì vậy tôi cho rằng tôi đã bỏ lỡ một điểm?).
  2. Tôi sẽ quản lý để lập trình lại tập lệnh của mình bằng thư viện pymtp: Tôi đang hỏi ở đây trong trường hợp có một giải pháp đơn giản hơn. Tôi muốn một giải pháp đơn giản hơn để tồn tại không chỉ vì sự lười biếng, mà bởi vì nó sẽ khuyến khích người khác lập trình và cá nhân hóa môi trường làm việc của họ?
  3. Biên dịch lại kernel có thể mang lại một liên kết giải pháp , nhưng tôi sẽ ngạc nhiên nếu đó là liên kết đơn giản nhất có thể.
  4. Thiết lập quy tắc UDEV (với các tập lệnh đầy đủ) sẽ giải quyết được vấn đề theo điều này và bài đăng này , nhưng có vẻ như thiết bị thậm chí không được gắn kết khi nó được nhận dạng là một mtp (cả đĩa gparted và gnome đều không hiển thị một lần hiển thị trong trình quản lý tệp) :(
  5. Tôi nghĩ rằng usbmount sẽ giải quyết vấn đề của tôi, nhưng một lần nữa tôi nghĩ rằng walkman không được phát hiện dưới dạng khóa USB mà là một thiết bị MTP ....
  6. Vấn đề của tôi KHÔNG phải là với sự thay đổi ở điểm lắp: Tôi đã tìm thấy điểm lắp mới /run/user/1003/gvfs/mtp:host=*/Storage\ Media/. Vấn đề là một cp hoặc mv đơn giản trong một vỏ từ vị trí này vào ổ cứng của tôi không hoạt động: Sao chép (hoặc di chuyển) thư mục hoặc các tệp riêng lẻ không được hỗ trợ:

    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. Đầu ra của dmesg sau khi lắp thiết bị là:

    [  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. Đầu ra của "mount" không thay đổi giữa trước và sau khi lắp thiết bị. Nó là như sau:

    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)
    

Điều này giải thích cho Operation not supportedlỗi này, nhưng giải pháp chỉ dành cho Android - Askubfox.com/questions/284762/ Khăn
Graeme

Bạn có thể cho biết phiên bản kernel nào gây ra sự cố không? Nó có thể làm cho nó dễ dàng hơn để theo dõi. Nếu bạn đang sử dụng Ubuntu / Debian, bạn có thể xem /var/log/apt/history.loghoặc /var/log/apt/history.x.gztìm những cái cũ hơn.
Graeme

2
Bạn có thể thêm đầu ra mountkhi thiết bị được gắn không? Điều này sẽ hiển thị các tập tin thiết bị và các tùy chọn gắn kết.
Graeme

@Graeme: Cảm ơn con trỏ, nó cho tôi thêm một lý do để gắn walkman trong MMS. Hạt nhân được chỉ định bởi "uname -r" là 3.13.0-24 chung. Đầu ra của "mount" không thay đổi trước và sau khi chèn walkman: Tôi phát hiện ra rằng tôi có thể "ngắt kết nối" walkman khỏi thiết bị đầu cuối thông qua lệnh 'gvfs-mount -u "mtp: // [usb: 002.007]" '(và sao chép tệp qua gvfs-copy), nhưng điều tôi thực sự muốn là tự động hóa nó dưới dạng MMS chứ không phải MTP.
Jeremy

Liệu kernel tạo ra một thiết bị khối cho walkman? Đầu ra của dmesg | tail -20chỉ sau khi walkman được cắm là gì?
Graeme

Câu trả lời:


2

Chưa tìm được cách nào để thay đổi vĩnh viễn, nhưng ít nhất có một cách để thay đổi trình điều khiển theo cách thủ công :

Ví dụ với máy bộ đàm sony của tôi:

  • Cắm nó vào và tìm ra id nhà cung cấp và sản phẩm của nó với 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
    ...
    

    -> vì vậy trong trường hợp này : 054c 04be.

  • Chuyển nó sang usb_st Storage với:

    # mtp_switch 054c 04be
    

Nó sẽ được gắn tự động (ít nhất là trên Ubuntu)


mtp_switch kịch bản:

#!/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."

Tôi đã thử điều này trên Debian 10 (Buster, hiện đang thử nghiệm). Nó dường như bị treo tại "Unbinding trình điều khiển mtp ...".
danuker

0

Tôi không quen thuộc với thiết bị nhưng đây là một vài ý tưởng:

USB-modewitch có thể xử lý để biến thiết bị trở lại chế độ lưu trữ lớn không?

Có một số hệ thống tập tin cầu chì mtp. Có lẽ chúng sẽ tương thích hơn gvfs.


Sau khi khám phá nhiều hơn, tôi nghĩ rằng vấn đề là một cái gì đó đang gắn walkman không đúng cách. Tôi đã chỉnh sửa org.gnome.deskptop.media trong trình soạn thảo dconf nhưng không thành công. Tôi đang thử nghiệm thêm một số quy tắc và ngoại lệ udev mà không có nhiều thành công, nhưng sẽ tiếp tục trie. Tôi sẽ xem xét các chế độ usb, cảm ơn.
Jeremy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.