Як пристрої з підтримкою MTP працювати з Ubuntu?


69

Оскільки передбачається, що доступ до пам'яті Ubuntu 13.04 до зовнішніх пристроїв через MTP повинен працювати поза коробкою через модуль GVFS-MTP.

Хоча це питання про Galaxy Nexus, інших Android пристроїв, а також телефони Windows і MTP включений медіаплеєри також підтримуються .

Для усунення несправностей див. Цей відгук .


У мене виникає досить багато проблем з передачею файлів, що працюють над MTP з Galaxy Nexus. Я використовую 64-розрядний Kubuntu 11.10, і це те, що я зробив, і отримані результати:

  1. Додано правило для пристрою в /etc/udev/rules.d/51-android.rules. Правило таке і працює для adb:

    SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE="0666", OWNER="leob" #Galaxy Nexus
    
  2. Перезавантажений udev(і комп’ютер просто для переконання).

Adb працює, і всі методи для читання з пристрою через MTP, здається, працюють (я намагався монтувати з mtpfs, gmtp та безпосередньо використовувати пакет mtp-tools). Однак, коли я намагаюся записати на пристрій, я нічого не пробував.

Як приклад, біг mtp-newfolder test_dir 0 0дає такий результат:

libmtp version: 1.1.0
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
Folder creation failed.
ERROR: Could not close session!

Якщо я запускаю mtp-foldersпісля невдалого mtp-нового папки без повторного підключення пристрою, я отримую такий вихід:

Attempting to connect device(s)
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
PTP_ERROR_IO: failed to open session, trying again after resetting USB interface
LIBMTP libusb: Attempt to reset device
mtp-folders: Successfully connected
Friendly name: (NULL)
Error 1: Get Storage information failed.
Error 2: PTP Layer error 02fe: get_all_metadata_fast(): could not get proplist of all    objects.
Error 2: (Look this up in ptp.h for an explanation.)
Error 2: PTP Layer error 02fe: get_handles_recursively(): could not get object handles.
Error 2: (Look this up in ptp.h for an explanation.)
LIBMTP_Get_Storage()
: Resource temporarily unavailable
OK.

Додається в dmesg:

[ 1000.912082] usb 2-4: reset high speed USB device number 7 using ehci_hcd
[ 1001.045877] usb 2-4: usbfs: process 3166 (mtp-folders) did not claim interface 0 before use

Хтось має уявлення про те, що робити?

Редагувати:

Я також спробував режим PTP. Знову ж таки, читання працює добре, але я нічого не можу написати на пристрій.


Я не думаю, що це Samsung .... і я думаю, що це Android. Мій пристрій, що працює на сотах, є точно таким же способом, де ви повинні використовувати лише MTP. Я думаю, саме так збираються всі Android 2.3 пристрої.

Відповіді:


37

Починаючи з Ubuntu 13.04, доступ до зберігання зовнішніх пристроїв через MTP працює поза коробкою через модуль GVFS-MTP.

Пов'язане запитання: Чи планується покращити підтримку mtp у майбутніх випусках Ubuntu?

Для усунення несправностей дивіться цю відповідь .


Для мене це була проблема відсутності останніх libmtpфайлів у моїй системі. Тож я вирішив проблему і зробив цю програму, щоб допомогти іншим .

Короткий зміст посилання: У libmtpстарій версії Ubuntu виникла помилка . Ця помилка вже виправлена в останньому джерелі в libmtp.


1
Здається, виправлена ​​проблема в пакетах для Ubuntu 12.04, тому їх можна використовувати, якщо ви досить сміливі для цього. Я схопив їх із startpad.net/ubuntu/+source/libmtp/1.1.1-1 і створив пакети для системи (і те саме для gmtp)
Tatu Lahtela

@Shannon Дякую. Це найкраще рішення. Бажаю, я знайшов це першим.
MountainX

