Десктоп в кармане: тестируем Maru, прошивку, позволяющую превратить смартфон в полноценный комп

Существует огромное количество кастомных прошивок для различных устройств. Кастомные прошивки вселяют новую жизнь в старые девайсы, добавляют новые возможности и позволяют получить больший контроль над устройством. Однако иногда можно встретить прошивки с экзотической и нестандартной функциональностью. Сегодня мы познакомимся с Maru OS — основанной на Android 5.1.1 прошивке, которая при подключении смартфона к монитору превращает его в полноценный комп на базе Debian. Мы не только погоняем прошивку, но и пообщаемся с ее создателем.

Требования и установка

Пока что прошивка находится в стадии закрытого бета-тестирования и доступна только для Nexus 5. Чтобы получить функцию десктопа, также понадобится переходник SlimPort и HDMI-кабель. Автор заявляет об официальной поддержке определенных моделей переходников, но на самом деле подойдет практически любой (например, китайский Qumo за 990 рублей). Дополнительно понадобятся беспроводная мышь и клавиатура, которые могут работать с мобильными устройствами без специального USB-ресивера.

Обычные мышь и клаву подключить не удастся, так как, хоть в адаптере SlimPort есть гнездо microUSB (или полноценный USB-выход), в которое можно воткнуть OTG-кабель, контакты data и ID на него не выведены. Но можно использовать эмулятор Bluetooth-клавы и мыши True Mouse/KB, установленный на другой смартфон или планшет.

Десктоп Maru

Устанавливается прошивка из образа, который прошивается через fastboot. Однако есть вариант поставить ее рядом с основной с помощью MultiROM. Для этого необходимо получить root, установить MultiROM Manager из маркета, прошить с его помощью кастомное рекавери, патченное ядро и необходимые файлы. Далее следует закинуть прошивку на виртуальную карту памяти, перезагрузиться в recovery и установить ее через меню Add ROM.

Установка прошивки с помощью MultiROM

Maru OS базируется на чистом Android 5.1.1 Lollipop, собранном из AOSP, а потому не включает в себя ни маркет, ни другой софт Google. Чтобы обеспечить синхронизацию с Google и возможность устанавливать софт, необходимо дополнительно поставить gapps’ы. Причем, так как свободного места в /system в прошивке почти нет (все отдано под Debian), установить удастся только пакет gapps-pico, включающий в себя лишь маркет и синхронизацию контактов.

Приложения телефона после первой загрузки
Экран «О телефоне»

На прошивку нормально ставится SuperSU, Xposed framework, работают обычные проги, однако иногда отваливается радиомодуль (секунд этак на тридцать). В общем, обыденный, ничем не примечательный Android.

Debian

Все становится намного интересней, если в смартфон воткнуть переходник SlimPort и подключить к HDMI-входу телевизора или монитора. Спустя некоторое время на экране появится полноценный рабочий стол Debian.

Запущенный терминал, браузер, проводник

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

С установкой дополнительного софта нет никаких проблем. Обновляем индекс пакетов (в ответ на запрос пароля вводим maru):

sudo apt-get update

Ставим пакет imagemagick:

sudo apt-get install imagemagick
Установка софта

Все о’кей, пакет благополучно выкачивается из Сети, устанавливается, и нам становятся доступны имеющиеся в нем команды (import, convert, montage...). Таким же образом можно ставить любые пакеты Debian, собранные для платформы ARM. По уверениям автора, они все должны работать. Что касается предустановленного софта, то в качестве офиса на десктопе стоит LibreOffice, а в качестве браузера — Iceweasel (по сути — переименованный Firefox). Нормально работают Vim, Google Docs, GCC, Node.js, Bluefish, Yeoman, GIMP. Доступен SSH-сервер.

Если же необходимо обменяться файлами с Android, то можно закинуть их в один из подкаталогов /mnt: DCIM, Downloads, Movies и Music. Но можно переконфигурировать Maru так, чтобы открыть полный доступ к карте памяти. Для этого достаточно добавить в конец файла /data/media/0/multirom/roms/maru-v0.2.2-update-hammerh/data/maru/containers/jessie/ строчку

