LINUX.ORG.RU

Android 8.1.0. Termux + XFCE.

 , ,


4

3

Теперь можно использовать XFCE в Android даже без рута. Потихоньку с чуваками пилим Termux для лучшего пользовательского опыта.

На телефонах возможно не очень удобно, это скорее для планшетов.

Это один из первых тестовых запусков на обновленной пакетной базе. В репозиториях уже есть Thunar, все остальное должно появиться в скором времени.

Тема и конфигурация окружения дефолтные, собраны прямо с https://git.xfce.org/ .

>>> Просмотр (640x1280, 70 Kb)



Проверено: Shaman007 ()

Ответ на: комментарий от ttywizard

Можно в условиях отсутсвия компа прямо на планшете заниматся разработкой программ/редактированием документов в нормальном редакторе/прочим. git, geany, gcc, python и другие утилиты работают без сбоев. Есть apache, nginx, sql'и всякие. Bluetooth/OTG мышка и клава и планшет превращается в полноценное рабочее место. По сути когда я начинал делать плагин Termux:X11 и портировать пакеты XFCE я задумывал сделать некий аналог MaruOS, который работает без рута и без перепрошивки. Просто работает на любом устройстве. Termux дал хорошую базу для этого. Если какой-либо программы в репозиториях нет - можно запросить пакет либо портировать самому, благо формат build.sh в termux-packages простой. Создал файл, указал описание, ссылку на tar.gz, версию, дал SHA256, может патч закинуть на совместимость с андроидом или самим термуксом и дальше он сам разберется что делать.

twaik
() автор топика

Это всё здорово, но можно технический обзор? Чем это окружение ограничено? Виртуалка, чрут? Что с видеодрайвером и доступом по к видеокарте? Может ли андроид решить, что оно не нужно и всё надо позавершать?

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

Это всё здорово, но можно технический обзор? Чем это окружение ограничено? Виртуалка, чрут? Что с видеодрайвером и доступом по к видеокарте? Может ли андроид решить, что оно не нужно и всё надо позавершать?

К сожалению я не силен в технических обзорах. Попробую обьяснить что смогу.

Есть Termux. По сути это обычный терминальный эмулятор под Android, но есть небольшой нюанс. У него есть свой набор команд и свой PATH. У него есть и bash, и busybox, и всякая прочая мудапоехрень. Также у него есть apt и свои репозитории с пакетами. Все это работает внутри папки /data/data/com.termux/files/usr, указанной в качестве переменной окружения $PREFIX. Есть пользовательская директория /data/data/com.termux/files/home, которая указана в качестве переменной окружения $HOME. Все пакеты скомпилированы под архитектуру целевого устройства и адаптированы под работу внутри $PREFIX. Так что виртуалка или chroot не нужны. Окружение может получить доступ к карте памяти (команда termux-setup-storage, после завершения в $HOME появляются симлинки на некоторые папки в пользовательском хранилище). Есть доступ к звуку через SLES (в Termux есть модули pulseaudio, которые с ним работают).

По поводу видео. Аппаратного ускорения пока нет. Плагин Termux:X11 это Wayland-сервер. Когда я начинал его писать я спрашивал советов здесь но внятных ответов так и не получил :) .

В качестве X-сервера выступает Xwayland. Если он запускается не в режиме интеграции с композитором, то он просто получает от композитора wl_surface для RootWindow, еще один под курсор, запрашивает toplevel mode для RootWindow и cursor mode для курсора. По сути мой композитор ничего не композирует, а просто выводит 2 wl_surface'а на дисплей через GLES. Система APK+Xwayland хороша тем, что все еще можно указать Xwayland в качестве альтернативы $PREFIX/bin/X и запускать его вместе с пользовательской сессией через startx.

По поводу аппаратного ускорения. В Android NDK нет инструментов для создания своей реализации EGLNativeWindowType. В старых версиях андроида (до 8) также нельзя использовать ANativeBuffer (для EGL это EGLClientBuffer, если не ошибаюсь). Можно было бы конечно использовать наработки libhybris чтобы это обойти, но на части устройств libui и gralloc находятся в сером списке библиотек и подгрузить их через dlopen не получится. Похоже единственный вариант здесь - использовать что-то вроде gl_streaming или emugl (что предпочтительнее). gl_streaming не доработан и пока что работает в синхронном режиме с одним клиентом, также нет поддержки клиентских буферов. emugl еще надо допортировать чтобы его можно было скомпилировать в Termux, и чтобы серверная часть могла запускаться в плагине.

