Пробуем использовать Debian Wheezy, MTP и Nook HD+ в одной упряжке

Как-то совершенно незаметно для меня Linux практически вытеснил изделия Редмонда на моем домашнем компьютере. Не могу сказать, что именно сподвигло меня на этот шаг, непревзойденная скорость работы LXDE/Openbox, либо же агрессивное навязывание мне дурацких кирпичей в качестве интерфейса взаимодействия с ОС, но как бы там ни было, в Windows я теперь - гость.

Несколько дней назад я разжился устройством Nook HD+, этакая 16гиговая читалка с шикарным экраном и шикарным аккумулятором:

NOOK HD+
Картинка с wired.com

Девайс был приобретен в качестве планшета по халявной цене 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.

Пробуем использовать Debian Wheezy, MTP и Nook HD+ в одной упряжке: 3 комментария

  1. Большое спасибо, заработало со Star-овским китайфоном.

  2. Спасибо! Благодаря Вам есть доступ к медиаплееру 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
    Пардон за ламерский коммментарий, но, возможно, он небесполезен.

  3. Опечатка. В п. 2 имелось в виду:
    в файл MtpLocalFileCopy.h добавить строку
    #include «unistd.h»

Обсуждение закрыто.