Как заставить устройства с поддержкой MTP работать с Ubuntu?

С 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.0Device 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 interfaceLIBMTP libusb: Attempt to reset devicemtp-folders: Successfully connectedFriendly 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 unavailableOK.

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

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

Связанный с этим вопрос: Есть ли какие-либо планы по улучшению поддержки mtp в будущих версиях Ubuntu?

Для устранения неполадок см. этот ответ.


Для меня это была проблема отсутствия последних libmtp файлы в моей системе. Итак, я устранил проблему и сделал эта статья предназначена для того, чтобы помочь другим.

Краткое описание ссылки: Там была ошибка в libmtp поставляется в комплекте со старыми версиями Ubuntu. Эта ошибка уже была исправлена в последний источник от libmtp.

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

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

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

Не впадайте в замешательство

Произошла некоторая путаница, давайте попробуем все прояснить:

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

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

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

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

  • Насколько я знаю, вам также не нужен ПРЕДОХРАНИТЕЛЬ или настройка параметров, связанных с ПРЕДОХРАНИТЕЛЕМ.

Устранение неполадок

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

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

    showing device in nautilus in locked and unlocked state

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

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

    error message that might pop up when connecting

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

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

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

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

    # SONY Xperia Z2 MTPATTR{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 в nautilus. (Здесь устройство по-прежнему работает не безупречно, но с помощью mtp-detect помогает.)

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

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

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

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

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

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

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

      Вот ссылки на пакеты по состоянию на 2014/02/13: libmtp-общий, libmtp-среда выполнения, libmtp9, mtp-инструменты

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

Вы пробовали Билал Ахтар предложение на omgubuntu?

Подключение вашего телефона или планшета Android к Ubuntu с помощью MTPFS

  1. Установка

    Во-первых, установите необходимые инструменты с помощью sudo apt-get install mtp-tools mtpfs

    Подключите свой Galaxy Nexus к компьютеру. На вашем телефоне откройте панель уведомлений и нажмите "Тип подключения USB". Убедитесь, что выбран параметр MTP.

    image showing Android USB connection settings

    Затем выполните следующие команды:

    mtp-detect | grep idVendormtp-detect | grep idProduct

    Вы получите результат, подобный этому:enter image description here

    Теперь выполните следующие команды:

    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 restartsudo mkdir /media/GalaxyNexussudo chmod a+rwx /media/GalaxyNexussudo adduser $USER fuse

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

    gksu gedit /etc/fuse.conf

    В окне Gedit удалите # в начале последней строки (той, которая начинается с #user_allow_other) вот так:

    enter image description here

    Ты почти закончил! Теперь перезагрузите компьютер, а затем выполните следующие три команды:

    echo "alias android-connect=\"mtpfs -o allow_other /media/GalaxyNexus\"" >> ~/.bashrcecho "alias android-disconnect=\"fusermount -u /media/GalaxyNexus\"" >> ~/.bashrcsource ~/.bashrc
  2. Использование

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

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

    screenshot of nautilus displaying phone contents

    Чтобы безопасно извлечь телефон, просто запустите android-disconnect.

  3. Вывод

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

    Эти две команды не потребует прав суперпользователя бежать. Все пользователи, входящие в группу пользователей fuse, должны иметь возможность запускать эти команды без root-доступа.

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

Все программы, основанные на libmtp похоже, все еще есть проблемы с Galaxy Nexus (начиная с libmtp 1.1.3). Программы, основанные на gphoto2 работай на меня.

Лично я использую gphotofs, доступный в одноименном пакете.

Воспользуйся gphotofs ~/mymountpoint чтобы смонтировать, затем fusermount -u ~/mymountpoint чтобы размонтировать, когда вы закончите.

Установите следующее и перезагрузитесь:

sudo apt updatesudo apt install android-tools-adb gvfs-backends go-mtpfs jmtpfs gmtp  libgoogle-glog0v5 libmtp-common libmtp-dbg libmtp-dev libmtp-runtime libmtp9 gmtp jmtpfs mtp-tools python-pymtp

В качестве первого шага я бы установил 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), и правила перезагрузки или перезапуска.

Просто небольшое обходное решение: подключите свой телефон на базе ICS к старому доброму накопителю http://forum.xda-developers.com/showthread.php?t=1556367

adb install UMS1.0.apk

Я не думаю, что это Samsung … и я думаю, что это Android. Мое устройство с питанием от Honeycomb работает точно так же, где вы должны использовать только MTP. Я думаю, что именно так будут выглядеть все устройства Android после версии 2.3.