lxc.mount.entry = /sdcard mnt/sdcard none bind,optional,rw,create=dir

Сделать это можно из рекавери или с помощью проводника, у которого есть root-доступ.

Fun fact

Иногда пользователи видят на экране телефона интерфейс Android и Debian в режиме split screen. Как признал разработчик, это секретная фича для отладки, которую не должны были увидеть простые смертные. Происходит это из-за некорректной отработки вывода HDMI.

В связи с тем что прошивка сырая, на десктопе наблюдаются следующие баги и недостатки:

  • Не работает звук, так что послушать музыку и посмотреть видео не удастся.
  • Аудио с телефона передается через HDMI на монитор.
  • В проводнике не работает Browse Network, выдает ошибку.
  • Часы десктопа не синхронизируются с часами телефона.
  • Не работают кнопки на подключенных к телефону Bluetooth-наушниках и автомобильных устройствах. Система мониторит клавиатуру и мышь, поэтому часть команд перехватывается и не отрабатывается.
  • Ресурсоемкие проги начинают заметно тормозить, а поставленная для теста игрушка сhromium-bsu после запуска выдает слайд-шоу на 5–10 fps (хардварное ускорение пока не поддерживается).
  • Не получится поставить GNOME или KDE, по умолчанию используется десктоп на основе XFCE.
  • На данный момент не поддерживается многопользовательский режим (фактически в системе только два юзера: root и maru).
  • Десктоп отображается, пока работает экран устройства. Когда экран потухнет, потухнет и десктоп. Чтобы избежать этого, автор рекомендует включать режим Daydream (Настройки -> Дисплей -> Заставка).

Ну и самый главный минус — ужасная прожорливость системы при запущенном десктопе. Причем это наблюдается даже с подсоединенной зарядкой. С подключением к порту USB на компе живучесть устройства составляет около четырех часов. Однако, используя зарядник на 1 A, можно удержать батарею на одном уровне. С другой стороны, без подключения к монитору минималистичная система выдает больше жизни батарейки, чем моя основная 6.0.1.

Рубрика «Спросим у разработчика»

В данный момент исходники прошивки закрыты, поэтому узнать о том, как устроена прошивка и как ее удалось создать, можно было только у самого автора. Что мы и сделали, задав ему несколько вопросов.

Привет. Расскажи немного о себе.

Привет, меня зовут Preetam D’Souza. Я из Индии, но еще в детстве переехал вместе с семьей в США. Благодаря моим родителям я вырос с твердой уверенностью, что ничего невозможного не существует. Родители всегда поощряли мои интересы, которые большей частью касались электроники и компьютеров — ими я был окружен еще с младенчества. Мой отец инженер, причем лучший инженер из всех, кого я знаю, поэтому у меня осталось много детских воспоминаний о том, как я бесконечно листал журналы и брошюры, сравнивая частоты процессоров AMD и Intel в девяностых, и учился собирать ПК.

Я окончил Университет штата Пенсильвания со степенями в области бизнеса и информатики. За время учебы я успел поработать над двумя интересными проектами. Первым был dampOS, UNIX-подобная ОС, работающая в пространстве пользователя (как обычное приложение. — Прим. ред.) и оснащенная собственным планировщиком, основанной на FAT файловой системой и консолью. Вторым проектом был RFIDash, система управления товаром для розничных магазинов с помощью RFID-меток. На каждый товар клеилась метка, и можно было с удобством вести учет, быстро считывая метки в параллельном режиме. Ну и как полагается, я играл на соло-гитаре в рок-группе колледжа.

После третьего года обучения я проходил стажировку в Amazon Web Services (AWS), а затем перешел к ним на работу. Я провел год в AWS в составе небольшой группы, работавшей над новым облачным сервисом. Моей задачей была оптимизация производительности и разработка приложения для Android. В начале 2015 года я покинул AWS, чтобы отдохнуть от корпоративного мира, и сосредоточился на своих собственных проектах, в том числе на том, что позже стал известен как Maru.

Preetam D’Souza

Как появилась идея создать Maru?