2
ритмікс все ще зависає та видає помилки (LIBMTP_Send_Representative_Sample (): не вдалося отримати інформацію про об'єкт.) при спробі отримати доступ до Nexus, і nautilus дає: Не вдається встановити Galaxy Nexus; Помилка ініціалізації камери: -60: Не вдалося заблокувати пристрій. Пу.
waspinator

Було б добре оновити інструкції, щоб отримати найновіший mtp, а не 1.1.1
Костянтин Рибников,

21

Ви пробували Білал Ахтар пропозицію на omgubuntu ?

Підключення телефону або планшета Android до Ubuntu за допомогою MTPFS

  1. Налаштування

    Спочатку встановіть необхідні інструменти за допомогою sudo apt-get install mtp-tools mtpfs

    Підключіть свій Galaxy Nexus до комп'ютера. На телефоні відкрийте висувний ящик сповіщень та натисніть «Тип з'єднання USB». Переконайтесь, що вибрано MTP.

    зображення, що показує настройки USB-з'єднання Android

    Потім запустіть ці команди:

    mtp-detect | grep idVendor
    mtp-detect | grep idProduct
    

    Ви отримаєте такий результат: введіть тут опис зображення

    Тепер запустіть ці команди:

    gksu gedit /etc/udev/rules.d/51-android.rules
    

    Вікно Gedit має відкритися. Введіть цей текст у ньому, все в один рядок :

    SUBSYSTEM=="usb", ATTR{idVendor}=="VENDORID", ATTR{idProduct}=="PRODUCTID", MODE="0666"
    

    Замініть VENDORIDтим, що idVendorви зазначили раніше. Аналогічно замініть PRODUCTIDте, що idProductви зазначили. У моєму випадку вони були 04e8і 685cвідповідно, але вони могли бути для вас різними.

    Збережіть і закрийте файл. Потім відключіть телефон і запустіть ці команди:

    sudo service udev restart
    sudo mkdir /media/GalaxyNexus
    sudo chmod a+rwx /media/GalaxyNexus
    sudo adduser $USER fuse
    

    $USERє змінною оболонки за замовчуванням і має бути користувачем, якого ви хочете додати (зазвичай ви самі). Тепер запустіть цю команду:

    gksu gedit /etc/fuse.conf
    

    У вікні Gedit видаліть #на початку останнього рядка (першого, що починається #user_allow_other) таким чином:

    введіть тут опис зображення

    Ви майже закінчили! Тепер перезавантажте комп’ютер, а потім запустіть ці три команди:

    echo "alias android-connect=\"mtpfs -o allow_other /media/GalaxyNexus\"" >> ~/.bashrc
    echo "alias android-disconnect=\"fusermount -u /media/GalaxyNexus\"" >> ~/.bashrc
    source ~/.bashrc
    
  2. Використання

    Підключіть телефон, переконайтеся, що ваш телефон використовує MTP та запустіть android-connect.

    Вуаля! Тепер ви можете переглядати вміст телефону Android за допомогою Nautilus. Просто запустіть файловий менеджер, а потім на бічній панелі натисніть GalaxyNexus, щоб переглядати вміст телефону так само, як ви робите з USB-накопичувачем. Ви також можете додавати, видаляти та змінювати файли, як і звичайна файлова система.

    скріншот nautilus, що відображає вміст телефону

    Щоб безпечно вийняти телефон, просто запустіть android-disconnect.

  3. Висновок

    Відтепер потрібно просто бігти, android-connectщоб встановити телефон, а потім android-disconnectбезпечно вийняти телефон. З усім іншим слід оброблятись автоматично. Я спробував багато способів домогтися монтажу та відключення автоматично, що відбувається при підключенні кабелю, але це було найкращим рішенням, з яким я міг придумати.

    Ці дві команди не потребують кореневих дозволів для запуску. Усі користувачі, що входять до групи користувачів запобіжників, повинні мати можливість виконувати ці команди без доступу root.

    Це воно! Ви успішно підключили ваш телефон із сендвіч-морозивом до комп'ютера Ubuntu. Для новачків цей процес може затягнутись, але я впевнений, що хтось підійде і зробить графічний інтерфейс для всього цього, щоб все пройшло без проблем. :)


Так, вже спробували більшість способів використання mtpfs-інструментів. Як з'ясувала Шеннон, це була помилка libmtp.
Лев

Це працює, але у мене є деякі питання. 1. Що робить ця конфігурація udev, чому без неї не працює? 2. За допомогою якої магії він знає, який пристрій встановити, коли ви робите mtpfs, чи просто підтримує лише 1 підключений пристрій одночасно?
Барт ван Хекелом

Також при копіюванні великого файлу (з Nautilus) він буде дуже швидко копіювати (50 Мб / с), але за цей час він нічого не копіює. Тільки коли панель прогресу досягне 100%, вона запустить справжню копію (і інтерфейс зависне). Можливо, якусь опцію буфера можна відключити?
Барт ван Хекелом

На жаль, я не знаю потрібних відповідей. Мені шкода.
десгуа

Зробив усе це, але отримання цього повідомлення при спробі підключення до android: fusermount: не вдалося відкрити /etc/fuse.conf: У дозволі відмовлено fusermount: параметр enable_other дозволений, лише якщо в /etc/fuse.conf встановлено "user_allow_other" хоча я редагував /etc/fuse.conf за інструкціями.
Дмитро Шведов

21

Підключення пристроїв через MTP з GVFS

Оскільки доступ до пам'яті Ubuntu 13.04 до пристроїв, що підтримують MTP, працює поза коробкою через сервер GVFS . Погляньте, чи є плани щодо вдосконалення підтримки mtp у майбутніх випусках Ubuntu? інструкція з монтажу до 13.04.

Це рішення має працювати для всіх пристроїв Android, що забезпечують функціональність MTP, і, ймовірно, для всіх пристроїв, що не мають Android, функціональність MTP, як-от Телефони Windows та портативні медіаплеєри .

Не плутайте

Виникла певна плутанина, спробуймо все з'ясувати:

  • Вам не потрібно робити нічого, що може втратити гарантію!

    • Вам не потрібно викорінювати пристрій.
    • Вам не потрібно розблокувати завантажувач. (Ви можете знайти інструкції для Android her e .)

    У цій відповіді розблокування просто стосується блокувального екрану операційних систем.

  • Вам не потрібно налаштовувати доступ розробника до вашого пристрою, як ADB, fastboot або щось подібне за допомогою певних правил udev. (Ви можете знайти інструкції для Android в розділі Налаштування інтерфейсу USB Access її е або її е .)

  • Наскільки я знаю, вам також не потрібні FUSE або налаштування параметрів, пов'язаних з FUSE.

Усунення неполадок

  1. Я не можу розміщувати файли на пристрої.

    Ваш пристрій має бути розблокований, щоб отримати доступ до пам’яті пристрою з Ubuntu через MTP.

    показ пристрою в nautilus у заблокованому та розблокованому стані

  2. Я отримую повідомлення про помилку, що пристрій неможливо встановити.

    Якщо ви отримаєте наведене нижче повідомлення про помилку, спробуйте підключити пристрій один раз .

    повідомлення про помилку, яке може спливати при підключенні

    Якщо повідомлення про помилку з’явиться знову, відкрийте нове вікно nautilus з панелі запуску (бажано, натиснувши на піктограму пристрою) і, ймовірно, закрийте поточне вікно nautilus. Можливо, пов'язане: Як створити правила udev для відключення одного з пристроїв Android?

  3. Перевірте, чи є правила udev для вашого пристрою

    Відкрийте термінал і введіть lsusb. Знайдіть свій пристрій у виході та запишіть ідентифікатор (наприклад 0fce:01b1). Перша частина - це ідентифікатор постачальника, остання частина - ідентифікатор товару.

    Відкрийте відповідний файл правил mtp udev з nano /lib/udev/rules.d/69-libmtp.rulesі виберіть свій ідентифікатор продукту (використовуйте Ctrl+ W). Якщо ви не можете його знайти, вам доведеться створити власну запис, /etc/udev/rules.d/69-libmtp.rulesдотримуючись наведеного нижче шаблону, і перезавантажити .

    # SONY Xperia Z2 MTP
    ATTR{idVendor}=="01b1", ATTR{idProduct}=="01b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
    

    Вам слід розглянути можливість подати помилку щодо пакету libmtp (точніше, libmtp-звичайний ), щоб ваш пристрій було включено до наступних версій, якщо це працювало для вас.

  4. Я досі не можу підключитися

    Ваш пристрій або не підтримується базовим, libmtpабо у вас може виникнути та сама проблема, що і в моєму Lumia 620, будь ласка, дотримуйтесь вказівок (кроки для відтворення), які я опублікував у LP # 1247572: Nokia Lumia 620 (WP8) не може надійно встановити через gvfs-mtp in nautilus . (Пристрій все ще не працює бездоганно, але використовує mtp-detectдовідку.)

    Ви повинні шукати помилку пошуку помилок libmtp для свого пристрою та дотримуватися вказівок щодо нових пристроїв на сторінці проекту, щоб відкрити звіт про помилку.

  5. У програмі відстеження помилок вказано мій пристрій як підтримуваний, але він все ще не працюватиме

    У деяких випадках звіт про помилку щодо вашого пристрою, можливо, вже був поданий і вирішений у більш новій версії libmtp, ніж те, з чим постачається ваш дистрибутив (наприклад, Motorola Moto G ). Якщо це так, вам доведеться або чекати, коли офіційні сховища оновлюються, або шукати оновлений PPA.

    Оновлений список усіх версій libmtp, доступних через офіційні канали програмного забезпечення Ubuntu та приватні PPA, можна знайти тут (переконайтеся, що розширити Інші версії 'libmtp' в недовірених архівах ). З 2014/02/13 цей PPA від Matthieu Baerts пропонує останній пакет libmtp, доступний для Ubuntu.

    Попередження : цей PPA містить безліч різних і, можливо, нестабільних пакетів. Я б радив не додавати його до вашої системи. Натомість ви можете завантажити пакети libmtp окремо та вручну встановити їх у вашій системі.

    Будь ласка, ознайомтеся з Угодами та їхніми ризиками, перш ніж рухатись далі. Будь ласка, прочитайте параграф нижче щодо відновлення оригінальних пакетів, перш ніж продовжувати виконувати наступні кроки:

    1. Перейдіть на сторінку з детальною інформацією про пакет PPA та розгорніть запис libmtp
    2. Завантажте наступні пакети: libmtp-common, libmtp-runtime, libmtp9, mtp-tools. Не забудьте вибрати правильну архітектуру для вашої системи (зазвичай це буде amd64).

      Ось посилання на пакунки станом на 2014/02/13: libmtp-common , libmtp-runtime , libmtp9 , mtp-tools

    3. Перейдіть до встановлення оновлених пакетів вручну з dpkg (змініть $HOME/Downloadsпапку для завантаження та переконайтесь, що немає інших файлів дебюту:

      cd "$HOME/Downloads"
      sudo dpkg -i *.deb
      
    4. Після того, як все вдало встановлено, перезавантажте комп'ютер, розблокуйте свій пристрій Android, підключіть його через USB, і це повинно з’явитися у вашому файловому менеджері.

    Це добре працювало для мене (@Glutanimate) з моїм Motorola Moto G. Оскільки я працював на Ubuntu 12.04 LTS, спочатку мені довелося встановити оновлену версію gnome-gvfs. Будь ласка, дивіться інструкції з монтажу до 13.04 вгорі для отримання додаткової інформації.

    Щоб скасувати зміни, якщо щось пішло не так або якщо пристрій досі не розпізнається, вам доведеться встановити оригінальні пакети вручну. Перейдіть до огляду джерела libmtp і знайдіть свою версію Ubuntu. Розгорніть відповідну запис та перейдіть до завантаження пакетів, як ви робили на кроці 2 раніше. Продовжуйте установку, як описано в кроці 3, і перезавантажте систему. Зараз все повинно повернутися до норми.


1
+1 для "Не
плутайся

Працював для мого планшета Samsung Galaxy з Android 4.1.2, але я не можу редагувати файли на ходу. Чи є у вас і для цього рішення?
Весног

"Деякі посібники пропонують додати правила udev до файлу під назвою 51-android.rules. Це не для MTP, ..." Ви втратили весь авторитет, сказавши про це. Правила в udev / rules.d / є абсолютно гнучкими. 51-андроїд-правила - цілком відповідне місце для них. Ви можете настільки ж розумно покласти це правило у правила 52-х телефонів
Auspex,

@Auspex Рядок міг бути написаний краще, але замість того, щоб скаржитися, ти міг би зробити це (що вимагає читання та розуміння всієї публікації) або дати кращу відповідь. Дивлячись на ваш профіль, я припускаю, що ви знаєте, як мають працювати сайти SE. Як ви (неправильно) керуєте своїми файлами /etc, повністю залежить від вас. Як було пояснено вище, в ідеалі всі правила udev повинні надаватися. Якщо ні, то слід подати помилку, щоб включити відсутнє правило /lib/.../69-libmtp.rules, тож усі будуть задоволені наступним випуском.
LiveWireBT

1
@Auspex Я не розумію, чого ви намагаєтеся досягти тут. Я повторюю: саме ви керуєте своїми файлами /etc. /lib/udev/rules.d/69-libmtp.rulesце те, що вибрали сервісні пакети, і я пропоную подати помилку на цей пакет (я оновив свою відповідь) для користувачів, які стикаються з цією проблемою. Якщо у вас все-таки є проблеми з цим, будь ласка, поговоріть з обслуговуючими особами або опублікуйте власну відповідь. Зараз я кланяюся з вашої розмови на цю тему.
LiveWireBT

5

У всіх програмах, що базуються на цьому, libmtpвсе ще виникають проблеми з Galaxy Nexus (станом на libmtp 1.1.3). Програми, засновані на gphoto2роботі для мене.

Особисто я використовую gphotofs, доступний в однойменному пакеті.

Використовуйте gphotofs ~/mymountpointдля монтажу та fusermount -u ~/mymountpointвідключення, коли закінчите.


Щойно оновлено до 12.04 і, здається, libmtp 1.1.3 не працює належним чином, як ви сказали. Доведеться дослідити це ще трохи. gphotofs працює чудово, хоча тому дякую за пропозицію!
Лев

1
Використання gphotofsзалишає мені один каталог, який порожній.
Натан Осман

4

Встановіть наступне та перезавантажте:

sudo apt-get install gvfs-backends mtpfs jmtpfs libmtp-common mtp-tools libmtp-dev libmtp-runtime libmtp9 gmtp libdbus-cpp5 libgflags2v5 libgoogle-glog0v5 libmtp-dbg libmtp-doc libmtpserver-dev libmtpserver1 libprocess-cpp3 mtp-server

І так, ця відповідь стосується також "Ubuntu 13.04 [і вище; де] доступ до сховища до зовнішніх пристроїв через MTP повинен працювати з коробки через модуль GVFS-MTP" . Тому що він просто не може бути встановлений поза коробкою. Навіть коли ваш MTP-пристрій вже якось автоматизований! (Але надаючи вам доступ лише для читання або інші проблеми.)
tanius

1
@tanius Я мушу сказати, що MTP настільки болісно повільний, що я навіть більше не використовую його. У esfile explorer є ftp-сервер, і я просто використовую curl для завантаження файлів на пристрій у моїй локальній мережі.
мчід

Ця команда вказує на джерело проблеми:The following packages have unmet dependencies: gvfs-backends : Depends: gvfs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-daemons (= 1.28.2-1ubuntu1~16.04.2) Depends: gvfs-libs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-common (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed E: Unable to correct problems, you have held broken packages.
NoBugs

1
Слід зазначити, що, коли це не вдалося, як у коментарі вище, видаліть та перевстановіть «ubuntu-desktop» та вищезазначене за допомогою sudo apt-get install --reinstall. а потім перезапустити.
NoBugs

0

В якості першого кроку я б встановив jmtpfs( sudo apt-get install jmtpfsу терміналі - Ctrl+ Alt+ T), потім створив би папку, mkdir foldernameа потім змонтував пристрій jmtpfs foldername, а потім перейшов до nautilus (Файли).

Якщо ваш пристрій не сумісний з libmtpверсією ubuntu. Вам потрібно завантажити та скласти недавню libmtp(> 1.1.12), як у: Як я можу встановити останню версію libmtp?

Ви повинні мати можливість бачити папки, які також використовуються mtp-foldersв терміналі або з графічним інтерфейсом gmtp.

Попередні кроки можуть відображати помилку, якщо ви запускаєте їх без sudo:

libusb_open() failed!: Permission denied

Щоб уникнути використання sudo, слід додати свій пристрій у /etc/udev/rules.d/51-android.rulesфайл, як зазначено вище (див. Desgua), правила перезавантаження або перезапуск.


-1

Лише невелике вирішення, підключіть свій телефон на базі ICS із старим хорошим МАССУМОВИМИ Зберіганням http://forum.xda-developers.com/showthread.php?t=1556367

adb install UMS1.0.apk

1
Хоча це гарне рішення для деяких телефонів, це працює лише у випадку, якщо телефон має окрему SD-карту. Що стосується початкового питання, це не буде працювати з Galaxy Nexus.
обкладинка

Навіть із окремою sd-карткою, я не думаю, що встановлення пристрою масового зберігання є варіантом для нових версій Android. Хоча "десь є задні двері", тому я не піду так далеко, щоб сказати, що це неможливо.
mchid

Це було 4 роки тому;)
jflaflamme
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.