Это графическое окружение X11, с настоящим управлением окнами и композингом: FireFox лампово воспроизводит youtube (аудио тоже работает!), статус-бар с системной статистикой. Запускается за секунды и выглядит довольно шустрым

Всем привет! Представляю вашему вниманию перевод статьи «Coding without a laptop – Two weeks with AR glasses and Linux-On-Android». Перевод сделал человек с помощью мозга, а не LLM.


Недавно я сделал открытие, которое взорвало мой мозг! Полноценный Линукс десктоп можно запустить на смартфоне. И это не какая-нибудь неуклюжая виртуалка и не полная замена операционной системы типа Ubuntu One или postmarketOS. А нативная сборка arm64, работающая внутри chroot контейнера на Android.

Наверняка вы скажете: «Хорошо — это классно, но для чего?». Поэтому я пока опустил подробности, как это устроено. Справедливое замечание: это что‑то новенькое, но, очевидно, бесполезное.

Дело было так: на подходе была 2-х недельная поездка и мне нужно было продолжить работать в этот период. Я был слегка одержим мыслью, что я смогу оставить свой ноутбук дома и работать со смартфона. Так, а что если дополнить его складной клавиатурой и AR-очками?

Вот читалка электронных книг/аудиокниг на основе CRDT, над которой я работаю, под полноценным Linux и с подключением к отладчику Flutter.

Самое приятное — это то, что и очки, и клавиатура спокойно помещаются в карманах. Поскольку телефон я всё равно беру с собой, это не будет большим дополнением.

Железо 

Клавиатура. На маркет-плейсах достаточно небольших складных клавиатур, и я просмотрел всего 5, пока нашёл что-то подходящее. Я пробовал несколько вариантов с трекпадом, но они были либо слишком большими, либо их клавиши были плотно прижаты друг к другу ради компактности. Приложение Termux: X11 позволяет использовать экран для перемещения курсора мыши, и этого оказалось вполне достаточно. Я в любом случае пользуюсь преимущественно клавиатурой, так что большую часть времени не нуждаюсь в мыши.

Очки. Хотите верьте, хотите нет, но очки дополненной реальности уже довольно хороши. Приставка AR вводит в заблуждение. На самом деле это просто маленький OLED дисплей, прикреплёный к внутренней стороне линзы очков. Мне выпала возможность купить слегка б/у Xreal Air 2 Pros на ebay. Они дают картинку в 1080p с углом обзора в 46°. Некоторые новые модели могут образовывать большой виртуальный дисплей вместо прикреплёного к голове изображения, как в моём случае. Я к такой конфигурации отношусь довольно скептично. По крайней мере, пока разрешение и угол обзора не улучшаться.

Смартфон. К сожалению, мне пришлось обновить и телефон, потому что для очков нужна поддержка альтернативного режима DisplayPort. В моём старом потрёпаном телефоне такой нет.

Начиная с Pixel 8, Гугл пошёл по пути наименьшем зла и не стал программно блокировать режим DisplayPort (что заставляет людей покупать Chromecast? Не знаю.). Так что я купил б/у Pixel 8 Pro на eBay.

Затраты составили:

  • б/у Pixel 8 Pro – $350

  • б/у Xreal Air 2 Pro – $260

  • Складная клавиатура Smaers – $18

Всего: $628. Хотя телефон я мог бы не считать, потому что мне всё равно пора его обновить.

После пары послеобеденных экспериментов я почувствовал уверенность, что наверняка справлюсь с работой в течении 2-х недель. Имея такую конструкцию.

Мои выводы:

Что ж, после использования этой конструкции в самолёте, кафе, в гостях у разных родственников, в парках, в конце-концов, сидя в машине. Думаю, у меня есть несколько аргументов в ответ на фразу: «Зачем тебе это понадобилось, если существует ноутбук?»

  1. Этот набор действительно влазит в карманы. Никакого багажа, ничего лишнего.

  2. Я могу пользоваться этим на улице при ярком солнце. Я написал большую часть этого поста, сидя в парке за столиком для пикника. Нет проблем с бликами и яркостью экрана.

  3. Я могу расположиться в узком пространстве. В самолёте такая конструкция гораздо удобнее ноутбука. В некоторых кофейнях так же узкие барные стойки. Они слишком малы для ноутбука, но не для этого.

  4. У телефона есть мобильная сеть. Так что я больше не завишу от Wi-Fi.

