Получение устройств с поддержкой MTP для работы с Ubuntu?
Начиная с Ubuntu 13.04, доступ к внешним устройствам через MTP должен работать "из коробки" через модуль GVFS-MTP.
Хотя этот вопрос касается Galaxy Nexus, также поддерживаются другие устройства Android, а также Windows Phone и медиаплееры с поддержкой MTP.
Для устранения неисправностей см. Этот ответ.
У меня довольно много проблем с передачей файлов, работающих через MTP с Galaxy Nexus. Я использую Kubuntu 11.10 64-bit, и это то, что я сделал, и результаты, которые я получаю:
Добавлено правило для устройства в
/etc/udev/rules.d/51-android.rules
, Правило следующее и работает дляadb
:SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE="0666", OWNER="leob" #Galaxy Nexus
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
Настроить
Сначала установите необходимые инструменты с помощью
sudo apt-get install mtp-tools mtpfs
Подключите ваш Galaxy Nexus к вашему компьютеру. На телефоне откройте ящик уведомлений и нажмите "Тип USB-соединения". Убедитесь, что выбран MTP.
Затем выполните эти команды:
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
использование
Подключите телефон, убедитесь, что ваш телефон использует MTP и запустите
android-connect
,Вуаля! Теперь вы можете просматривать содержимое телефона Android с помощью Nautilus. Просто запустите файловый менеджер, а затем в боковой панели нажмите GalaxyNexus, чтобы просмотреть содержимое телефона, как если бы вы использовали USB-флешку. Вы также можете добавлять, удалять и изменять файлы, как обычная файловая система.
Чтобы безопасно удалить телефон, просто запустите
android-disconnect
,Заключение
Отныне вам просто нужно бежать
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.
Проблемы с устранением неполадок
Я не могу поместить файлы на устройство.
Ваше устройство должно бытьразблокировано для доступа к хранилищу устройства с Ubuntu через MTP.
Я получаю сообщение об ошибке, что устройство не может быть подключено.
Если вы получили следующее сообщение об ошибке, попробуйте подключить устройствоодин раз.
Если сообщение об ошибке появляется снова, откройте новое окно nautilus из панели запуска (желательно щелкнув значок устройства) и, возможно, закройте текущее окно nautilus. Возможно связано: Как создать правила udev для отключения одного из устройств Android?
Проверьте, есть ли правила 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), чтобы включить ваше устройство в будущие версии, если это сработало для вас.
Я до сих пор не могу подключиться
Ваше устройство либо не поддерживается базовым
libmtp
или вы можете столкнуться с той же проблемой, что и у меня с моим Lumia 620, пожалуйста, следуйте обходному пути (шаги по воспроизведению), который я выложил на LP#1247572: Nokia Lumia 620 (WP8) не удается надежно смонтировать через gvfs-mtp в nautilus. (Устройство все еще не работает безупречно, но с помощьюmtp-detect
помогает.)Вам следует поискать в устройстве отслеживания ошибок libmtp ваше устройство и следовать инструкциям для новых устройств на странице проекта, чтобы открыть отчет об ошибках.
Система отслеживания ошибок отображает мое устройство как поддерживаемое, но оно все равно не будет работать
В некоторых случаях сообщение об ошибке, касающееся вашего устройства, возможно, уже было зарегистрировано в более позднем выпуске libmtp, чем то, с чем поставляется ваш дистрибутив (например, Motorola Moto G). Если это так, вам придется либо дождаться обновления официальных репозиториев, либо искать обновленный PPA.
Обновленный список всех версий libmtp, доступных через официальные каналы программного обеспечения Ubuntu и частные PPA, можно найти здесь(не забудьте развернуть другие версии libmtp в ненадежных архивах). По состоянию на 2014/02/13 этот PPA от Matthieu Baerts предлагает последний пакет libmtp, доступный для Ubuntu.
Предупреждение: этот PPA содержит множество различных и, возможно, нестабильных пакетов. Я бы посоветовал не добавлять его в вашу систему. Вместо этого вы можете скачать пакеты libmtp отдельно и вручную установить их в вашей системе.
Пожалуйста, ознакомьтесь с PPA и их рисками, прежде чем двигаться дальше. Пожалуйста, прочитайте параграф ниже о восстановлении ваших оригинальных пакетов, прежде чем выполнять следующие шаги:
- Перейдите на страницу сведений о пакете PPA и разверните запись libmtp.
Загрузите следующие пакеты:
libmtp-common
,libmtp-runtime
,libmtp9
,mtp-tools
, Убедитесь, что вы выбрали правильную архитектуру для вашей системы (обычно этоamd64
).Вот ссылки на пакеты по состоянию на 2014/02/13: libmtp-common, libmtp-runtime, libmtp9, mtp-tools
Приступить к установке обновленных пакетов вручную с помощью dpkg (изменить
$HOME/Downloads
в папку загрузки и убедитесь, что нет других файлов deb:cd "$HOME/Downloads" sudo dpkg -i *.deb
После того, как все будет успешно установлено, перезагрузите компьютер, разблокируйте устройство 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