Čím se distribuce Ubuntu Touch s uživatelským rozhraním Lomiri liší od Ubuntu pro stolní počítače? Hlavním rozdílem je samozřejmě uživatelské rozhraní, které je přizpůsobené pro ovládání gesty na mobilním telefonu. K tomu používá vlastní SDK a API, ve kterém je napsané pár základních vlastních aplikací pro telefonování apod. Mezi další odlišnosti patří souborový systém pouze pro čtení. Dále se aplikace instalují pomocí vlastního balíčkovacího systému. Pro spouštění aplikací pro stolního počítače se používá Libertine a kontejnery. A pomocí Waydroidu je možné spouštět i aplikace napsané pro Android.

Souborový systém pouze pro čtení

Za normálních okolností je adresář / pouze pro čtení. Části systému, do kterých se dá zapisovat, jsou připojené pomocí bind mountu do /userdata. Jsou to /home /var/log a další. Důvodem proč je zápis omezen je stabilita a funkčnost systému, zejména odolnost vůči poškození od ostatních aplikací, které mohou “neopatrností” přepsat nějaký soubor anebo způsobit konflikt při aktualizacích. Dále to umožňuje například jednoduše provést reset do továrního nastavení.

Dalším specifikem ovlivňující přehled jaké jsou a kde jsou připojené jednotlivé svazky se komplikuje používáním LXC kontejnerů a mezivrstvy halium. Jedná se o hardware abstraction layer, tedy mezivrstvu, která zpřístupňuje hardware přes volání Android HAL a jádra od výrobce. Díky tomu lze použít rootfs původního Androidu a jednotlivé ovladače a související služby Androidu spustit v LXC kontejneru. Toto umožňuje běh “tradičního” linuxu v kombinaci s jádrem pro Android.

Libertine

Základem Ubuntu Touch je to stejné Ubuntu, které se používá na serverech anebo stolních počítačích. Pro instalaci a spouštění aplikací z běžného Ubuntu má však Ubuntu Touch aplikaci Libertine. Jedná se o uživatelské rozhraní pro instalaci balíčků do LXC kontejnerů. Při instalaci se jednoduše zadá název balíčků jako byste použili apt install. Samozřejmě lze spouštět i aplikace včetně jejich uživatelského rozhraní. Ikonka pro spuštění takto nainstalované aplikace se normálně objeví na ploše. Jak to celé funguje lze shlédnou například ve videu https://www.youtube.com/watch?v=L5-TtUnIgbg

Problémem však je, že tyto aplikace nejsou ve většině případů vhodné pro malé obrazovky telefonů. Naštěstí existuje tzv. convergence režim, ve kterém telefon po připojení k velkému displeji automaticky přepne uživatelské rozhraní, umožňující měnit velikosti oken, a další parametry obvyklé na stolním počítači. Současně se samotný telefon promění na touchpad.

Waydroid

Kromě jiného je zde možné spouštět I aplikace pro Android. K tomu se používá Waydroid, který spustí aplikaci v LXC kontejneru. Zobrazení uživatelského rozhraní je akcelerovano pomocí mesa, zajišťující pouze minimální režii navíc. V případě, že telefon používá jádro a souborový systém androidu, je možné jako chroot pro kontejner použít přímo tento “nativní” Android. V případě vanilkového linuxového jádra, jako je například na telefonech PinePhone, se stáhne rootfs z LineageOS.

Samotné aplikace lze rozdělit do čtyř kategorií:

  • Bez problémů fungující.
  • Aplikace používající google play services. 
  • Aplikace ověřující konzistenci systému a aktivně bránící se spuštění na jiných OS.
  • Aplikace používající speciální anebo neimplementované prvky.

Google Play Services jsou knihovny, které zpřístupňují některé služby Google jako například přihlášení OAuth2. Problém však je v jejich licenci, která brání výrobcům přeinstalovat je na zařízení, které nemá Google Android. Některé aplikace kontrolují jestli není odemčený bootloader a jestli je spuštěný operační systém podepsaný. Zbývající aplikace jsou “exotické” například tím, že používají nějaké API nebo hardware, který není podporovaný.

Kromě režie navíc spojené se spouštěním v kontejneru se lze setkat s problémy vyplývající ze samotné spolupráce dvou operačních systémů. Projevuje se to například při uspávání systému, kdy při používání aplikaci jako je Whatsapp dochází k rychlejšímu vybíjení telefonu než za použití nativních aplikací jako například Teleports (Telegram klient).

Waydroid je pouze berlička, kterou je navíc potřeba do systému ručně doinstalovat. Přestože je Waydroid do velké míry funkční, jedná s i nadále o experimentální projekt, a nelze očekávat, že všechny aplikace budou fungovat.

Clickable

Nativní aplikace jsou napsány v Qt + QML a instalované pomocí Click balíčků. Pro vytváření těchto balíčků se používá nástroj clickable. Jedná se o pythonový skript, který zapouzdřuje nástroje pro vývoj. Clickable obsahuje příkazy pro překlad, instalaci aplikace na zařízení, její spuštění, ladění a nakonec i nahrání do OpenStore. Celé je to postavené kolem dpkg a docker kontejnerů. Kontejnery v podstatě obsahují SDK se všemy potřebnými balíčky a závislosti ve správných verzích. Jedním přepínačem lze vybrat kontejner překlad pro architekturu ARM64 druhým zase pro x86.

Instalace vývojového prostředí spočívá v přidání PPA repozitáře a instalace balíčku pomocí apt install clickable. Prostředí se inicializuje příkazem clickable setup. Pro vygenerování nového projektu se použije clickable create a pro jeho spuštění a ladění příkaz clickable desktop. Při prvním spuštění se stáhne docker kontejner, přes který se provádí překlad a spuštění aplikace.

Výsledný Click soubor je v podstatě *.deb balíček s tím, že oproti standardnímu formátu má určitá omezení. Například další závislosti jsou zakázané, takže se používá pouze ubports framework. Pokud jsou potřeba další závislosti, tak se tzv. “bundlují”, což znamená že se prostě přiloží potřebné *.so do balíčku a při spuštění se nastaví proměnná prostředí LD_LIBRARY_PATH. Soubory aplikace se z balíčku instalují do /opt/click.ubuntu.com/jmeno-aplikace/1.0.0/ (podle verze). Nepočítá se s tím, že by byl tento adresář v PATH. Při vytváření ikonky na plochu (v *.desktop souboru) se používají relativní cesty (./run.sh). Uživatelské data, které vytváří aplikace, se pak ukládají standardně do domovského adresáře. Na obsah *.click balíčku se po jeho přejmenování na *.deb dá podívat třeba pomocí midnight commanderu.

Na první pohled by se mohlo zdát, že aplikace se spouští v kontejneru nebo s pomocí nějakého overlay. To však není díky výchozímu nastavení / pouze pro čtení potřeba. V tomto případě se totiž používají přímo knihovny nainstalované v dané verzi systému. Pro zajištění bezpečnosti a toho, aby aplikace nepřistupovala kam nemá, se používá AppArmor.

Loading

By Jozef Mlích

Software Developer at GreyCortex, NemoMobile contributor, Micro light aircraft pilot, OpenAlt Conference organizer

3 thoughts on “Jak funguje Ubuntu na telefonu”

Comments are closed.