Впервые мысли об использовании смартфона в качестве десктопа возникли в конце 2012 года, когда я обдумывал идеи для дипломной работы и говорил с отцом о возможностях беспроводных мониторов. Тогда у меня еще оставались сомнения относительно перспектив данной идеи, но, когда весной 2013-го я увидел презентацию Samsung Galaxy S4, эти сомнения развеялись. Восьмиядерный процессор в мобильном телефоне просто взорвал мой мозг. С тех пор я начал изучать возможности объединения смартфона и десктопа в единое устройство.

Моя идея состояла в том, чтобы создать карманную компьютерную систему с адаптируемым под текущие задачи интерфейсом. Я не хотел использовать десятки разных устройств, мне была нужна единая система, которую я смогу брать с собой куда угодно и быстро переключать ее интерфейс.

Как работает Maru?

Когда я только начал проект в феврале 2015 года, я планировал использовать гипервизор для одновременного запуска Linux и Android в виртуальном окружении. Я потратил много времени, чтобы изучить Xen и наладить работу такой связки, результатом чего стал рабочий прототип для платформы Exynos 5410 ODROID-XU. Но очень быстро я пришел к выводу, что проще и гораздо эффективнее использовать виртуализацию уровня пользователя, с разделением одного ядра Linux между двумя системами с помощью LXC (LinuX Containers — инструмент для создания изолированных друг от друга контейнеров, позволяющий одновременно запустить несколько основанных на ядре Linux систем. — Прим. ред.). Сегодня Maru использует именно этот подход.

Насколько я знаю, LXC требует, чтобы ядро было собрано с поддержкой пространств имен (namespaces) и cgroups, которых нет в стандартном ядре Android.

Я собрал кастомное ядро для Nexus 5 на основе исходников ядра Android 5.1 с включенными опциями namespace и cgroups.

Чем твой способ запуска Debian лучше, чем GNURoot и Linux Installer?

Все эти инструменты работают одинаково: получаем на смартфоне root, берем файлы дистрибутива Linux для ARM, кладем их куда-нибудь в /data, затем делаем chroot в этот каталог и запускаем виртуальный X-сервер (стандартный для Linux графический стек. — Прим. ред.), отдающий картинку по протоколу VNC. Затем подключаемся к нему с помощью VNC-клиента для Android. Ну и подсоединяем смартфон к монитору по HDMI, если нужно вывести Linux-десктоп на большой экран.

Недостаток такого подхода, кроме низкой скорости отрисовки картинки, в том, что пока запущен клиент VNC, ты не сможешь использовать другие приложения или, например, ответить на звонок, — при запуске другого приложения картинка изменится и на экране смартфона, и на мониторе. Maru же позволяет использовать два интерфейса независимо друг от друга. Разделение картинки на разные дисплеи здесь работает на самом низком уровне в обход стандартного фреймворка Android. Ты можешь работать в Debian и при этом звонить, писать СМС и делать все, для чего ты привык использовать смартфон.

Тем не менее остается ряд проблем, которые нужно решить. Например, в Debian пока не работает хардварное ускорение, поэтому если кто-то может помочь с реализацией этой функции — я буду только рад.

Были ли проблемы совместимости Debian с используемым в Nexus 5 ядром?

Нет, никаких проблем вообще. Дистрибутив отлично работает на ядре Nexus 5; респект разработчикам Linux за то, что сделали ядро настолько универсальным и портируемым.

Расскажи об интересных технических проблемах, с которыми ты столкнулся по ходу разработки Maru.

Проблем было действительно много. Я не очень хорошо разбирался в Linux и Android и только в 2013 году стал углубленно изучать эти системы. На это ушло действительно много времени, но это необходимо было сделать перед тем, как начать воплощение моей идеи в жизнь. При разработке я постоянно заходил в тупик и начинал все сначала, чтобы в итоге встретиться с новым тупиком. Проблем было столько, что я мог бы написать о них книгу, поэтому остановлюсь только на самых запомнившихся.