Может ли андроид решить, что оно не нужно и всё надо позавершать?

В теории такое произойти может. Поэтому в проекте решили вынести все в Service. Чтобы андроид не схлопывал все к чертям собачьим сервис ввыводит Notification (политка андроида). Так что аварийное схлопывание при недостатке оперативы возможно, но маловероятно.

По поводу репозиториев. Все пакеты в репозиториях скомпилированы при помощи NDK. termux-packages адаптирует и патчит кросс-компиляторы NDK для того, чтобы autoconf, cmake, meson и всякие прочие самописные скрипты сборки проектов (как к примеру в openssl, если не ошибаюсь) могли собираться с минимальным количеством патчей. По поводу патчей: в основном патчи нужны чтобы проги не ломились в папки андроида и не пытались создавать там свои грязные файлы. Пути типа, к примеру, /usr/bin или /etc меняются на /data/data/com.termux/files/usr/bin и /data/data/com.termux/files/usr/etc соответственно. Другие патчи отключают функциональность, которая не может быть реализована в реалиях андроида. К примеру в sshd отключили использование pam и внедрили возможность авторизации по одному лишь паролю. Для pulseaudio отключили вывод в alsa и прочие модули, но взамен дали вывод и ввод звука через OpenSL ES. Ну и всякое такое прочее.

Также у termux есть свои пакеты, которые позволяют взаимодействовать с андроидом. Есть свой am, потому что варианты использования андроидового am зависят от версии этого самого андроида. Есть termux-api, который позволяет прямо из скриптов управлять различными системами андроида, доступными самому термуксу (камера, вспышка, сети, прочее).

twaik
() автор топика
Ответ на: комментарий от kirill_rrr

Это всё здорово, но можно технический обзор?

Если ты про обзор графического окружения, то пока все довольно грустно. Есть конечно aterm, но даже screenfetch там отображается некорректно, хотя всякие mc работают. Панели, WM и прочие я запустил стоковые из XFCE но я ничего толком даже не настраивал, поэтому ничего особо сказать не могу. Но программы из менюшки запускаются просто отлично :) . Другие пакеты типа Geany, Thunar, Pcmanfm, Openbox, Fluxbox и прочие вроде работают без сбоев. При наличии хардварных мыши и клавиатуры планшет без проблем можно использовать как нетбук для разработки и тестирования программ или в качестве многофункционального мобильного WEB, SQL или прочего сервера. Я слышал про чувака, который использовал Linux Deploy на телефоне в море, потому что только так он мог использовать программы, необходимые ему в работе. Именно на подобных чуваков я и ориентируюсь, пока пишу этот чертов плагин. Сейчас вроде написал режим тачпада для ввода на случай, если неудобно использовать обычный тачевый режим. Это позволит использовать графическое окружение прямо на ходу, без необходимости в хардварной мыши. Старался ориентироваться на поведение xf86-input-synaptics, но программист из меня довольно хреновый поэтому получилось что получилось, надеюсь слишком явных косяков я не сделал.

Как я и говорил раньше, я стараюсь сделать что-то очень похожее на MaruOS. Подключил мышь и клаву и работаешь. Мобильное рабочее место, всегда с собой. В командировки ездить самое то.

twaik
() автор топика
Ответ на: комментарий от twaik

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

Да, спасибо, стало достаточно понятно. Жаль что через костыли всё и пакеты специально под это окружение надо собирать, но выглядит всё таки перспективно.

kirill_rrr ★★★★★
()
Ответ на: комментарий от kirill_rrr

Можно и не собирать. Если нужна программа то можно прям на устройстве собрать. Все пакеты собираются с поддержкой статической линковки, потом создается два пакета: один с динамической либой и конфигами/картинками прочей дребеденью, второй со статической либой и хедерами/pkgconfig'ами/etc, прочей дребеденью которая нужна при разработке. Все это можно поставить на устройство и прям там собрать недостающую прогу. Хотя когда релизнется новый андроид собирать будет нельзя. Новая политика гугла: все исполняемые файлы, запускаемые или библиотеки, должны будут лежать в /data/data/<package name>/libs, котора создается при установке/обновлении apk и она read-only для всех кроме package manager'a. Вот тогда точно будет жопа. Придется перепиливать весь термукс с оглядкой на эту фичу.

