Избранные Материалы

iOS :: Hack — полноценный доступ к файловой системе внешнего накопителя

Приобрев некоторое время назад небезызвестный в кругах гиков гаджет под названием iPad (здесь я не буду вдаваться в подробности об обоснованности выбора в пользу iPad — скажу лишь, что конкурирующих устройств на платформе Android на то время попросту не было), я, как, наверняка, и любой другой пользователь Linux, обнаружил (а впрочем, чего-то подобного я и ожидал) несколько неприятных для себя нюансов функционирования iOS, которые весьма усложняли выполнение даже самых тривиальных операций вроде копирования файлов на устройство (искушенному читателю, вероятно, известно, что специализированное ПО для синхронизации файлов между ПК и iOS-устройствами под названием «iTunes» работает только в Mac OS X и Windows — версии для Linux попросту не существует, да и запуск последних версий iTunes посредством WINE также, к сожалению, поддерживается лишь частично, что делает невозможным его комфортное использование).

Помимо этого, существует также еще одно неудобство, общее для всех пользователей, независимо от операционной системы, с которой они работают: иногда (а у многих, следует полагать, — весьма часто) возникают ситуации, когда к (одному из) (Рек.: в магазине Techprime матричный принтер купить можно с доставкой ) ПК с установленным на нем iTunes, к которому «привязан» ваш iPad доступа попросту нету (к примеру: вы в дороге, в гостях, на встрече и т. п.)… В то же время возникает необходимость скопировать какие-либо файлы (будь то документы, фотограффии, видео-ролики или что-либо еще) с USB-flash-брелока или SD-карты на ваш iPad.

Как известно, iPad не имеет USB-гнезда и подключение к нему USB-устройств напрямую невозможно. Я использовал слово «напрямую» не спроста — вообще-то возможность подключения USB-устройств к iPad существует, но для этого вам понадобится специальный набор «адаптеров» (выпускаемый самой Apple) под названием «Camera Connection Kit» (далее по тексту — CCK), в который входит два переходника: для считывания данных с карт памяти SD и для подключения камер напрямую по USB. Тоесть, в результате, получаем «аппаратное расширение» для iPad в виде гнезда SD-кард-ридера и USB.

Загвоздка в том, что программные ограничения, которыми так болеет Apple, распостраняются даже на CCK — никакие другие функции помимо копирования фотограффий и видео-роликов с SD-карты или камеры на iPad встроенными средствами iOS не поддерживаются!

Помимо всего прочего, iOS распознает и способна воспроизводить лишь ограниченное число видео-форматов, что делает затруднительным (если не вообще невозможным) просмотр видео-файлов некоторых форматов (таких как MKV, например, да и привычные многим AVI-контейнеры также iOS не распознаются).

Таким образом, скопировать необходимый вам документ, такой как електронная таблица или презентация, книгу (для ее последующего импорта в iBooks), фильм в неподдерживаемом iOS по умолчанию формате или какой-либо другой тип файла помимо поддерживаемых форматов фото/видео, встроенными средствами iOS не представляется возможным.

Поиск решения данной проблемы в глобальной сети особым успехом не увенчался — несколько заметок (на англ.), конечно, было найдено, но они показались мне либо чрезчур усложненными, либо не вполне исчерпывающими/универсальными, либо, в конце-концов, подходящими к решению проблемы с неверной стороны…

Следовательно, решено было заняться поиском решения проблемы самостоятельно. Как выяснилось некоторое время спустя, проблема вполне решаема и для опытного пользователя Unix-подобных ОС ее решение (которое, собственно, и описанно далее в этой заметке) особой сложности не представляет.