Иначе говоря, есть чувство свободы, которое не получить с ноутбуком. И я могу чаще бывать на свежем воздухе. Как разработчик ПО я устал от одной вещи — чувство, что ты всё время проводишь взаперти перед экраном. Но, используя такую конструкцию, я могу прогуляться в кофейню, поработать там час-другой, а потом прогулятся в парк и поработать там пару часов. Это потрясающее чувство свободы.

Но должен признать, всё не так радужно. Были и свои особенности во всём этом. Что ж, вот мой опыт:

The Linux Environment

Linux-on-android в конечном счёте, великолепен, но я не хочу скрыть факт, что сделать это было не просто. В моём понимании достаточной укомплектованности дистрибутив должен включать Neovim, lsp-серверы (Nim, Python, Dart, Js), Node и Flutter (с поддержкой сборки и для десктопа, и для веба, запуск и отладку).

Не буду описывать все свои действия по сборке (но, если кому-нибудь интересно, я могу), ограничусь лишь ссылками по теме [прим. переводчика: в конце раздела]. Обрисую картину в целом, исходя из полученного опыта.

Вот 4 совершенно разных подхода к Linux-on-Android:

  • Виртуальная машина с эмулятором x86_64.

  • TermuxAndroid-приложение, сочетающее в себе эмулятор терминала, облегчённый userland и набор портированных программ.

  • Бинарный дистрибутив для Arm64, запущенный в chroot. По сути, это обычная папка с програмами, которые будут запущены в изолированной от основной файловой системы среде. Подчеркну, что для этого требуется рутануть устройство.

  • Proot. Это тот же chroot, но он не использует системные вызовы, требующие права root, как chroot.

Потратив много времени на эксперименты, я остановился на chroot-подходе*. На самом деле мне не хотелось рутить телефон, но иначе я не мог реализовать задуманное. Виртуальная машина оказалась медленной и не уклюжей, как и proot. Я был удивлён, сколько всего можно запустить прямо в Termux. Но в Android испольуется C-библиотека Bionic, и большинство программ требует перекомпиляции под эту платформу для запуска. Это и другие различия в окружении сильно ограничивают возможности. Насколько я могу судить, chroot не сказывается на производительности, и (по большей части) всё, что собрано под Arm64, будет работать.

Касаемо дистрибутива (а я перелопатил много). важно следующее:

  • Легковесность, всё таки это телефон.

  • Очевидно, поддержка Amr64.

  • Отсутствие Systemd. (я никогда не мог заставить это работать в chroot. Не ясно, возможно ли это).

  • Должен быть обкатан и спокойно работать в chroot. Arch Linux для Arm, например, имеет ряд странных причуд. Например, fakeroot не работает.

  • Построен на Glibc. Я думал, что Alpine станет моим решением, но мне нужен Flutter/Dart для работы, и я не смог запустить их с musl. Для кого-то это может быть не существенно.

В итоге мне подошёл тарбол Void Linux с Glibc, и он прекрасно работает.

Я использую i3 (тайловы менеджер окон, ориетированный на управление с клавиатуры), но я так же пробовал Xface. Он работает без проблем.

Ссылки по теме:

AR Очки

Качество изображения просто фантастическое. Вы видите яркие пиксели на красивом OLED дисплее. Но поскольку каждый пиксель отражается от линзы, чёрный пиксель выглядит просто прозрачно. Так что белый текст в терминале с чёрным фоном будет выглядеть, будто он парит в пространстве. На сам деле, если вы хотите ощущать меньше экрана и больше мира вокруг себя, это то, что нужно, но так же это может и отвлекать. 

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