twaik
() автор топика
Ответ на: комментарий от mittorn

К сожалению так не получится. Придется для каждого (если надо) пакета создавать набор патчей, которые как минимум меняют префикс, потому что немногие разработчики задумываются о том, что, к примеру, папка /etc в дистрибутиве может быть доступна по другому адресу.

twaik
() автор топика
Ответ на: комментарий от twaik

Я немного про другое - про полноценный дистр с bionic libc. Как это делают с musl, uclibc
Хотя патчи нужные как я понимаю уже есть:
https://wiki.gentoo.org/wiki/Project:Prefix

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от sehellion

Он уже есть в Termux. Просто в XFCE в качестве дефолтного идет XFCE.

twaik
() автор топика
Ответ на: комментарий от twaik

А можно ли это собрать для нормального линукса в теории (чтоб, к примеру, делать 3D-ускорение в иксах через драйвер, поддерживающий только Wayland)?

Athor ★★
()
Ответ на: комментарий от Athor

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

twaik
() автор топика
Ответ на: комментарий от Athor

В принципе, если Xwayland сможет все это при композиции укладывать в byte buffer, то проблемы никакой нет.

twaik
() автор топика
Ответ на: комментарий от Athor

Проблема в том, что для того, чтобы использовать аппаратное ускорение в андроиде надо сделать свой EGLNativeWindowType, потому что NDK не позволяет использовать андроидовские реализации Surface и GraphicBuffer. Под обычным линуксом glxgears в моем композиторе с Xwayland в режиме shm показывает

6155 frames in 5.0 seconds = 1230.934 FPS
6366 frames in 5.0 seconds = 1273.088 FPS
6293 frames in 5.0 seconds = 1258.460 FPS
5400 frames in 5.0 seconds = 1079.990 FPS
5033 frames in 5.0 seconds = 1006.065 FPS
5024 frames in 5.0 seconds = 1004.681 FPS
5075 frames in 5.0 seconds = 1014.669 FPS
4956 frames in 5.0 seconds = 991.139 FPS
Если просто запустить без моего композитора он запускается с VSync.
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
305 frames in 5.0 seconds = 60.895 FPS
300 frames in 5.0 seconds = 59.994 FPS
300 frames in 5.0 seconds = 59.992 FPS
300 frames in 5.0 seconds = 59.995 FPS
300 frames in 5.0 seconds = 59.994 FPS
То есть похоже что Xorg может использовать GLX даже без поддержки моим композитором. Но если хочешь заменить DDX, то тебе стоит знать что мой композитор работает только со связкой EGL+GLES. Как ты собрался получить EGL окно без Xorg с его расширениями?

twaik
() автор топика

Если там Wayland, то не проще запилить вместо XFCE - sway? Да и инструкцию по пунктам не помешало бы.

qtm ★★★
()
Последнее исправление: qtm (всего исправлений: 1)
Ответ на: комментарий от qtm

Wayland-сервер там не для того, чтобы выступать в роли композитора. Он просто выводит картинку из Xwayland. А wlroots, на котором основан Sway, под андроид я скомпилить не смог. Рендерер под андроидовую реализацию EGL/GLES2 не заточен. Поверь, единственное, что правда скомпилилось и запустилось это Weston с pixman рендерером. Я справедливо решил что целый Weston там не нужен, потому что выводить на экран всего два surface обьекта: основной вывод Xwayland и курсор. Все.

twaik
() автор топика
Ответ на: комментарий от kirill_rrr

Чем это окружение ограничено?

Пространством исполнения самого Termux, за исключением использования системных фич типа звонков, смс и копания в фс самого устройства

Виртуалка, чрут?

Что-то типа userspace chroot

Может ли андроид решить, что оно не нужно и всё надо позавершать?

Нет. Стоит хак, чтобы уведомление termux всегда висело чтобы не убилось.

xDShot ★★★★★
()
Ответ на: комментарий от kirill_rrr

Это всё здорово, но можно технический обзор?