Для осуществления «хака» нам понадобится следующее:

  • iPad или другой iOS-гаджет, совместимый с CCK (замечу, что мой iPhone 3G с CCK работать отказался — впрочем, на сайте Apple явно сказано, что iPhone 3G не поддерживается; о более же поздних ревизиях iPhone там не упомянуто, потому осмелюсь предположить, что с ними CCK, вполне вероятно, совместим и, следовательно, описанный в данной заметке «хак» можно применить и к данным устройствам)
  • ВАЖНО: подразумевается, что перед тем, как приступать к осуществлению описанного в данной заметке «хака», гаджет был предварительно «разблокирован» посредством так званой процедуры «Jailbreak» (кстати, тем, кто выступает против «разблокировки» iOS-гаджетов: описываемый «хак» — еще один серъезный повод все-же сделать «Jailbreak» ;)); помимо этого, убедитесь, что на вашем гаджете установлены пакеты «OpenSSH» и «OpenSSL» (воспользуйтесь для этого менеджером пакетов «Cydia«, при помощи которого данные пакеты также можно и загрузить/установить, если они на вашем устройстве еще не установлены)
  • Camera Connection Kit
  • USB-flash-брелок или карта памяти SD (стоит заметить, что внешний USB-винчестер, а также, возможно, некоторые USB-flash-брелоки подключить вряд ли удастся, поскольку потребление энергии внешним накопителем в данном случае превышает норму, допустимую ограничениями iOS — в данном случае система выдаст вам стандартное сообщение об ошибке «The attached accessory uses too much power» — я так и не нашел способа обойти данное ограничение, однако подавляющее большинство стандартных USB-flash-брелоков должны подключаться через CCK без проблем)
  • SSH-клиент для подключения к iPad с целью удаленного выполнения на нем необходимых манипуляций; утилита команднной строки «ssh«, которую я использовал, доступна в практически любой Unix-подобной ОС (я проводил все действия в ОС Linux, но все они с таким же успехом могли быть выполнены и в Mac OS X, Solaris, *BSD и т. д.; а вот пользователям Windows, по всей видимости, придется либо установить Cygwin, либо использовать приложение, выступающее в роли SSH-клиента, — вроде Putty)

Следует также заметить, что для более комфортной работы с внешним накопителем желательно наличие установленного iOS-приложения для работы с файловой системой (файлового менеджера), наподобие iFiles. Кроме того, весьма полезными могут оказаться и некоторые другие приложения для работы с разнообразными форматами файлов, вроде GoodReader (для просмотра документов), BUZZ Player HD (для воспроизведения видео-файлов всевозможных форматов) и т. п.

Я приведу инструкции включения поддержки внешних накопителей для одного приложения (iFiles), но применимы они, естественно, и ко множеству других приложений (к примеру, упомянутые ранее GoodReader и BUZZ Player HD удалось подключить аналогичным образом).

Итак, перейдем к приктической части!

Сперва подключите к iPad USB-адаптер из комплекта CCK, к разьему которого, в свою очередь, следует подключить сам USB-брелок (предварительно скопировав на последний файлы, которые необходимо открыть на устройстве).

Далее необходимо установить SSH-соединение с устройством; используйте имя пользователя «mobile» и соответствующий пароль (по умолчанию — «alpine«; кстати, в целях безопасности, крайне рекомендуется изменить пароль по умолчанию посредством команды «passwd«):

ssh mobile@{IP addr}

где {IP addr} — IP адрес вашего гаджета в локальной сети; выставить статический адрес для устройства можно в настройках iOS:

ip-addr-settings

Настройка статического IP-адреса в iOS

При успешном соединении, iOS откроет удаленный сеанс командной оболочки:

ssh

Удаленный доступ к iOS-устройству посредством SSH

Теперь необходимо определиться с приложением, поддержку внешних накопителей для которого вы желаете включить — в данном примере это приложение «iFiles» — выполняем поиск директории, в которую было установлено приложение:

find /var/mobile/Applications -name "*iFiles*.app" -print

Результатом вывода данной команды будет что-то наподобие следующего:

/var/mobile/Applications/408D8774-AFF8-4BF6-B7BB-5D95AE65B0A2/iFiles.app

Предметом нашего интереса является родительская директория, тоесть, в данном случае — «/var/mobile/Applications/408D8774-AFF8-4BF6-B7BB-5D95AE65B0A2«.

