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

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

7 ответов

Решение

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

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

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


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

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

Вы пробовали предложение Билала Ахтара в 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. Процесс может быть долгим для новичка, но я уверен, что кто-то придет и создаст графический интерфейс для всего этого, чтобы все происходило гладко.:)

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

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

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

Не путайся

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

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

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

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

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

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

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

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

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

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

  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-common), чтобы включить ваше устройство в будущие версии, если это сработало для вас.

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

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

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

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

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

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

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

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

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

Предыдущие шаги могут показать ошибку, если вы запустите их без sudo:

libusb_open() failed!: Permission denied

Чтобы избежать использования sudo, вы должны добавить свое устройство в /etc/udev/rules.d/51-android.rules файл, как указано выше (см. описание) и перезагрузка правил или перезапуск.

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

adb install UMS1.0.apk
Другие вопросы по тегам