Вопрос или проблема
После успешного подключения Android телефона в качестве USB/MTP устройства к моему настольному компьютеру на Ubuntu (22.04.1 LTS), я переключился на Raspberry Pi 4 с новой загруженной версией образа Ubuntu/Server/Raspberry Pi (Ubuntu 22.04.1 LTS). Я подключил Android телефон, но не увидел никаких директорий/файлов, которые видел при подключении телефона к моему настольному компьютеру с Ubuntu.
Затем я установил “gmtp” и “mtp-tools” и перезагрузил Raspberry Pi. Я по-прежнему не увидел никаких новых директорий/файлов. Я проверил и обнаружил новое /dev/*mtp* устройство на Raspberry Pi, когда телефон был подключен. Но я никогда не видел ожидаемых директорий/файлов в /run/user/… директории.
Затем я наблюдал за /var/log/syslog как на рабочем настольном компьютере с Ubuntu, так и на неработающем Raspberry Pi. Оба начали с того, что “увидели” новое USB-устройство Android телефона. Но затем настольный компьютер с Ubuntu, по всей видимости, провел “аудит” телефона, что (я предполагаю) вызвало у телефона запрос на разрешения для передачи файлов.
По-видимому, Raspberry Pi пропускает этот шаг “аудита”. Возможно ли, что это еще один отсутствующий MTP пакет? Или какая-то неактивированная служба?
Все пакеты с “mtp” в их именах на Raspberry Pi:
$ sudo dpkg -l | grep mtp
ii gmtp 1.3.11-3build1 arm64 простая программа передачи файлов для устройств на базе MTP
ii libmtp-common 1.1.19-1build1 all общие файлы Media Transfer Protocol (MTP)
ii libmtp-runtime 1.1.19-1build1 arm64 инструменты времени выполнения Media Transfer Protocol (MTP)
ii libmtp9:arm64 1.1.19-1build1 arm64 библиотека Media Transfer Protocol (MTP)
ii mtp-tools 1.1.19-1build1 arm64 инструменты библиотеки Media Transfer Protocol (MTP)
$
Stackexchange уведомил меня, что этот вопрос просмотрели более 1K раз, и я решил, что должен по крайней мере отчитаться о том, как я решил свою ситуацию. Вот ответ, который я опубликовал на аналогичный вопрос, заданный мной на raspberrypi/stackexchange:
Вопрос об установке USB / MTP Android телефона, используя дистрибутив Ubuntu для Raspberry Pi, и не касался автоматической монтировки. Я обнаружил, что в дистрибутиве для Raspberry Pi / Ubuntu / Server (22.04.1 LTS) нет правил UDEV для Android телефона, как это было в моем настольном дистрибутиве Ubuntu. В результате я выбрал ручную монтировку USB / MTP, так как это работает для моего приложения.
Я обнаружил, что после установки упомянутых в вопросе пакетов и android-file-transfer я смог вручную подключить Android телефон, используя USB / MTP. Вот что я смог сделать:
$ mkdir /home/ubuntu/mnt
$ sudo aft-mtp-mount /home/ubuntu/mnt
$ sudo ls /home/ubuntu/mnt
'Внутренняя память'
… когда закончил, отключил Android телефон с помощью следующей команды:
$ sudo fusermount -uz /home/ubuntu/mnt
.
Ответ или решение
Теория
При подключении Android-устройства к любому компьютеру с операционной системой Linux, такой как Ubuntu на Raspberry Pi, важно чтобы операционная система могла корректно распознать и управлять устройством как USB- или MTP-устройством (Media Transfer Protocol). На настольной версии Ubuntu это, как правило, работает «из коробки» благодаря предустановленным пакетам и настройкам. Однако на серверной версии Ubuntu, такой как версия для Raspberry Pi, могут отсутствовать некоторые конфигурации и правила, которые способствуют успешному монтажу устройств.
Пример
Пользователь описывает проблему с монтированием Android-телефона на Raspberry Pi, используя серверную версию Ubuntu 22.04.1 LTS. Даже после установки стандартных пакетов, таких как gmtp
и mtp-tools
, устройство не распознается корректно, и системные каталоги не отображаются. При сравнении с рабочей системой на настольной версии Ubuntu, был обнаружен процесс аудита, который инициирует запрос устройства на разрешение доступа к файлам, чего не происходило на Raspberry Pi.
Применение
Необходимые шаги для решения проблемы:
-
Установка недостающих пакетов:
Помимо уже установленныхgmtp
иmtp-tools
, необходимо убедиться в наличии правил UDEV для Android-устройств. На серверных дистрибутивах они могут отсутствовать. -
Создание каталога для монтирования:
$ mkdir /home/ubuntu/mnt
-
Установка и использование
android-file-transfer
:
Установите пакетandroid-file-transfer
, который может помочь в обеспечении эмуляции MTP на уровне FUSE:$ sudo apt-get install android-file-transfer
-
Ручное монтирование устройства:
Используйтеaft-mtp-mount
для монтирования устройства:$ sudo aft-mtp-mount /home/ubuntu/mnt
После этого должно появиться содержимое хранилища устройства, например, "Internal storage".
-
Корректное размонтирование после использования:
Чтобы избежать повреждений данных, необходимо правильно размонтировать устройство:$ sudo fusermount -uz /home/ubuntu/mnt
Диагностика возможных проблем:
-
Отсутствие UDEV правил: Разработайте и добавьте необходимые правила UDEV. Это позволит системе автоматически распознавать Android-устройство при подключении. Пример правила UDEV для устройств MTP:
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
-
Проверка логов: Сравните выводы из
/var/log/syslog
на настольной и серверной версиях, что может дать подсказки о проблемах в детекцировании устройства. -
Обновление системы: Убедитесь, что система и все установленные пакеты обновлены:
$ sudo apt-get update && sudo apt-get upgrade
Итог
Проблемы с монтированием Android-устройства на Raspberry Pi чаще всего связаны с отсутствием предустановленных системных правил и конфигураций, которые доступны в настольной версии Ubuntu. Решение заключается в установке дополнительных пакетов и ручной настройке системы с учетом специфики серверного дистрибутива. Следуя четким шагам по установке правил UDEV и использованию инструментов типа android-file-transfer
, можно добиться желаемого результата и успешно монтировать Android как MTP-устройство на Raspberry Pi.