Заметьте, что уникальный идентификатор (здесь это «408D8774-AFF8-4BF6-B7BB-5D95AE65B0A2«), используемый в качестве имени директории установки, в каждом случае отличается (на то он и уникальный :)), так что вы, естественно, в последующих командах должны использовать имя директории, которое оболочка выдала на вашем устройстве.

Просмотреть содержимое данной директории можно воспользовавшись стандартной командой «ls»:

ls -la /var/mobile/Applications/408D8774-AFF8-4BF6-B7BB-5D95AE65B0A2

В результате чего получим список содержимого директории, наподобие нижеприведенного:

ls1

Cписок содержимого директории установки приложения

Особый интерес для нас представляет под-директория «Documents«, которая, в подавляющем большинстве случаев (и это верно для всех упомянутых в заметке приложений) служит корневой директорией для файлов, доступ к которым имеет соответствующее приложение.

Вывод напрашивается сам собой — необходимо всего-лишь создать в данной директории сим-линк на директорию, являющуюся точкой монтирования внешних накопителей в iOS!

Опытным путем (что для пользователя Unix-подобных систем является скорее пустяковым делом, чем сколь-нибудь сложной задачей ;)) было выявлено, что таковой точкой монтирования в iOS является директория «/var/mnt/mount1» (а учитывая то, что одновременно к iPad может быть подключен лишь один внешний накопитель, нетрудно догадаться, что точка монтирования — также всего одна и неизменна).

Итак, создаем сим-линк:

ln -s /var/mnt/mount1 /var/mobile/Applications/408D8774-AFF8-4BF6-B7BB-5D95AE65B0A2/Documents/EXTERNAL

Вместо «EXTERNAL», вы, конечно же, вольны выбрать любое другое имя, которое покажется вам более подходящим.

Для проверки корректного создания сим-линка, можно воспользоваться той же командой «ls» для вывода обновленного содержимого директории «Documents«, которая, помимо остальных (находящихся там и ранее) файлов, теперь также должна содержать ссылку на точку монтирования:

ls2

Проверка корректного создания сим-линка

Теперь можно запустить приложение и удостовериться в том, что созданный нами сим-линк появился среди прочих директорий и файлов, к которым предоставляет доступ приложение (естественно, вы можете не только читать файлы с внешнего накопителя, но и записывать на него файлы с вашего гаджета! ;)):

ifiles

Прямой доступ к файловой системе внешнего накопителя из iFiles

 

goodreader

Прямой доступ к файловой системе внешнего накопителя из GoodReader

Эту же процедуру необходимо проделать для всех остальных приложений, прямой доступ к файлам на внешнем накопителе из которых вам необходимо получить (естественно, проделать это нужно для каждого из таковых приложений всего лишь единожды — этого достаточно для обеспечения доступа к любому подключенному в будущем внешнему накопителю). Но это, по сути, вовсе не обязательно — пользуясь тем же фаловым менеджером (вроде «iFiles«) можно открывать файлы при помощи других установленных в системе приложений — в этом случае, правда, будет осуществлено копирование файла в директорию документов выбранного приложения (та самая «Documents«, упоминавшаяся ранее). В случае же с сим-линком осуществляется непосредственный доступ к файлам на внешнем накопителе.

Выводы очевидны:

  • копирование («открыть с помощью…») более удобно при необходимости доступа к файлам после отключения внешнего накопителя, но в этом случае будет также выделено место под хранение скопированных файлов на встроенном накопителе
  • непосредственный доступ к файлам находящимся на внешнем накопителе не требует копирования файлов (и, следовательно, выделения дополнительного места на встроенном накопителе), однако такой доступ, само собой разумеется, может быть осуществлен только пока внешний накопитель подключен к устройству; помимо этого, необходимо также настроить прямой доступ к внешнему накопителю для каждого конкретного приложения, следуя приведенным выше инструкциям

Какой способ более удобен для вас — решать, соответственно, вам ;)

На этом — все.

Удачи!

Tweet

Об авторе:
Профессиональный разработчик программного обеспечения, блоггер, адепт Open Source, казуальный путешественник, фотограф-аматор.
Подробнее »
Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong Twitter