Termux внутри себя запускает специально скомпилированные бинарники. Работает только на Android >=5.0, потому что с этой версии появилась такая возможность.

xDShot ★★★★★
()
Ответ на: комментарий от xDShot

Нет. Стоит хак, чтобы уведомление termux всегда висело чтобы не убилось.

Не на всех устройствах он работает корректно. https://stackoverflow.com/questions/52425222/foreground-service-getting-kille... . + У некоторых устройств нужно отключать настройки энергосбережения чтобы приложение оставалось в памяти.

Работает только на Android >=5.0, потому что с этой версии появилась такая возможность.

Эта возможность существовала и раньше, просто поддержка версии андроида ниже создает намного больше гемора. А если брать только 5+ то поддержка покрывает 95+% устройств.

twaik
() автор топика

Можно таки ещё раз пояснить, это X11 под андрюшей рабочий? Или это андрюша в gnu/linux дистре с xfce вместо рабочего стола?

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Это Termux. В нем кросскомпилированные утилиты из Debian, слинкованные с bionic. То есть по сути это все Android.

twaik
() автор топика
Ответ на: комментарий от pon4ik

Чтобы запустить TermuxX11 его сначала надо скомпилить. Для него еще не было релиза. А вместе с ним и termux-app, потому что без этого он не установится. если не хочешь морочиться с компиляцией обоих приложений на своем компе, то можно использовать Xvnc.

twaik
() автор топика

Потихоньку с чуваками пилим Termux

вы упоротые, вы знаете? зачем портировать мир на bionic превозмогая боль, если можно не портировать?

t184256 ★★★★★
()
Ответ на: комментарий от kirill_rrr

прикладной софт патчится, собирается ведроидным тулчейном, линкуется с bionic и получается бинарь под Android. Стандартным андроидным механизмом ограничения приложений. Нет, нет. Боль и нишиша. Может.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

если можно не портировать?

У меня лежит как минимум 2 устройства, где не работает proot, так что не портировать - не вариант. А для chroot нужен root, так что тоже не вариант. Так что превозмогать боль пока единственный универсальный вариант запускать нужные утилиты на любом устройстве.

twaik
() автор топика
Ответ на: комментарий от twaik

Ага, я git на смартфоне использовал в termux для отправки простых коммитов и/или rebase. Но исключительно в терминале. С внешней клавиатурой удобнее б было, но её таскать лень.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от twaik

Что конкретно не работает в proot? Там никакой магии нет.

t184256 ★★★★★
()
Ответ на: комментарий от twaik

Вот срань! Хана моему маленькому дистру =(((

А как именно это будет энфорситься? Звучит очень нетривиально.

t184256 ★★★★★
()
Ответ на: комментарий от grem

Только чтобы всё дерево portage не качать, приходится сначала настроить sparse checkout отдельных деректорий и качать одну ветку, тогда вместо 900 мб скачивается всего ~60 мб.

grem ★★★★★
()
Ответ на: комментарий от t184256

В issue на гите обсуждение велось. Кстати второй вариант решения данной проблемы - собирать термукс под младший сдк, тогда новый андроид не станет накладывать ему таких ограничений

SR_team ★★★★★
()
Ответ на: комментарий от SR_team

Не, старый sparkle вроде как сегфолтится на arm64, мы решили отказаться от него. Что за иссушка?

twaik
() автор топика
Ответ на: комментарий от grem

Если Gentoo Project Prefix может собираться под uclibc то проблем нет. Можно собирать и на компе с терабайтным винтом. Можно оставить термуксовскую систему сборки, но адаптировать ее под portage, тогда останется пакетная система, но при этом пакеты будут собираться не на устройстве.

twaik
() автор топика
Ответ на: комментарий от SR_team

Это со временем тоже перестанет быть альтернативой. Google Play с каждым годом поднимает минимальную версию SDK.

twaik
() автор топика
Ответ на: комментарий от twaik

в нормальном редакторе

Micro, 920 text editor. И проблема не в редакторах, а в экранной клавиатуре.

Не могу придумать, какой дестктопный графический софт я бы хотел запустить на планшете, здесь и так всё есть. Причём полезных графических программ на Андроиде гораздо больше чем на десктопе.

Но прикольно, да.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.