Как-то совершенно незаметно для меня 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.
- Во-вторых, надо доставить необходимые пакеты для сборки, мне пришлось ставить такие:
- Код: Выделить всё
#apt-get install mtp-tools libmtp-dev fuse libmtp9 pkg-config libfuse-dev libglib2.0-dev libmagic1 libmagic-dev checkinstall
Соглашаемся на доустановку зависимостей, если потребуется.
Собираем jmtpfs
Перед сборкой следует открыть файл src\jtmpfs.cpp и дописать включение заголовочного файла:
- Код: Выделить всё
#include <unistd.h>
Почему она там отсутствует, я не знаю, без неё ничего не соберется.
- Код: Выделить всё
#./configure
Внимательно смотрим вывод команды, нет ли ошибок.
- Код: Выделить всё
#make
#checkinstall
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:
- Код: Выделить всё
service udev restart
- Добавляем текущего пользователя в группу fuse:
- Код: Выделить всё
adduser user_login fuse
- создаем папку, в которую будем монтировать устройство, и выставляем на её права. Можно использовать папку в своем домашнем каталоге, я предпочитаю иметь папку в /media
- Код: Выделить всё
#mkdir /media/nook
#chmod 777 /media/nook
Вот теперь всё. Подключив кабелем Nook HD+, мне остается ввести команду
- Код: Выделить всё
$jmtpfs /media/nook
чтобы получить доступ к файлам. Чтобы отключить доступ, понадобится команда
- Код: Выделить всё
fusermount -u /media/nook
UPD: Залил готовый пакет jtmpfs 0.4.0 для Debian Wheezy amd64.