Получение устройств с поддержкой MTP для работы с Ubuntu?

69

Начиная с Ubuntu 13.04, доступ к внешним устройствам через MTP должен работать "из коробки" через модуль GVFS-MTP.

Хотя этот вопрос касается Galaxy Nexus, также поддерживаются другие устройства Android, а также Windows Phone и медиаплееры с поддержкой MTP .

Для устранения неисправностей см. Этот ответ .


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

  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-newfolder без повторного подключения устройства, я получаю следующий вывод:

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.

Shannon_VanWagner
источник
1
Эта проблема, похоже, исправлена ​​в пакетах для Ubuntu 12.04, поэтому их можно использовать, если вы достаточно смелы, чтобы сделать это. Я взял их с launchpad.net/ubuntu/+source/libmtp/1.1.1-1 и создал пакеты для системы (и то же самое для gmtp)
Тату Лахтела
@Shannon. Благодарю. Это лучшее решение. Жаль, что я нашел это первым.
MountainX
2
rhythmbox по-прежнему зависает и выдает ошибки (LIBMTP_Send_Represenlative_Sample (): не удалось получить информацию об объекте.) при попытке доступа к нексусу, а nautilus выдает: Невозможно смонтировать Galaxy Nexus; Ошибка инициализации камеры: -60: не удалось заблокировать устройство. Пу.
оспинатор
Было бы неплохо обновить инструкцию, чтобы получить последний 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 для запуска. Все пользователи, которые являются членами группы пользователей fuse, должны иметь возможность запускать эти команды без прав root.

    Это оно! Вы успешно подключили свой телефон Ice Cream Sandwich к компьютеру Ubuntu. Процесс может быть долгим для новичка, но я уверен, что кто-то придет и создаст графический интерфейс для всего этого, чтобы все прошло гладко. :)

desgua
источник
Да, уже пробовал большинство способов использования mtpfs-tools. Как узнал Шеннон, это явно ошибка в libmtp.
Лев
Это работает, но у меня есть несколько вопросов. 1. Что делает эта конфигурация udev, почему она не работает без нее? 2. По какой магии он знает, какое устройство монтировать, когда вы это делаете mtpfs, или он просто поддерживает только 1 подключенное устройство одновременно?
Барт ван Хейкелом
Также при копировании большого файла (с помощью Nautilus) он будет копироваться очень быстро (50 МБ / с), но за это время ничего не копирует. Только когда индикатор выполнения достигает 100%, он запускает реальную копию (и интерфейс зависает). Может быть, какая-то опция буфера может быть отключена?
Барт ван Хейкелом
К сожалению, я не знаю ответы, которые вы хотите. Мне жаль.
Desgua
Сделал все это, но получил это сообщение при попытке android-connect: fusermount: не удалось открыть /etc/fuse.conf: разрешение запрещено fusermount: опция allow_other разрешена, только если 'user_allow_other' установлен в /etc/fuse.conf даже хотя я отредактировал /etc/fuse.conf в соответствии с инструкциями.
Дмитрий Шведов
21

Подключение устройств через MTP с GVFS

Начиная с Ubuntu 13.04, доступ к устройствам с поддержкой MTP работает «из коробки» через бэкэнд GVFS . Пожалуйста, посмотрите, есть ли планы улучшить поддержку mtp в будущих выпусках Ubuntu? для инструкций по установке до 13.04.

Это решение должно работать на всех устройствах Android, обеспечивающих функциональность MTP, и, вероятно, на всех устройствах, отличных от Android с функциями MTP, таких как телефоны Windows и портативные медиаплееры .

Не путайся

Была некоторая путаница, давайте попробуем прояснить ситуацию:

  • Вам не нужно делать ничего, что может аннулировать вашу гарантию!

    • Вам не нужно рутировать ваше устройство.
    • Вам не нужно разблокировать загрузчик. (Вы можете найти инструкции для Android ее е .)

    Разблокировка относится только к экрану блокировки операционной системы в этом ответе.

  • Вам не нужно настраивать доступ разработчика к вашему устройству, такому как ADB, fastboot или что-то подобное через определенные правила udev. (Вы можете найти инструкции для Android в разделе Настройки USB Access ее е или ее е .)

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