Самой сложной задачей было заставить работать графику одновременно в Android и в Linux. Первый работающий прототип на базе LXC я создал для Samsung Galaxy Nexus. Мне удалось запустить Debian в выделенном контейнере и подключиться к нему, используя VNC. И хотя для меня это было большое достижение, я знал, что такой метод запуска не позволит использовать обе системы одновременно. К счастью, Galaxy Nexus базировался на TI OMAP4460, самом открытом и дружелюбном чипсете для мобильных устройств. Так что я прочитал всю документацию по чипсету, какую мне удалось найти, и попробовал выяснить недостающую информацию с помощью sysfs (псевдофайловая система ядра Linux, с помощью которой можно узнать низкоуровневую информацию о железе. — Прим. ред.).

В результате я таки нашел способ переконфигурировать контроллер дисплея так, чтобы привязать HDMI-порт к выделенному framebuffer device (fbdev — драйвер ядра Linux, позволяющий напрямую работать с видеопамятью. — Прим. ред.), вообще не трогая код Android. Далее оставалось только добиться правильной ориентации дисплея и выставить корректный видеорежим для HDMI.

Но когда дело дошло до портирования прошивки на Nexus 5, я сразу столкнулся с проблемами. Документации на Qualcomm Snapdragon 800 не было никакой, а контроллер дисплея использовал совсем другую схему привязки подключенных дисплеев к fbdev. После двух недель безуспешных попыток переконфигурировать контроллер мне стало понятно, что такой подход не будет работать. Нужно было идти совсем другим путем, который бы не зависел от используемого в смартфоне железа. Так я пришел к той архитектуре графического стека, которая используется в Maru сейчас (к сожалению, автор прошивки уклонился от ответа на вопрос о том, как именно это работает. — Прим. ред.).

Если же говорить о вопросах, не связанных с графикой, то больше всего проблем возникло с тем, чтобы заставить Android и Debian работать без конфликтов. Помню один интересный баг, связанный с просмотром видео: плеер (например, YouTube) отказывался работать в то время, пока работает Debian, но, как только последний отключался, видео начинало воспроизводиться. После многих часов, проведенных в попытках выяснить причины такого странного поведения, я нашел проблему. Она была вызвана кодом поддержки Snapdragon, который динамически загружал firmware с реализацией аппаратного декодера видео в ядро Linux при начале просмотра видео. За данную операцию в Android отвечает демон ueventd, однако Debian (а точнее, его демон udevd) реагировал на запрос загрузки firmware раньше, так что до ueventd запрос не доходил и декодер так и не загружался в ядро. Решение проблемы было простое — запретить udevd реагировать на запросы загрузки firmware.

Учитывая, что Maru теперь не завязан на конкретное железо, будут ли порты на другие устройства?

Конечно, единственное требование Maru к устройству на данном этапе — это поддержка HDMI, а именно одной из технологий HDMI-over-USB: SlimPort или MHL. Сейчас у меня есть доступ только к Nexus 5 и 5X, но, если кто-то заинтересован в портировании Maru на другие устройства, он может связаться со мной. Уже есть люди, желающие выполнить порт на смартфоны Sony, Samsung, ASUS и Nexus.

ОK, но хотелось бы сразу иметь доступ к исходному коду. Ты говоришь, что Maru — это open source проект, но когда будут доступны исходники?

Maru находится в стадии подготовки к открытию исходных текстов. Есть несколько важных вещей, касающихся общей структуры проекта, которые еще не закончены. Многие люди связывались со мной и выказывали желание портировать Maru на свои устройства, и я должен быть уверен, что они смогут быстро разобраться в исходном коде, а сам процесс портирования для них будет легким. Я не люблю давать обещания касательно сроков, но могу сказать, что я работал над открытием исходников весь этот месяц и не могу дождаться, когда к проекту начнут присоединяться разные люди.

Спасибо за ответы и удачи в развитии проекта.

Спасибо за проявленный интерес. Следите за обновлениями.

Заключение

Проект получился очень интересным. Автор — очень коммуникабельный человек и оперативно отвечает на все вопросы как в email, так и в закрытой группе для бета-тестеров. У него уже есть много новых идей для воплощения, в том числе подсказанных пользователями. Среди них запуск альфа-тестирования прошивки на базе Android 6.0, управление десктопом с телефона и даже запуск Debian без необходимости подключать смартфон к монитору. Мы будем следить за развитием.

Комментарии (1)

  • У Ubuntu была такая идея, жаль не поддержали производители телефонов :(

Похожие материалы