Начиная с версии 3.0, Android стал передавать данные между компьютером и устройством по MTP. К счастью, в Linux MTP хорошо поддержан самым разным софтом: GPhoto, Amarok, Audacious, Banshee, Gnomad2, Nautilus, Qlix, Rhythmbox… Я пользуюсь gMTP.
Проблема только с правами и с доступом к устройству от обычного (непривилегированного) пользователя. Решением этой проблемы мы сейчас и займёмся.
Так как мы параноики и не хотим давать всем права на всё, давайте определимся точно с устройством.
Запускаем команду:
# udevadm monitor --environment --udev
и подключаем устройство к компьютеру.
Udev выдаёт массу информации, из которой для нас будет наиболее ценной вот эта:
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb6/6-1/6-1:1.0
SUBSYSTEM=usb
DEVTYPE=usb_interface
PRODUCT=4e8/6860/400
(естественно, ваши значения, скорее всего, будут отличаться)
Зная путь к устройству DEVPATH
, запрашиваем более детальную информацию:
# udevadm info -a --path=/devices/pci0000:00/0000:00:1d.7/usb6/6-1/6-1:1.0
Здесь давайте обратим внимание на атрибуты
ATTRS{idVendor}=="04e8"
ATTRS{idProduct}=="6860"
Можно выбрать и другие, но эти представляются мне наиболее очевидными.
Теперь мы знаем об устройстве достаточно. Переходим к настройке udev.
В большинстве дистрибутивов правила udev
хранятся
в файлах /etc/udev/rules.d/<NN>-<name>.rules
.
<NN>
— две любые цифры (в нашем случае их
значения не существенны), и <name>
— любое имя
просто для собственного удобства. Расширение
.rules
обязательно. Без него файл будет
проигнорирован. То есть имя файла
/etc/udev/rules.d/42-android.rules
подойдёт.
В этот файл пишем строчку примерно такого вида:
SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE:="0666"
Здесь мы назначили устройству права rwrwrw
и оно
стало доступно всем пользователям.
Можно было поступить иначе, использовав директивы USER
или GROUP
.
Это уже на ваше усмотрение.
Теперь заставляем udev
перечитать правила:
# udevadm control --reload-rules
Всё должно начать работать.
Теперь вы можете переподключить устройство и проверить, что ваш софт его видит.
Если что-то пошло не так, то можно проверить, работает ли ваше правило.
Для этого можно выполнить пару команд
# ls -l /dev/libmtp-6-1
lrwxrwxrwx 1 root root 15 апр 5 19:18 /dev/libmtp-6-1 -> bus/usb/006/010
# ls -l /dev/bus/usb/006/010
crw-rw-rw- 1 root root 189, 649 апр 5 19:18 /dev/bus/usb/006/010
Или обойтись одной:
# ls -Ll /dev/libmtp-6-1
crw-rw-rw- 1 root root 189, 649 апр 5 19:18 /dev/libmtp-6-1
Как видите, в моём случае udev
сделал как раз то, что было прописано
в правилах: устройство принадлежит пользователю root
, а права
crw-rw-rw-
. Если у вас правило не сработало, ещё раз проверьте,
не пропустили ли вы какие-то шаги.
Успехов!