Проблемы с устранением неполадок

  1. Я не могу поместить файлы на устройство.

    Ваше устройство должно быть разблокировано для доступа к хранилищу устройства с Ubuntu через MTP.

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

  2. Я получаю сообщение об ошибке, что устройство не может быть подключено.

    Если вы получили следующее сообщение об ошибке, попробуйте подключить устройство один раз .

    сообщение об ошибке, которое может появиться при подключении

    Если сообщение об ошибке появляется снова, откройте новое окно nautilus из панели запуска (предпочтительно щелкнув значок устройства) и, возможно, закройте текущее окно nautilus. Возможно связано: Как создать правила udev для отключения одного из устройств Android?

  3. Проверьте, есть ли правила udev для вашего устройства

    Откройте терминал и введите lsusb. Найдите ваше устройство на выходе и запишите идентификатор (например 0fce:01b1). Первая часть - это идентификатор поставщика, а последняя часть - идентификатор продукта.

    Откройте соответствующий файл правил mtp udev с помощью команды nano /lib/udev/rules.d/69-libmtp.rulesseach для идентификатора вашего продукта (используйте 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-common ), чтобы включить ваше устройство в будущие версии, если это сработало для вас.

  4. Я до сих пор не могу подключиться

    Ваше устройство либо не поддерживается базовым устройством, libmtpлибо вы можете столкнуться с той же проблемой, что и у меня с моим Lumia 620, пожалуйста, следуйте обходному пути (шаги по воспроизведению), который я опубликовал в LP # 1247572: Nokia Lumia 620 (WP8) не удается надежно установить с помощью гвфс-мтп в наутилус . (Устройство все еще не работает безупречно, но с помощью mtp-detectподсказок.)

    Вам следует поискать в устройстве отслеживания ошибок libmtp ваше устройство и следовать инструкциям для новых устройств на странице проекта, чтобы открыть отчет об ошибках.

  5. Система отслеживания ошибок отображает мое устройство как поддерживаемое, но оно все равно не будет работать

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

    Обновленный список всех версий libmtp, доступных через официальные каналы программного обеспечения Ubuntu и частные PPA, можно найти здесь (не забудьте расширить другие версии libmtp в ненадежных архивах ). По состоянию на 2014/02/13 этот PPA от Matthieu Baerts предлагает последний пакет libmtp, доступный для Ubuntu.

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

    Пожалуйста, ознакомьтесь с PPA и их рисками, прежде чем двигаться дальше. Пожалуйста, прочитайте параграф ниже о восстановлении ваших оригинальных пакетов, прежде чем выполнять следующие шаги:

    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в папку загрузки и убедитесь, что другие файлы deb отсутствуют:

      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, и перезагрузите систему. Все должно вернуться к нормальной жизни сейчас.

LiveWireBT
источник
1
+1 за «Не
путайся
Работал для моего планшета Samsung Galaxy с Android 4.1.2, но я не могу редактировать файлы на ходу. У тебя тоже есть решение?
Весног
«Некоторые руководства предлагают добавить правила udev в файл с именем 51-android.rules. Они не для MTP, ...» Вы потеряли доверие, когда сказали это. Правила в udev / rules.d / полностью гибкие. 51-android-rules - это совершенно подходящее место для них. Вы могли бы так же разумно поместить правило в 52 правила телефона
Auspex
@Auspex Строка могла бы быть написана лучше, но вместо того, чтобы жаловаться, вы могли бы сделать это (для этого потребовалось бы прочитать и понять весь пост) или дать лучший ответ. Глядя на ваш профиль, я предполагаю, что вы знаете, как должны работать сайты SE. Как вы (неправильно) управляете вашими файлами, /etcзависит только от вас. Как объяснено выше, в идеале все правила udev должны быть предоставлены ootb. Если нет, нужно сообщить об ошибке, чтобы включить отсутствующее правило /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для размонтирования, когда вы закончите.

bseibold
источник
Просто обновился до 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
mchid
источник
И да, этот ответ относится также к «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) и перезагрузить правила или перезапустить.

Ferroao
источник
-1

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

adb install UMS1.0.apk
jflaflamme
источник
1
Хотя это хорошее решение для некоторых телефонов, оно работает, только если у телефона есть отдельная SD-карта. По отношению к первоначальному вопросу это не будет работать с Galaxy Nexus.
обложка
Даже с отдельной SD-картой, я не думаю, что монтирование в качестве запоминающего устройства является опцией в новых версиях Android. Хотя «где-то всегда есть задняя дверь», поэтому я не буду заходить так далеко, чтобы сказать, что это невозможно.
mchid
Это было 4 года назад;)
jflaflamme