Как-то совершенно незаметно для меня Linux практически вытеснил изделия Редмонда на моем домашнем компьютере. Не могу сказать, что именно сподвигло меня на этот шаг, непревзойденная скорость работы LXDE/Openbox, либо же агрессивное навязывание мне дурацких кирпичей в качестве интерфейса взаимодействия с ОС, но как бы там ни было, в Windows я теперь - гость.
Несколько дней назад я разжился устройством Nook HD+, этакая 16гиговая читалка с шикарным экраном и шикарным аккумулятором:
Девайс был приобретен в качестве планшета по халявной цене 150$, непосредственно читалка мне не требовалась, ибо для этих целей трудится Kindle 4.
Это стало причиной, по которой стоковая прошивка была повыпилена, а на её место был водружен CyanogenMod на базе Android 4.2.2.
И всё бы ничего, но девайс не желает монтироваться в виде USB - накопителя, вместо этого предлагается использовать протокол MTP.
В Debian Wheezy отсутствовали пакеты, необходимые для взаимодействия с устройством, пришлось немного помахать компилятором.
Для работы с протоколом MTP в линуксе используются библиотеки fuse, libmtp и набор утилит mtp-tools и mtpfs.
В Debian Wheezy имелось всё, кроме пакета mtpfs, который пришлось собрать. Дело нехитрое, но результат оказался досадным: я смог подключить устройство, смог прочитать его файлы, но вот записать на него ничего не смог. Поиски альтернатив через Wiki Арча привели меня к решению - jmtpfs.
Jmtpfs - это альтернатива mtpfs, основная на FUSE и libmtp файловая система, призванная сделать обмен файлами с MTP-устройством прозрачным и простым, буквально такой же как c обычным USB накопителем.
И я должен отметить, что эту цель jmtpfs достигла.
Приготовления
- Во-первых, надо скачать исходники jtmpfs.
- Во-вторых, надо доставить необходимые пакеты для сборки, мне пришлось ставить такие:[code]#apt-get install mtp-tools libmtp-dev fuse libmtp9 pkg-config libfuse-dev libglib2.0-dev libmagic1 libmagic-dev checkinstall[/code]
Соглашаемся на доустановку зависимостей, если потребуется.
Собираем jmtpfs
Перед сборкой следует открыть файл src\jtmpfs.cpp и дописать включение заголовочного файла:
[code]#include <unistd.h>[/code]
Почему она там отсутствует, я не знаю, без неё ничего не соберется.
[code]#./configure[/code]
Внимательно смотрим вывод команды, нет ли ошибок.
[code]#make
#checkinstall[/code]
Checkinstall соберет *.deb пакет, который можно поставить любым удобным способом, например, dpkg -i /путь/к-пакету-deb.
Настраиваем FUSE
- В /etc/fuse.conf раскомментируем строчку user_allow_over. Это даст права монтировать FUSE файловые системы обычным пользователям
- Подключаем Nook HD+, запускаем утилиту mtp-detect из состава пакета mtp-tools, она подскажет VendorID и ProductID, которые нам сейчас понадобятся. В моем случае это 2080 и 0005 соответственно.Получив идентификаторы, создаем файл с правилами udev, ну например, /etc/udev/rules.d/50-mtp.rules.
Перезапускаем udev:
[code]service udev restart[/code] - Добавляем текущего пользователя в группу fuse:
[code]adduser user_login fuse[/code] - создаем папку, в которую будем монтировать устройство, и выставляем на её права. Можно использовать папку в своем домашнем каталоге, я предпочитаю иметь папку в /media
[code]#mkdir /media/nook
#chmod 777 /media/nook[/code]
Вот теперь всё. Подключив кабелем Nook HD+, мне остается ввести команду
[code]$jmtpfs /media/nook[/code]
чтобы получить доступ к файлам. Чтобы отключить доступ, понадобится команда
[code]fusermount -u /media/nook[/code]
UPD: Залил готовый пакет jtmpfs 0.4.0 для Debian Wheezy amd64.
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
Большое спасибо, заработало со Star-овским китайфоном.
Спасибо! Благодаря Вам есть доступ к медиаплееру Sony Walkman NWZ-E383 !
Нюансы по дороге:
1. на стадии #./configure имеем ошибку:
./configure: line 2750: AX_CXX_COMPILE_STDCXX_0X: command not found
которую можно проигнорировать.
2. на стадии # make имеем ошибку:
MtpLocalFileCopy.cpp:115:43: error: ‘ftruncate’ was not declared in this scope
make[1]: *** [jmtpfs-MtpLocalFileCopy.o] Ошибка 1
make[1]: Leaving directory `xxxxxxxx/jmtpfs/src’
make: *** [all-recursive] Ошибка 1
— для исправления надо в файл src/MtpLocalFileCopy.h
добавить строку:
#include
3. если под админом (root) выполнять только операции, на которые не хватает прав пользователю:
— # checkinstall
— # dpkg -i /путь/к-пакету-deb (например: dpkg -i jmtpfs_1.0-1_i386.deb)
— редактирование /etc/fuse.conf
а все предшествующие — под пользователем, то для стандартно установленного Debian GNU/Linux 7.9 (wheezy) сразу после редактирования /etc/fuse.conf устройство Sony Walkman монтируется автоматически и полностью доступно пользователю на чтение и запись (т.е. без дальнейших операций).
Хотя на всякий случай я запустил chmod 777 /media/WALKMAN
Пардон за ламерский коммментарий, но, возможно, он небесполезен.
Опечатка. В п. 2 имелось в виду:
в файл MtpLocalFileCopy.h добавить строку
#include «unistd.h»