Очевидно, невозможно передать качество картинки через фото, но поверьте мне, изображение в очках превосходное. Здесь электрохроматическое затемнение отключено, так что текст просто плавает на фоне пейзажа. Очки можно затемнить до достижения желаемой видимости.

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

Возможно, я себя накручиваю, но мне кажется, что некоторые люди посчитали меня идиотом.

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

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

Так же отмечу: я пробовал настроить мульдисплейный режим Андроида, и это был кошмар. В конечном счёте, я использовал это приложение: изменил разрешение на 1080p и отзеркалил вывод на очки. Это оказалось очень удобно, потому что вы можете снять очки и продолжить работать с телефоном, если устанете от них.

Фокусная плоскость очков - 10 футов (3.048 метров). Если вы используете скринридер для ноутбука, то, скорее всего, он вам не потребуется.

Клавиатура

Вздох. Кто-нибудь мог бы сделать нормальную складную клавиатуру? Этот кусок пластика за 18$ не стоит большего. И это самое слабое звено конструкции, что слегка не ожиданно. Клавиатура выглядит более дешмански и громоздко, чем должна быть. Её нельзя заблокировать в разложенном сотоянии (это означает, что не получится положить её на колени и поработать), у неё нет программного переопределения клавиш.

Наверное, я бы мог продолжить поиски на Alibaba и, возможно, нашёл бы что-то получше. Но я бы точно заплатил в 10 раз больше за что-то стоящее.

Производительность

В качестве примитивного бенчмарка я компилировал Nim из исходников:

  • Мой Framework 13 Core Ultra 5 125H собрал его за 4:15 минут

  • Мой Thinkpad T450s с Intel Core i5-5300U – 14:20 минут

  • Pixel 8 Pro –  11:20 минут

Я бы сказал, что опыт подтверждает эти числа. Быстрее, чем Thinkpad, но определённо медленее, чем Framework.

Кстати, я не пожалел, что слегка переплатил за Pixel Pro, потому что в нём 12 Гб рамки, а в обычном Pixel 8, всего 8 Гб. Это важно, потому что расход RAM часто заполняет все 12 Гб.

Батарея

В очках и с затемнённым экраном, телефон потребляет немного больще 3 Ватт в простое, и от 5 до 10 при компиляции или серьёзной нагрузке. В среднем я разряжал батарею на 15% в час. Так, что 4-5 часов думать о подзарядке не придётся, но я уверен, что вам в любом случае не захочется находиться в очках дольше.

Продолжу ли я этим пользоваться?

Я благополучно прошёл стадию непривычности, и как ни странно, мой ответ —да. Конечно, если у меня будет с собой ноутбук, я не потянусь за телефоном, но и в тоже время я не потянусь за ноутбуком, если есть возможность работать за десктопным компьютером. Но я возьму с собой такую конструкцию с телефоном, когда не смогу взять с собой ноутбук или когда мне долгое время будет не хватать свободы и не будет другого пути её достичь.

Меня так же потрясает дешивизна этого решения, особенно в сравнении, например, с Apple Visio Pro. При этом довольно забавно, что он не соответствует моим требованиям. Он не влезет в карман и поможет программировать не больше, чем iPhone. Полагаю, его можно использовать на природе, но глаза будут заперты в ящик, так что это не имеет значения.

Думаю, в действительности это и есть будущее ультра-мобильной разработки ПО. Особенно с учётом, что AR очки подолжают совершенствоваться, а Linux остаётся гибким и функциональным. Несмотря на трудности, теперь я могу бывать в разных местах, чего раньше не мог. И я счастлив от этого.


Примечания переводчика:

*Когда автор говорит про chroot, он имеет в виду что запустил его в приложении Termux.

Дополнительные материалы:

Здесь, в разделе «Compatibility» можно найти список устройств с заводской поддержкой DisplayPort. (ссылка от: @okhsunrog)

Ещё один список устройств с Display Port, и ещё один (большой но более сложный в навигации). (ссылки от: @NutsUnderline)

P.S. Спасибо за внимание :)