<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Nura on Ivon&#39;s Blog</title>
    <link>https://ivonblog.com/en-us/tags/nura/</link>
    <description>Recent content in Nura on Ivon&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</managingEditor>
    <webMaster>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</webMaster>
    <copyright>You are welcome to share articles from Ivon&#39;s blog (ivonblog.com). Please cite the source article URL when sharing. All article content is licensed under a Creative Commons Attribution-ShareAlike 4.0 license, unless otherwise stated. For commercial use, please contact me first.</copyright>
    <lastBuildDate>Mon, 16 Mar 2026 01:00:00 +0800</lastBuildDate><atom:link href="https://ivonblog.com/en-us/tags/nura/index.xml" rel="self" type="application/rss+xml" />
    <follow_challenge>
      <feedId>56005902658351104</feedId>
      <userId>1132431067563556864</userId>
    </follow_challenge>
    
    
    <item>
      <title>Chasing the Future of the Open Source Linux Ecosystem (Phones, Tablets, and Laptops All Running Linux)</title>
      <link>https://ivonblog.com/en-us/posts/the-linux-mobile-ecosystem/</link>
      <pubDate>Mon, 16 Mar 2026 01:00:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/the-linux-mobile-ecosystem/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;If Apple users have their own ecosystem: iPhone, iPad, Mac, Apple Watch, AirPods&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Why can&amp;rsquo;t we Linux users build an open source ecosystem of our own?&lt;/p&gt;&#xA;&lt;p&gt;This is my final plan for that possible &amp;ldquo;doomsday&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Open source Linux ecosystem, together, strong.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/the-linux-mobile-ecosystem/images/3in1.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;The phone is Linux, the tablet is Linux, and the computer is also Linux.&lt;/p&gt;&#xA;&lt;p&gt;They are, respectively, Xiaomi Poco F1 + postmarketOS, Microsoft Surface Go 2 + Debian, and MSI Modern 15 + Fedora.&lt;/p&gt;&#xA;&lt;p&gt;Although the distributions are different, they are all GNU/Linux free software systems, not Android and not ChromeOS, and they all run Wayland desktop environments.&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;If Apple users have their own ecosystem: iPhone, iPad, Mac, Apple Watch, AirPods&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Why can&amp;rsquo;t we Linux users build an open source ecosystem of our own?&lt;/p&gt;&#xA;&lt;p&gt;This is my final plan for that possible &amp;ldquo;doomsday&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Open source Linux ecosystem, together, strong.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/the-linux-mobile-ecosystem/images/3in1.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;The phone is Linux, the tablet is Linux, and the computer is also Linux.&lt;/p&gt;&#xA;&lt;p&gt;They are, respectively, Xiaomi Poco F1 + postmarketOS, Microsoft Surface Go 2 + Debian, and MSI Modern 15 + Fedora.&lt;/p&gt;&#xA;&lt;p&gt;Although the distributions are different, they are all GNU/Linux free software systems, not Android and not ChromeOS, and they all run Wayland desktop environments.&lt;/p&gt;&#xA;&lt;p&gt;Originally, Ubuntu Touch seemed more likely to realize the old dream of a unified cross-platform UI. Today, maybe we can do it with the Phosh desktop + GTK. Personally, though, I do not care that much about making the cross-platform design language perfectly consistent. KDE Plasma&amp;rsquo;s QT desktop on the computer side is not bad either.&lt;/p&gt;&#xA;&lt;p&gt;The three devices can connect to each other through KDE Connect. Cloud syncing can be left to Nextcloud.&lt;/p&gt;&#xA;&lt;p&gt;I am considering putting Linux on a smartwatch and Bluetooth earbuds too. If I buy a game console someday, I will install Linux on that as well. The Steam Deck is already a qualified Linux gaming machine. If I get a PS5 or Switch, I would also flash Linux onto them (assuming emulators work properly; otherwise it is better to leave them alone). In reality, though, Bluetooth earbuds and smartwatches are technically not very likely to run Linux&amp;hellip; RTOS is more common there. Well, anything open source is welcome.&lt;/p&gt;&#xA;&lt;p&gt;Ideally, the hardware should also be made by companies that support Linux. Unfortunately, they cannot deliver good full-stack hardware without charging an absurd premium. So I can only use third-party hardware and rely on community effort to make it run Linux.&lt;/p&gt;&#xA;&lt;p&gt;Among companies that release hardware for a full-stack Linux ecosystem, the closest are probably &lt;a href=&#34;https://pine64.org/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Pine64&lt;/a&gt; and &lt;a href=&#34;https://puri.sm/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Purism&lt;/a&gt;. Pine64 in particular has released a pile of cheap ARM devices assembled from Chinese components, much cheaper than Purism&amp;rsquo;s boutique gear. I almost bought the whole Pine64 family bucket. Then I learned about their product quality and decided: never mind.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;This is the final plan I prepared for &amp;ldquo;doomsday&amp;rdquo;. If Android and iOS both get ruined, turn into mass surveillance machines, and strip people of their freedom, I will switch fully to Linux.&lt;/p&gt;&#xA;&lt;p&gt;In reality, among the three Linux-running devices at the start of this article, only the computer side with a keyboard attached is relatively mature. After all, the average Linux user is a keyboard warrior, typing vim commands at disturbing speed. As for mobile devices with touchscreens, Linux is still maladapted. In other words, Linux cannot survive without a keyboard.&lt;/p&gt;&#xA;&lt;p&gt;So for now, on mobile devices, I still mostly use an Android phone (near-stock system) + iPad.&lt;/p&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/the-linux-mobile-ecosystem/featured.webp" />
    </item>
    
    <item>
      <title>Phosh: An Introduction to the Touch Desktop Environment for Linux Phones</title>
      <link>https://ivonblog.com/en-us/posts/linux-phosh-de-introduction/</link>
      <pubDate>Sat, 28 Feb 2026 00:30:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/linux-phosh-de-introduction/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;Question: Can a Linux system survive without a keyboard, using only touch input?&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Introduction to Phosh&#xA;    &lt;div id=&#34;introduction-to-phosh&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction-to-phosh&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;There are not many Linux desktops designed for mobile devices.&lt;/p&gt;&#xA;&lt;p&gt;Existing KDE Plasma and GNOME desktops are hard to turn into touch-only interfaces, never mind tiny phone screens.&lt;/p&gt;&#xA;&lt;p&gt;Currently, the options are: Phosh, KDE Plasma Mobile, SXMO, and Lomiri.&lt;/p&gt;&#xA;&lt;p&gt;Phosh is simple and easy to use.&lt;/p&gt;&#xA;&lt;p&gt;Plasma Mobile crashes too easily and force-fits KDE desktop logic onto a phone.&lt;/p&gt;&#xA;&lt;p&gt;SXMO is modified from dwm and is for super hackers.&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;Question: Can a Linux system survive without a keyboard, using only touch input?&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Introduction to Phosh&#xA;    &lt;div id=&#34;introduction-to-phosh&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction-to-phosh&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;There are not many Linux desktops designed for mobile devices.&lt;/p&gt;&#xA;&lt;p&gt;Existing KDE Plasma and GNOME desktops are hard to turn into touch-only interfaces, never mind tiny phone screens.&lt;/p&gt;&#xA;&lt;p&gt;Currently, the options are: Phosh, KDE Plasma Mobile, SXMO, and Lomiri.&lt;/p&gt;&#xA;&lt;p&gt;Phosh is simple and easy to use.&lt;/p&gt;&#xA;&lt;p&gt;Plasma Mobile crashes too easily and force-fits KDE desktop logic onto a phone.&lt;/p&gt;&#xA;&lt;p&gt;SXMO is modified from dwm and is for super hackers.&lt;/p&gt;&#xA;&lt;p&gt;Lomiri is Ubuntu touch&amp;rsquo;s signature weapon.&lt;/p&gt;&#xA;&lt;p&gt;Introduction to Phosh: this desktop environment was developed by Purism, a free software company. In the United States, Purism is a crowdfunding-based company that sells free hardware, the kind even more extreme than System76 and Framework.&lt;/p&gt;&#xA;&lt;p&gt;They have also released a Linux tablet and Linux phone.&lt;/p&gt;&#xA;&lt;p&gt;Phosh is the user interface for their Librem 5 phone. Or, in Linux terminology, it is called a desktop environment.&lt;/p&gt;&#xA;&lt;p&gt;In the PinePhone community (sample size ~=1000), Phosh is the best-reviewed interface.&lt;/p&gt;&#xA;&lt;p&gt;Based on my personal PinePhone experience, I think Phosh has a very bare interface, but it is also the most stable one.&lt;/p&gt;&#xA;&lt;p&gt;There are not many full Wayland desktops right now. Besides KDE Plasma, GNOME, and Cosmic, most are pure compositors where you have to assemble the desktop components yourself. Not everyone wants to write a Sway config.&lt;/p&gt;&#xA;&lt;p&gt;Phosh is one of the few options that is reasonably lightweight while still having complete functionality.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Features&#xA;    &lt;div id=&#34;features&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#features&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Interaction designed for touchscreens first, mouse and keyboard second&lt;/li&gt;&#xA;&lt;li&gt;Provides an on-screen virtual keyboard&lt;/li&gt;&#xA;&lt;li&gt;Very low RAM usage, below 1GB&lt;/li&gt;&#xA;&lt;li&gt;Not performance-hungry. As long as GPU 3D works properly, it can run even on awful processors. Animations are still very smooth on the seriously underpowered PinePhone (Allwinner A64), PineTab 2 (Rockchip RK3566), and Surface Go 2 (Intel Pentium 4425y).&lt;/li&gt;&#xA;&lt;li&gt;Roughly speaking, system resource usage is close to Sway&lt;/li&gt;&#xA;&lt;li&gt;Phosh is very useful for users who want pure touch operation. Most phones do not have a keyboard and mouse, so running traditional Linux desktops like KDE Plasma or GNOME feels awkward. Phosh, which is specially optimized for touch gestures, is an excellent choice.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Technical Points&#xA;    &lt;div id=&#34;technical-points&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#technical-points&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Uses a Wayland compositor named Phoc, based on wlroots and written in Rust.&lt;/li&gt;&#xA;&lt;li&gt;Uses some GNOME technologies and can use GTK themes&lt;/li&gt;&#xA;&lt;li&gt;Can be used with either Systemd or OpenRC&lt;/li&gt;&#xA;&lt;li&gt;PipeWire manages audio&lt;/li&gt;&#xA;&lt;li&gt;ModemManager manages mobile networking&lt;/li&gt;&#xA;&lt;li&gt;Uses feedbackd to handle keyboard vibration events and iio-sensor-proxy to handle screen rotation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Interaction Model&#xA;    &lt;div id=&#34;interaction-model&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#interaction-model&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;To match how mobile devices are used, every program window is maximized. Tap to open, swipe up to close.&lt;/p&gt;&#xA;&lt;p&gt;There is also a touch keyboard, which automatically pops up where text should be entered.&lt;/p&gt;&#xA;&lt;p&gt;Connect a keyboard and enable Docked mode, and you can move windows. At that point it becomes a stacking compositor, and windows are allowed to overlap.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;App Store Ecosystem&#xA;    &lt;div id=&#34;app-store-ecosystem&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#app-store-ecosystem&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Only a small portion of Linux mobile systems are designed as immutable distros, so root is writable.&lt;/p&gt;&#xA;&lt;p&gt;They rely on &lt;code&gt;deb&lt;/code&gt; or &lt;code&gt;rpm&lt;/code&gt; packages packaged by each distribution. This easily creates fragmentation and inconsistent versions.&lt;/p&gt;&#xA;&lt;p&gt;If you want something distro-agnostic, use Flatpak or Snap.&lt;/p&gt;&#xA;&lt;p&gt;Phosh developers promote libhandy, allowing GTK programs to be optimized for touch devices. Many GTK4 programs on Flathub already have designs that adapt to screens of different sizes.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Chinese Input Method?&#xA;    &lt;div id=&#34;chinese-input-method&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#chinese-input-method&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Long-press the bottom pill, and the Phosh touch keyboard pops up.&lt;/p&gt;&#xA;&lt;p&gt;The current problem is that there is no Chinese keyboard.&lt;/p&gt;&#xA;&lt;p&gt;Luckily, it allows simulating physical keyboard input events.&lt;/p&gt;&#xA;&lt;p&gt;So you can use the touch keyboard to type Fcitx5 pinyin. It is a bit rough, yes.&lt;/p&gt;&#xA;&lt;p&gt;Phosh provides Linux mobile devices with a desktop that can be daily-driven without relying on a physical keyboard.&lt;/p&gt;&#xA;&lt;p&gt;The current issue is that the Phosh desktop is too minimal and purely function-oriented. Judging from recent updates, they are slowly adding practical features, such as a Pomodoro shortcut in the status bar.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://phosh.mobi/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Phosh - A user interface for your mobile phone &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wiki.postmarketos.org/wiki/Phosh&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Phosh - postmarketOS Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/linux-phosh-de-introduction/featured.webp" />
    </item>
    
    <item>
      <title>postmarketOS Installation Guide: Building an Installer with pmbootstrap</title>
      <link>https://ivonblog.com/en-us/posts/postmarketos-general-installation/</link>
      <pubDate>Fri, 10 Oct 2025 23:00:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/postmarketos-general-installation/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;What is postmarketOS? For an introduction to postmarketOS, see &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-introduction&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;this article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This article explains how to install postmarketOS with pmbootstrap. As long as your device is on the official support list, you can follow these steps and install postmarketOS onto the device.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/postmarketos-general-installation/images/header.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;pmbootstrap is the official tool provided by postmarketOS. It can build a postmarketOS system from scratch, with fully customizable package contents, so you can control exactly which packages are installed and build your own system.&lt;/p&gt;&#xA;&lt;p&gt;Besides building installation files, pmbootstrap is also used for porting new devices.&lt;/p&gt;&#xA;&lt;p&gt;In this article, Ivon demonstrates manually building postmarketOS installation files on a computer and then flashing them to a phone. My computer runs Ubuntu LTS. The phone is a Xiaomi Pocophone F1 with the latest stock firmware installed, an unlocked bootloader, and TWRP installed as the recovery.&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;What is postmarketOS? For an introduction to postmarketOS, see &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-introduction&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;this article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This article explains how to install postmarketOS with pmbootstrap. As long as your device is on the official support list, you can follow these steps and install postmarketOS onto the device.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/postmarketos-general-installation/images/header.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;pmbootstrap is the official tool provided by postmarketOS. It can build a postmarketOS system from scratch, with fully customizable package contents, so you can control exactly which packages are installed and build your own system.&lt;/p&gt;&#xA;&lt;p&gt;Besides building installation files, pmbootstrap is also used for porting new devices.&lt;/p&gt;&#xA;&lt;p&gt;In this article, Ivon demonstrates manually building postmarketOS installation files on a computer and then flashing them to a phone. My computer runs Ubuntu LTS. The phone is a Xiaomi Pocophone F1 with the latest stock firmware installed, an unlocked bootloader, and TWRP installed as the recovery.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. Install pmbootstrap&#xA;    &lt;div id=&#34;1-install-pmbootstrap&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-install-pmbootstrap&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Refer to the instructions on &lt;a href=&#34;https://wiki.postmarketos.org/wiki/Pmbootstrap&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;pmbootstrap - postmarketOS Wiki&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Because it needs to create a QEMU virtual machine, pmbootstrap only supports x86_64 computers.&lt;/p&gt;&#xA;&lt;p&gt;The first method, and the recommended one, is to install it with Git and a symbolic link. This gets you the latest version of pmbootstrap.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PWD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/pmbootstrap/pmbootstrap.py&amp;#34;&lt;/span&gt; ~/.local/bin/pmbootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;PATH=&amp;#34;$HOME/.local/bin:$PATH&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;The second method is to install pmbootstrap with your Linux package manager. This is only suitable for rolling-release distributions, because the postmarketOS development team keeps changing things. If your pmbootstrap package is too old, trouble tends to find you.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Alpine Linux, postmarketOS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk add pmbootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Arch Linux&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -S pmbootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Debian&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install pmbootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Fedora&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dnf install pmbootstrap&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. Choose a Device and Configure Options&#xA;    &lt;div id=&#34;2-choose-a-device-and-configure-options&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-choose-a-device-and-configure-options&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Run the &lt;code&gt;pmbootstrap init&lt;/code&gt; command:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Follow the prompts. During initialization, pmbootstrap downloads the latest device configuration files from GitLab.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Press Enter to use the default work directory (~/.local/var/pmbootstrap)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Work path: Enter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# For the update channel, choose edge, or enter the stable release number marked Recommended for best stability.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Channel: edge&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Choose the phone vendor.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Vendor: xiaomi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Choose the phone&amp;#39;s device codename.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device codename: beryllium&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Create the postmarketOS user account.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Username: User&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Choose the desktop environment. XFCE4 (X11) is suitable for devices without hardware acceleration; Phosh (Wayland, requires 3D acceleration) is suitable as a phone UI. You can install other desktop environments later after booting.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;User Interface: phosh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use systemd as the init system? Recommended. Older postmarketOS releases used OpenRC.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install systemd? &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;default/always/never&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: always&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Press Enter for everything else.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;This is the setup you need to do before building installation files for a specific device. You have to tell pmbootstrap what your postmarketOS system should look like before it can start building the files.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;3. Choose How to Install postmarketOS on the Phone&#xA;    &lt;div id=&#34;3-choose-how-to-install-postmarketos-on-the-phone&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#3-choose-how-to-install-postmarketos-on-the-phone&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;If this is an Android phone, make sure you install the latest stock firmware and unlock the bootloader before flashing.&lt;/p&gt;&#xA;&lt;p&gt;This step is where the installation files are built. There are three main ways to install postmarketOS:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Flash with fastboot (wipes data, recommended)&lt;/li&gt;&#xA;&lt;li&gt;Install to an SD card (does not affect the phone&amp;rsquo;s existing system, not recommended)&lt;/li&gt;&#xA;&lt;li&gt;Flash with a recovery ZIP (wipes data, too slow, not recommended)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There are also some stranger installation methods, listed later.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Flash with fastboot&#xA;    &lt;div id=&#34;flash-with-fastboot&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#flash-with-fastboot&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;This method wipes all data on the phone.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Build the installation files:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Put the phone into fastboot mode, connect it to the computer, and flash it:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap flasher flash_rootfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If the target partition is too small, add the --partition option and flash to another partition:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap flasher flash_rootfs --partition userdata&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Then flash the kernel to the boot partition and reboot:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap flasher flash_kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fastboot reboot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Install to an SD Card&#xA;    &lt;div id=&#34;install-to-an-sd-card&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#install-to-an-sd-card&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;This method does not modify the phone&amp;rsquo;s data and can be used for a dual-boot setup, but booting into postmarketOS requires running a command from the computer. Note that some phones may not support booting a &lt;code&gt;boot.img&lt;/code&gt; from fastboot.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Insert the SD card into the computer. Use &lt;code&gt;lsblk&lt;/code&gt; to confirm the SD card device name and mount point:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sdb      8:16   &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  29.7G  &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; disk /media/ivon/E8D8-4246&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Unmount it first:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;umount /media/ivon/E8D8-4246&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Then start the installation:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap install --sdcard&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/sdb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;pmbootstrap automatically formats the SD card and installs the system onto it. During the process, it asks you to create a user password and confirms again whether you want to format the SD card.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Next, insert the SD card into the phone, put the phone into fastboot mode, connect it to the computer, and enter this command to boot:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap flasher boot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Install with a Recovery ZIP&#xA;    &lt;div id=&#34;install-with-a-recovery-zip&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#install-with-a-recovery-zip&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;This method wipes all data on the phone. You can sideload the ZIP or transfer it to the phone and install it with TWRP. However, building the ZIP takes a lot of time.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Build the recovery ZIP. This takes about five minutes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap install --android-recovery-zip&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If you want to install to another larger partition, add the --partition option.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap install --android-recovery-zip --recovery-install-partition&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Connect the phone to the computer and reboot into TWRP. Find the generated &lt;code&gt;pmos-*.zip&lt;/code&gt; package in the computer&amp;rsquo;s work directory. For example, my file is under &lt;code&gt;~/.local/var/pmbootstrap/chroot_buildroot_aarch64/var/lib/postmarketos-android-recovery-installer&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Transfer the file to the phone, install it with TWRP, and then reboot.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Shut down pmbootstrap on the computer:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap shutdown&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Other Flashing Methods&#xA;    &lt;div id=&#34;other-flashing-methods&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#other-flashing-methods&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-netboot/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Netboot&lt;/a&gt;: temporarily boot with the postmarketOS &lt;code&gt;boot.img&lt;/code&gt;, then mount the filesystem from the computer without wiping the phone&amp;rsquo;s data.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gitlab.com/postmarketOS/pmbootstrap/-/issues/456&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Boot with Netcat&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gitlab.com/postmarketOS/pmbootstrap/-/merge_requests/547&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Boot with NFS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;4. Post-install Tweaks for postmarketOS&#xA;    &lt;div id=&#34;4-post-install-tweaks-for-postmarketos&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#4-post-install-tweaks-for-postmarketos&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Even if the phone fails to boot into the desktop, you can still SSH into it while it is connected to the computer with a USB cable:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# This IP is fixed. Just change the part before &amp;#34;@&amp;#34; to your username.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh user@172.16.42.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Assuming your device boots successfully into the postmarketOS desktop environment, and GPU acceleration, touch, networking, and audio all work, see this article next: &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-tips/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;postmarketOS tips&lt;/a&gt;. It covers postmarketOS configuration details and how to use postmarketOS as a phone operating system.&lt;/p&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/postmarketos-general-installation/featured.webp" />
    </item>
    
    <item>
      <title>Try Phone Linux on a Computer: postmarketOS QEMU/KVM Virtual Machine Installation Guide</title>
      <link>https://ivonblog.com/en-us/posts/postmarketos-qemu/</link>
      <pubDate>Fri, 27 Jun 2025 11:00:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/postmarketos-qemu/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;The real phone version of Linux, postmarketOS, can already be installed on many older Android phones and give them something useful to do again. postmarketOS is a mobile Linux distribution based on Alpine Linux. It can run applications, including docker. Linux apps designed specifically for phones are also slowly appearing.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-introduction/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;here&lt;/a&gt; to learn how to install postmarketOS.&lt;/p&gt;&#xA;&lt;p&gt;If your phone cannot flash postmarketOS, why not try it in a virtual machine on your computer? With a QEMU/KVM virtual machine, we can experience the current state of phone Linux interfaces. If you need to test apps for phone Linux, this VM is useful too.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://i.imgur.com/hMuiSMX.jpg&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;The real phone version of Linux, postmarketOS, can already be installed on many older Android phones and give them something useful to do again. postmarketOS is a mobile Linux distribution based on Alpine Linux. It can run applications, including docker. Linux apps designed specifically for phones are also slowly appearing.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-introduction/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;here&lt;/a&gt; to learn how to install postmarketOS.&lt;/p&gt;&#xA;&lt;p&gt;If your phone cannot flash postmarketOS, why not try it in a virtual machine on your computer? With a QEMU/KVM virtual machine, we can experience the current state of phone Linux interfaces. If you need to test apps for phone Linux, this VM is useful too.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://i.imgur.com/hMuiSMX.jpg&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;postmarketOS officially provides a &lt;code&gt;Generic x86_64 EFI System&lt;/code&gt; image, which can be installed on a normal x86 computer like other desktop GNU/Linux systems. However, postmarketOS is based on Alpine Linux, and the package repositories are mostly shared. So if you want to install it as your main desktop system, you might as well install Alpine Linux directly.&lt;/p&gt;&#xA;&lt;p&gt;The main goal of this article is to set up a development and testing environment so you can see what postmarketOS looks like. Note: virtual machines have a hard time providing graphics acceleration, so Wayland desktop environments may render with bugs.&lt;/p&gt;&#xA;&lt;p&gt;Below are two ways to install a postmarketOS virtual machine.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. Install a QEMU Virtual Machine with pmbootstrap&#xA;    &lt;div id=&#34;1-install-a-qemu-virtual-machine-with-pmbootstrap&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-install-a-qemu-virtual-machine-with-pmbootstrap&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Use pmbootstrap to customize your desktop environment. This method is suitable for developers.&lt;/p&gt;&#xA;&lt;p&gt;pmbootstrap is the toolchain used to generate postmarketOS installation files and port new device models. Because pmbootstrap creates a chroot environment, the computer must be running Linux. A virtual machine is fine. WSL is not.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In this example, the host computer is Ubuntu. Install pmbootstrap with git:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pmbootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PWD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/pmbootstrap.py&amp;#34;&lt;/span&gt; ~/.local/bin/pmbootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Enter the following command to start configuration:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Next, answer a series of questions. The steps are explained below.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Initialize.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Press Enter to use the default work directory (~/.local/var/pmbootstrap)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Work path: Enter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# For the update channel, choose edge, or enter the stable release marked Recommended for best stability.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Channel: edge&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Choose the vendor. Enter QEMU here.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Vendor: qemu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Choose the AMD64 version. AARCH64 cross-architecture emulation is very slow and cannot use KVM acceleration.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device codename: amd64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Create the pmOS user account.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Username: User&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Choose the desktop environment. Phosh, which only supports Wayland, may fail to start, so choose Plasma Mobile or GNOME.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;User Interface: plasma-mobile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Press Enter for everything else.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Then install the system:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;Now boot it. pmbootstrap&amp;rsquo;s default RAM allocation is too small and will be painfully sluggish, so I recommend booting with the following command. It uses the host CPU, allocates 4GB of memory, sets the disk size to 32GB, emulates a phone portrait display, and enables audio. Enter &lt;code&gt;pmbootstrap --help&lt;/code&gt; to view the available options.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap qemu --cpu max --memory &lt;span class=&#34;m&#34;&gt;4096&lt;/span&gt; --image-size 32G --video 720x1080 --audio pa&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;After booting, you can log into the system from the terminal opened by QEMU, or log in with SSH:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh user@VM_IP -p &lt;span class=&#34;m&#34;&gt;2222&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;7&#34;&gt;&#xA;&lt;li&gt;After booting, the VM window should enter the desktop. Resizing the window changes the display size automatically. The QEMU VM also grabs keyboard and mouse input automatically.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In this example, I chose Plasma Mobile as the interface. Its UI scales with the window. It descends from KDE Plasma, but has become an interface optimized for phones.&#xA;&lt;img src=&#34;https://i.imgur.com/alJxGQn.png&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;After installing the Discover software store, it can act as a frontend for downloading software. App sources are the postmarketOS and Alpine Linux repositories.&#xA;&lt;img src=&#34;https://i.imgur.com/Joklp8a.png&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;A terminal is still mandatory. Recommended packages: &lt;code&gt;chromium&lt;/code&gt;, &lt;code&gt;font-noto-cjk&lt;/code&gt;, and &lt;code&gt;docker&lt;/code&gt;. You can use this to evaluate docker performance on postmarketOS.&#xA;&lt;img src=&#34;https://i.imgur.com/jiZsjC8.png&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some software just feels like the desktop version. Some software automatically reshapes its UI according to the window size.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://i.imgur.com/wfARbOI.jpg&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;The files remain after this VM shuts down, but every time you run &lt;code&gt;pmbootstrap init&lt;/code&gt;, the system automatically deletes the old filesystem. Remember to back up the QEMU image under &lt;code&gt;~/.local/var/pmbootstrap/chroot_native/home/pmos/rootfs/&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. Manually Install a postmarketOS VM with Virt Manager&#xA;    &lt;div id=&#34;2-manually-install-a-postmarketos-vm-with-virt-manager&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-manually-install-a-postmarketos-vm-with-virt-manager&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Boot the system with the official prebuilt postmarketOS image. This does not require pmbootstrap.&lt;/p&gt;&#xA;&lt;p&gt;This method is a bit tedious because postmarketOS does not officially provide an &lt;code&gt;.iso&lt;/code&gt; image. It provides an &lt;code&gt;.img&lt;/code&gt; file instead, so you have to write it manually with &lt;code&gt;dd&lt;/code&gt;. (Note: there is now an &lt;code&gt;os-installer&lt;/code&gt; image, but it is mainly intended for installing on real hardware.)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Install &lt;a href=&#34;https://ivonblog.com/posts/ubuntu-virt-manager/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Virt Manager&lt;/a&gt; on Linux.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Go to the &lt;a href=&#34;https://postmarketos.org/install/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;postmarketOS website&lt;/a&gt; and download the &lt;code&gt;Generic x86_64 EFI System&lt;/code&gt; image. For example, I chose the Phosh version.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;After downloading, extract the &lt;code&gt;.xz&lt;/code&gt; file. You will get an &lt;code&gt;.img&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open Virt Manager and create a new virtual machine. Select Alpine Linux as the system. Choose UEFI for the boot firmware, VGA for the display card, and add a qcow2 virtual disk of at least 64GB. Do not boot it yet.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Before booting, mount the qcow2 file as an NBD device:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe nbd &lt;span class=&#34;nv&#34;&gt;max_part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo qemu-nbd -c /dev/nbd0 /var/lib/libvirt/images/postmarketos.qcow2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;Use &lt;code&gt;dd&lt;/code&gt; to write the postmarketOS image, then remove the NBD device:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dd &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;postmarketos-phosh.img  &lt;span class=&#34;nv&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/nbd0 &lt;span class=&#34;nv&#34;&gt;bs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;4M &lt;span class=&#34;nv&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;progress &lt;span class=&#34;nv&#34;&gt;conv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fsync&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo qemu-nbd -d /dev/nbd0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;7&#34;&gt;&#xA;&lt;li&gt;Return to Virt Manager, boot the VM, and you can use the system.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wiki.postmarketos.org/wiki/QEMU&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;QEMU - PostmarketOS Wiki&lt;/a&gt;&lt;/p&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/postmarketos-qemu/featured.webp" />
    </item>
    
    <item>
      <title>postmarketOS Tips: Installing Apps, Localization, Running Android Apps, and Docker</title>
      <link>https://ivonblog.com/en-us/posts/postmarketos-tips/</link>
      <pubDate>Mon, 23 Jun 2025 13:00:46 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/postmarketos-tips/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;postmarketOS is a phone-oriented Linux operating system based on Alpine Linux. It has already been ported to quite a few Android phones.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-introduction/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;What is postmarketOS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;postmarketOS has a graphical interface, but sometimes you still need the command line. If you need to type commands, SSH is usually the sane way to do it remotely. postmarketOS also provides terminal apps for the phone itself.&lt;/p&gt;&#xA;&lt;p&gt;In this article, Ivon uses postmarketOS v25.12 with the Phosh desktop environment to demonstrate a few practical postmarketOS tricks.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. How Phosh works&#xA;    &lt;div id=&#34;1-how-phosh-works&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-how-phosh-works&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Phosh is a desktop environment designed for mobile devices. Its original author is Purism. Phosh is built with GNOME and wlroots technologies. Its Wayland compositor is phoc, its display manager is TinyDM, which is specially packaged by the postmarketOS maintainers, and its touch keyboard is Stevia. Stevia is a touch keyboard developed by the postmarketOS maintainers, and it has more features than the original Squeekboard.&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;postmarketOS is a phone-oriented Linux operating system based on Alpine Linux. It has already been ported to quite a few Android phones.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-introduction/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;What is postmarketOS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;postmarketOS has a graphical interface, but sometimes you still need the command line. If you need to type commands, SSH is usually the sane way to do it remotely. postmarketOS also provides terminal apps for the phone itself.&lt;/p&gt;&#xA;&lt;p&gt;In this article, Ivon uses postmarketOS v25.12 with the Phosh desktop environment to demonstrate a few practical postmarketOS tricks.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. How Phosh works&#xA;    &lt;div id=&#34;1-how-phosh-works&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-how-phosh-works&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Phosh is a desktop environment designed for mobile devices. Its original author is Purism. Phosh is built with GNOME and wlroots technologies. Its Wayland compositor is phoc, its display manager is TinyDM, which is specially packaged by the postmarketOS maintainers, and its touch keyboard is Stevia. Stevia is a touch keyboard developed by the postmarketOS maintainers, and it has more features than the original Squeekboard.&lt;/p&gt;&#xA;&lt;p&gt;If you install the system with an official postmarketOS image, the default user account is &lt;code&gt;user&lt;/code&gt; and the password is &lt;code&gt;147147&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After unlocking the phone, you will see all applications. Long-press an icon to pin frequently used apps to the top.&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-tips/images/phosh-1.webp&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;After opening multiple applications, swipe up from the bottom of the screen to enter the multitasking view. Swipe left and right to switch apps. Swipe an app&amp;rsquo;s small window upward to close it.&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-tips/images/phosh-2.webp&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;Swipe down from the top of the screen to open quick settings. Use the upper-right buttons to lock the screen or power off.&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-tips/images/phosh-3.webp&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;Phosh has Docked and Undocked modes, and you can switch between them manually in quick settings. Undocked is the normal phone mode, where one app window fills the whole screen. Docked mode automatically turns on when you connect a physical keyboard or external display. It makes windows resizable and stackable, more like using desktop Linux.&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-tips/images/phosh-4.webp&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;To change the wallpaper and ringtone, install the postmarketOS Tweaks app:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add postmarketos-tweaks&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;After opening this app, you can set the wallpaper, configure when sleep mode, also called suspend, should trigger, and choose whether to force app UI scaling for a small screen.&lt;/p&gt;&#xA;&lt;p&gt;To let a specific app prevent the phone from sleeping, use the &lt;code&gt;gnome-session-inhibit&lt;/code&gt; command:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gnome-session-inhibit –inhibit &lt;span class=&#34;nb&#34;&gt;suspend&lt;/span&gt; &amp;lt;command&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. Linux phone apps&#xA;    &lt;div id=&#34;2-linux-phone-apps&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-linux-phone-apps&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;App stores&#xA;    &lt;div id=&#34;app-stores&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#app-stores&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Even though you can install desktop Linux applications on postmarketOS, including programs written with GTK and QT, not every Linux app works smoothly on a small screen. Some UIs do not reshape themselves automatically, so you have to test them yourself. See: &lt;a href=&#34;https://wiki.postmarketos.org/wiki/Applications_by_category&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Applications by category - postmarketOS Wiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Phosh has an app store called GNOME Software. It can download apps from the postmarketOS APK package repositories and Flathub. You click to install apps just like on an Android phone, without typing commands.&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-tips/images/gnome-software.webp&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;Honestly, though, GNOME Software&amp;rsquo;s interface is not exactly smooth. The most convenient way to install software is still typing commands. Very futuristic, as always.&lt;/p&gt;&#xA;&lt;p&gt;Flatpak and the GNOME Software plugin need to be installed separately before they show up:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add flatpak gnome-software gnome-software-plugin-flatpak&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Tips for mobile Firefox&#xA;    &lt;div id=&#34;tips-for-mobile-firefox&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#tips-for-mobile-firefox&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;postmarketOS ships a modified Firefox with custom CSS, making it easier to operate with touch gestures. Its features are mostly the same as the desktop version, but it forces Duckduckgo as the search engine. Tap Firefox settings in the lower-right corner, then Search, then restore the default search engine, and you can use Google Search.&lt;/p&gt;&#xA;&lt;p&gt;Firefox&amp;rsquo;s default User Agent here is &amp;ldquo;Firefox on Android.&amp;rdquo; You can install &lt;a href=&#34;https://addons.mozilla.org/zh-TW/firefox/addon/user-agent-string-switcher/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;User-Agent Switcher and Manager&lt;/a&gt; to switch the User Agent.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Maps and navigation&#xA;    &lt;div id=&#34;maps-and-navigation&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#maps-and-navigation&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Go to system Settings -&amp;gt; Privacy and enable location access, then install a maps or navigation app.&lt;/p&gt;&#xA;&lt;p&gt;I recommend installing &lt;a href=&#34;https://flathub.org/apps/details/io.github.rinigus.PureMaps&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Pure Maps&lt;/a&gt; through Flatpak. It can be used for navigation.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Running Android apps with Waydroid&#xA;    &lt;div id=&#34;running-android-apps-with-waydroid&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#running-android-apps-with-waydroid&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Use an LXC container to run Android apps. See &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-waydroid/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Waydroid + postmarketOS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Remote desktop&#xA;    &lt;div id=&#34;remote-desktop&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#remote-desktop&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Most postmarketOS desktop environments use Wayland. Phosh is a Wayland desktop based on wlroots.&lt;/p&gt;&#xA;&lt;p&gt;If your device&amp;rsquo;s Type-C port does not support HDMI output, how do you project it to a large screen?&lt;/p&gt;&#xA;&lt;p&gt;Answer: share it with &lt;a href=&#34;https://ivonblog.com/posts/waypipe-wayland-over-ssh/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;WayPipe&lt;/a&gt; or &lt;a href=&#34;https://ivonblog.com/posts/linux-wayvnc/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;WayVNC&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;3. postmarketOS Chinese localization and input methods&#xA;    &lt;div id=&#34;3-postmarketos-chinese-localization-and-input-methods&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#3-postmarketos-chinese-localization-and-input-methods&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Phosh on postmarketOS partially supports Chinese. Common apps like Firefox also support Chinese.&lt;/p&gt;&#xA;&lt;p&gt;At the time of writing, the Phosh environment still does not have a &amp;ldquo;touch&amp;rdquo; Chinese input method. In that case, you can use the built-in touch keyboard to emulate physical keyboard input, then pair it with Fcitx5 Pinyin to type Chinese.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First, install Chinese fonts and Fcitx5 packages. If the packages built by postmarketOS do not work, try the &lt;a href=&#34;https://ivonblog.com/posts/fcitx5-flatpak/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Flatpak version of Fcitx5&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add font-noto-cjk fcitx5 fcitx5-chinese-addons fcitx5-configtool fcitx5-gtk4 fcitx5-gtk3 fcitx5-qt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;To change the system language to Chinese, open Settings -&amp;gt; System -&amp;gt; Region &amp;amp; Language, change it to Chinese (Taiwan), then log in again.&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-tips/images/languages.webp&#34; width=300&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Edit the environment variables:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/environment&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Add the following content:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Specify the input method framework&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;GTK_IM_MODULE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fcitx &lt;span class=&#34;c1&#34;&gt;# If you are running pure Wayland apps in GNOME, you do not need this line&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;QT_IM_MODULE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fcitx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;XMODIFIERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;@im&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fcitx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SDL_IM_MODULE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fcitx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;GLFW_IM_MODULE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ibus&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Force the locale environment variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LANG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_CTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_NUMERIC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_TIME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_COLLATE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_MONETARY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_MESSAGES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_PAPER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_ADDRESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_TELEPHONE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_MEASUREMENT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_IDENTIFICATION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_TW.UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LC_ALL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Click the Fcitx5 icon and enable the Pinyin input method.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In Phosh, you need to long-press the pill bar at the bottom of the screen to bring up the on-screen keyboard. The touch keyboard will not appear in Docked mode. One of the keyboard modes is the &amp;ldquo;Terminal&amp;rdquo; layout, which can emulate physical keyboard input events. Press CTRL+Space to wake up Fcitx5&amp;rsquo;s Pinyin input method.&#xA;&lt;img src=https://static.ivonblog.com/posts/postmarketos-tips/images/keyboard.webp width=300&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;4. postmarketOS system administration&#xA;    &lt;div id=&#34;4-postmarketos-system-administration&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#4-postmarketos-system-administration&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;postmarketOS is based on Alpine Linux and inherits its package manager: APK (Alpine Package Keeper). This APK has nothing to do with Android APKs.&lt;/p&gt;&#xA;&lt;p&gt;Usually, you can find a terminal app on a newly installed system.&#xA;&lt;img src=https://static.ivonblog.com/posts/postmarketos-tips/images/terminal.webp width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;postmarketOS uses &lt;code&gt;doas&lt;/code&gt; to elevate user privileges. When you run the &lt;code&gt;sudo&lt;/code&gt; command, it is actually linked to &lt;code&gt;doas&lt;/code&gt;. If you use an official postmarketOS image, the default user account is &lt;code&gt;user&lt;/code&gt; and the password is &lt;code&gt;147147&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Package management&#xA;    &lt;div id=&#34;package-management&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#package-management&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Use the following commands to update system packages:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;If you installed the Stable Release of postmarketOS, you can use the following commands to upgrade whenever a major version is released, for example v24.06 -&amp;gt; v24.12:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add postmarketos-release-upgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo postmarketos-release-upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Reboot command:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo reboot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Poweroff command:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo poweroff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Use the following command to search for packages:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk search &lt;span class=&#34;s2&#34;&gt;&amp;#34;package name&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Install a package:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add &lt;span class=&#34;s2&#34;&gt;&amp;#34;package name&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Remove a package:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk del &lt;span class=&#34;s2&#34;&gt;&amp;#34;package name&amp;#34;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Service management&#xA;    &lt;div id=&#34;service-management&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#service-management&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;postmarketOS uses Systemd as its init system. Versions before v24.12 used OpenRC, and versions after v25.06 switched to Systemd. Users can freely choose OpenRC or Systemd during the &lt;code&gt;pmbootstrap init&lt;/code&gt; stage, but the official prebuilt system images use Systemd.&lt;/p&gt;&#xA;&lt;p&gt;Systemd-related commands:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Stop or start a service with systemctl, such as docker:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl stop docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use systemctl to make a service start automatically at boot:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;OpenRC-related commands:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Stop or start a service with rc-service, such as docker:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rc-service docker stop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rc-service docker start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use rc-update to make a service start automatically at boot:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rc-update add docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Firewall&#xA;    &lt;div id=&#34;firewall&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#firewall&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;postmarketOS uses iptables as its default firewall. Install UFW if you want easier management:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add ufw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now ufw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Deny all incoming connections&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw default deny incoming&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Allow the SSH port&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw allow ssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Reload rules&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;5. Network connections&#xA;    &lt;div id=&#34;5-network-connections&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#5-network-connections&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Wifi network&#xA;    &lt;div id=&#34;wifi-network&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wifi-network&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Just like on a normal phone, to get online through the graphical interface, tap Settings on the Phosh desktop, then Mobile Network or Wifi.&lt;/p&gt;&#xA;&lt;p&gt;In the terminal, use &lt;code&gt;ip addr&lt;/code&gt; to check network interfaces, then connect with &lt;code&gt;nmcli&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nmcli dev wifi connect &lt;span class=&#34;s2&#34;&gt;&amp;#34;Wifi name&amp;#34;&lt;/span&gt; password &lt;span class=&#34;s2&#34;&gt;&amp;#34;Wifi password&amp;#34;&lt;/span&gt; ifname wlan0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nmcli device &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; wlan0 autoconnect yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;If the phone cannot get online, you can also reverse-share a Linux computer&amp;rsquo;s network connection to the phone with &lt;a href=&#34;https://wiki.postmarketos.org/wiki/USB_Internet&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;USB Networking&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Mobile network&#xA;    &lt;div id=&#34;mobile-network&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#mobile-network&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;If the graphical interface cannot enable the 4G network, use the following commands.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Confirm that the ModemManager service is enabled:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl status modemmanager&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Use &lt;code&gt;sudo nmcli d&lt;/code&gt; to check network status:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DEVICE TYPE STATE        CONNECTION&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qrtr0  gsm  disconnected --&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Try automatically connecting with APN:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nmcli con add con-name &lt;span class=&#34;s2&#34;&gt;&amp;#34;modem&amp;#34;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gsm&amp;#34;&lt;/span&gt; ifname &lt;span class=&#34;s2&#34;&gt;&amp;#34;qrtr0&amp;#34;&lt;/span&gt; auto-config &lt;span class=&#34;s2&#34;&gt;&amp;#34;TRUE&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Bring up the connection:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nmcli c up &lt;span class=&#34;s2&#34;&gt;&amp;#34;modem&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;To enable 4G hotspot sharing: on the Phosh desktop, open Settings -&amp;gt; Wifi, turn on Wifi, then tap the upper-right corner to turn on the mobile hotspot.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;SSH connection&#xA;    &lt;div id=&#34;ssh-connection&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#ssh-connection&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;After installing postmarketOS, you can connect the phone to a computer and make it an RNDIS device. Then SSH from the computer into the system. The IP is fixed. Use &lt;code&gt;sudo systemctl status sshd&lt;/code&gt; to confirm whether the phone&amp;rsquo;s SSH service is running:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh username@172.16.42.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;If the phone itself is connected to the network, you can also connect through its local IP:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Enable SSH on the phone&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add openssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start sshd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; sshd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Check the phone&amp;#39;s IP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip addr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SSH from the computer to the phone&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh username@LAN_IP&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Set the time zone and correct the time&#xA;    &lt;div id=&#34;set-the-time-zone-and-correct-the-time&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#set-the-time-zone-and-correct-the-time&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Use a symbolic link to set the time zone to Taipei:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;You can also use Alpine Linux&amp;rsquo;s script to correct the time automatically:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo setup-timezone&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Enter Asia/Taipei&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Or configure automatic time synchronization at boot:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add systemd-timesyncd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; systemd-timesyncd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/postmarketos-tips/featured.webp" />
    </item>
    
    <item>
      <title>How to Run Linux on a Phone: A Few Ways to Try It</title>
      <link>https://ivonblog.com/en-us/posts/how-to-run-linux-on-the-phones/</link>
      <pubDate>Fri, 28 Mar 2025 13:00:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/how-to-run-linux-on-the-phones/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;!--類別：導航文--&gt;&#xA;&lt;p&gt;Want to install Linux on a phone and run desktop programs? Strictly speaking, those are two different ideas. After a long stretch of trying this stuff myself, Ivon put together this article to share the results.&lt;/p&gt;&#xA;&lt;p&gt;With today&amp;rsquo;s technology, there are two main ways to run Linux on a phone:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use an app to emulate a Linux environment&lt;/li&gt;&#xA;&lt;li&gt;Delete the phone&amp;rsquo;s operating system and flash it with a real Linux system&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s first look at the pros and cons of these two methods. At the end, we will also discuss option 3: buying a real Linux phone.&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;!--類別：導航文--&gt;&#xA;&lt;p&gt;Want to install Linux on a phone and run desktop programs? Strictly speaking, those are two different ideas. After a long stretch of trying this stuff myself, Ivon put together this article to share the results.&lt;/p&gt;&#xA;&lt;p&gt;With today&amp;rsquo;s technology, there are two main ways to run Linux on a phone:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use an app to emulate a Linux environment&lt;/li&gt;&#xA;&lt;li&gt;Delete the phone&amp;rsquo;s operating system and flash it with a real Linux system&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s first look at the pros and cons of these two methods. At the end, we will also discuss option 3: buying a real Linux phone.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. Use an App to Emulate a Linux Environment&#xA;    &lt;div id=&#34;1-use-an-app-to-emulate-a-linux-environment&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-use-an-app-to-emulate-a-linux-environment&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;By &amp;ldquo;emulate,&amp;rdquo; I mean using an app to emulate a Linux system environment, mostly as an auxiliary tool. The upside is that almost every phone can install one. The downside is that what you can do is limited. Running terminal commands is fine, but containerization and virtualization are basically out.&lt;/p&gt;&#xA;&lt;p&gt;Emulating a Linux environment with an app does not require root or jailbreaking, so it works for most devices. How Linux fits into your life is up to you, but starting with apps like Termux is a decent entry point. You might even get a taste of the free and open source software spirit. Once you are ready, then go play with Linux phones.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Android&#xA;    &lt;div id=&#34;android&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#android&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;This includes Android phones and Android tablets, but not ChromeOS.&lt;/p&gt;&#xA;&#xA;&lt;h4 class=&#34;relative group&#34;&gt;Termux&#xA;    &lt;div id=&#34;termux&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#termux&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/en-us/posts/how-to-use-termux/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Termux usage guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Termux works on most Android phones and supports Android 7 and later. It does not require root.&lt;/p&gt;&#xA;&lt;p&gt;Termux is not a virtual machine. It provides a Linux-like environment and then tries to run programs with native performance. Termux also provides &lt;code&gt;proot-distro&lt;/code&gt; (using &lt;code&gt;ptrace&lt;/code&gt; to emulate chroot functionality) for installing Linux distributions. Combined with Termux X11, it can run the X Window System and Linux graphical programs, then use VirGL to achieve 3D graphics acceleration.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/how-to-run-linux-on-the-phones/images/termux.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;figcaption&gt;Running Linux graphical programs on Android through Termux&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;But even if you use &lt;code&gt;proot-distro&lt;/code&gt; to install another Linux distribution container, that system is still constrained by Android, and it is hard to access hardware-level operations.&lt;/p&gt;&#xA;&lt;p&gt;Termux is more of an auxiliary tool that mixes into the Android ecosystem. In this kind of Linux environment, you can write small Python, Java, or C++ programs, run office software, and play some little Linux games. Since Termux can access some Android system files, batch-converting videos with &lt;code&gt;ffmpeg&lt;/code&gt; also works.&lt;/p&gt;&#xA;&lt;p&gt;If the phone has root access, installing a Linux container with chroot and pairing it with Busybox lets you do a bit more.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/en-us/posts/termux-chroot-ubuntu/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Create a chroot Ubuntu environment on a phone with Termux, no Linux Deploy needed&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But chroot is still limited by Android&amp;rsquo;s trimmed-down Linux kernel. For example, Android kernels generally lack the cgroups kernel modules, so Docker still will not run. chroot is better suited for doing some system modification work together with Magisk.&lt;/p&gt;&#xA;&#xA;&lt;h4 class=&#34;relative group&#34;&gt;QEMU&#xA;    &lt;div id=&#34;qemu&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#qemu&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h4&gt;&#xA;&lt;p&gt;The options here are more limited and not as versatile as Termux.&lt;/p&gt;&#xA;&lt;p&gt;The emulator software &amp;ldquo;QEMU&amp;rdquo; has Android ports. Termux includes QEMU packages, and some people have made standalone apps, including &lt;a href=&#34;https://github.com/limboemu/limbo&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Limbo PC Emulator&lt;/a&gt; and &lt;a href=&#34;https://github.com/xoureldeen/Vectras-VM-Android&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Vectras VM&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/en-us/posts/termux-qemu-system-linux/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Run an x86_64 Ubuntu virtual machine on a phone with QEMU&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What about using QEMU to run an ARM Linux virtual machine? Sorry, most Android phones do not have the KVM kernel module, so VM performance is miserable. Even at the time of writing, with 2025 flagship phones, they are only good enough for Windows XP or a text-only Linux VM.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/how-to-run-linux-on-the-phones/images/qemu.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;figcaption&gt;An Ubuntu virtual machine running on an Android phone through QEMU&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Google Pixel phones are the exception. Pixel phones with Tensor processors support pKVM virtualization, so Limbo PC Emulator runs very quickly, even Windows 11 ARM. You need this custom Limbo build: &lt;a href=&#34;https://github.com/wasdwasd0105/limbo_tensor&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Limbo For Tensor-based devices&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In addition, Google Pixel phones running Android 16 or later can run Linux virtual machines through the AVF framework. See: &lt;a href=&#34;https://www.theregister.com/2025/03/13/android_15_linux_debian_terminal/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Google slips built-in terminal, Debian Linux VM into Android 15 March feature drop&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;iOS&#xA;    &lt;div id=&#34;ios&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#ios&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;This includes iPhone, iPad, and iPod touch devices.&lt;/p&gt;&#xA;&#xA;&lt;h4 class=&#34;relative group&#34;&gt;iSH Shell&#xA;    &lt;div id=&#34;ish-shell&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#ish-shell&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/posts/ios-ish-shell/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;iSH Shell usage guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;iSH Shell on iOS is an app that emulates 32-bit Alpine Linux. Its text-only interface is suitable for running some Python scripts and serving as an SSH client.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/how-to-run-linux-on-the-phones/images/ishshell.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;figcaption&gt;Running simple terminal programs on an iPad with iSH Shell&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Because iSH&amp;rsquo;s filesystem can be opened with the Files app, you can drop files into the Linux environment for processing, such as batch-converting photos with ImageMagick. In that sense, iSH is similar to Termux on Android: a Linux environment mixed into the iOS ecosystem.&lt;/p&gt;&#xA;&lt;p&gt;The downside is that iSH Shell is a plain x86 emulator. It is only compatible with 32-bit packages, and some instruction sets are not implemented yet, so some programs may fail.&lt;/p&gt;&#xA;&#xA;&lt;h4 class=&#34;relative group&#34;&gt;UTM&#xA;    &lt;div id=&#34;utm&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#utm&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/posts/utm-app-ios/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;UTM usage guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;UTM is virtual machine software. With JIT acceleration enabled, or virtualization enabled after jailbreaking, it can run VMs for other systems at high performance. It is especially suitable for iPad.&lt;/p&gt;&#xA;&lt;p&gt;Combined with Apple&amp;rsquo;s obnoxiously strong processor performance, high-end iPads with M-series chips have already been proven capable of handling Windows 11 ARM. Linux, naturally, is not a problem.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/how-to-run-linux-on-the-phones/images/utm.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;figcaption&gt;Running an Alpine Linux virtual machine on an iPad with UTM and sharing a folder with the host&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;The downside is that Apple only allows the unaccelerated &amp;ldquo;UTM SE&amp;rdquo; on the App Store. That version of UTM even struggles with Windows XP. The normal version of UTM must be sideloaded. Whether you use JIT acceleration or jailbreak to enable virtualization, the setup process is tedious and not very practical.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. Flash the Phone with a Real Linux System&#xA;    &lt;div id=&#34;2-flash-the-phone-with-a-real-linux-system&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-flash-the-phone-with-a-real-linux-system&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Even after jailbreaking, iOS devices cannot be flashed with other systems, except for the special case of &lt;a href=&#34;https://github.com/corellium/projectsandcastle&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Project Sandcastle&lt;/a&gt; on the iPhone 7. What about relatively open Android devices? In reality, there are not that many Android phones that can be flashed with Linux either.&lt;/p&gt;&#xA;&lt;p&gt;The Linux systems discussed here do not include Android. That includes LineageOS, GrapheneOS, ClayxOS, and similar systems. They are Android variants, not Linux in the sense used here. Some people will ask: does Android not count as Linux? It does, and also does not. Android uses the Linux kernel, but its architecture is very different from desktop GNU/Linux. The &amp;ldquo;real Linux phone systems&amp;rdquo; discussed below are designed more like desktop GNU/Linux systems, not Google&amp;rsquo;s heavily modified result. A shorter way to say it: these systems keep the root user available by default, instead of removing it Android-style.&lt;/p&gt;&#xA;&lt;p&gt;So what choices are there for phone Linux systems? Right now, there are more than a dozen &amp;ldquo;real Linux phone system&amp;rdquo; distributions outside of Android. The two strongest players are &amp;ldquo;Ubuntu Touch&amp;rdquo; and &amp;ldquo;postmarketOS.&amp;rdquo; These two Linux distributions support the largest number of phones and have been ported to many Android devices.&lt;/p&gt;&#xA;&lt;p&gt;You need to buy a phone suitable for flashing. Even if a phone has many Android ROMs available, that does not mean it can be turned into Linux. Want to know which phones are suitable? Check the postmarketOS Wiki and Ubuntu touch Wiki.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;Ubuntu touch&#xA;    &lt;div id=&#34;ubuntu-touch&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#ubuntu-touch&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/en-us/posts/ubuntu-touch-ubports-installer/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Ubuntu touch installation guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Ubuntu touch appeared the earliest, back in 2014. It was originally supposed to push further into phones, then after a few years its parent company Canonical abandoned it and it became maintained by the open source community.&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu touch has its own desktop environment, with a fairly complete UI design and even Chinese input methods. As a feature-phone-style system, it passes. Ubuntu touch&amp;rsquo;s system partition is read-only like Android&amp;rsquo;s. Even if you access it with root privileges, the next OTA update will overwrite your changes. To run desktop Linux programs, you need to enable an LXC container and install them there.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/how-to-run-linux-on-the-phones/images/ubuntutouch.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;figcaption&gt;A Redmi Note 5 running Ubuntu touch&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu touch developed a porting method based on Halium, which mixes in Android drivers and trades away some free software purity for compatibility. Because of this, Ubuntu touch has better compatibility with Android phone hardware and is easier to port.&lt;/p&gt;&#xA;&lt;p&gt;It supports running Android apps through Waydroid.&lt;/p&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;postmarketOS&#xA;    &lt;div id=&#34;postmarketos&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#postmarketos&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Related article: &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-general-installation/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;postmarketOS installation guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;postmarketOS, which appeared around 2019, is more like a desktop GNU/Linux distribution. Its graphics stack uses Wayland or X11, and you can freely choose the desktop environment you want. The system partition is yours to modify, and if performance is good enough, Docker and virtual machines are fair game too.&lt;/p&gt;&#xA;&lt;p&gt;postmarketOS emphasizes that ported devices must use the latest mainline Linux kernel, and drivers should use open source versions as much as possible. It gave up Ubuntu Touch&amp;rsquo;s Halium-style compromise and took the real GNU/Linux phone route.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/how-to-run-linux-on-the-phones/images/postmarketos.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;figcaption&gt;A Xiaomi Poco F1 running postmarketOS&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Maybe because postmarketOS is more free than Ubuntu touch, &amp;ldquo;Linux phone apps&amp;rdquo; actually have room to exist. The GNOME and KDE communities have successively developed apps and SDKs that adapt to different screen sizes, letting developers reuse existing GTK and Qt technologies to build Linux phone apps.&lt;/p&gt;&#xA;&lt;p&gt;It supports running Android apps through Waydroid.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;3. Buy a Real Linux Phone&#xA;    &lt;div id=&#34;3-buy-a-real-linux-phone&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#3-buy-a-real-linux-phone&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Besides flashing an Android phone into Linux, you can also buy a phone that ships with Linux from the factory. Since dedicated development teams maintain them, they avoid many of the problems you run into when flashing Linux onto Android hardware. Their hardware is usually fairly open too, so you can freely install other Linux distributions maintained by community members.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/how-to-run-linux-on-the-phones/images/pinephone.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;figcaption&gt;A PinePhone playing video&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;That said, these Linux phones may not be more usable than Android, and the price-to-performance ratio is not great. They are for users willing to get their hands dirty. Real Linux phones look powerful, but the ecosystem is still immature. At the moment, they can mostly satisfy calling and web browsing, and users need a strong tinkering spirit to stick with them. Open source may slowly fill the ecosystem gaps, but people who use Linux phones should have at least some command-line literacy.&lt;/p&gt;&#xA;&lt;p&gt;Currently, phones that ship with Linux instead of Android include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;FuriLabs FLX1 (2024), ships with FuriOS, based on Debian.&lt;/li&gt;&#xA;&lt;li&gt;Purism Liberty Phone (2023), ships with PureOS, based on Debian&lt;/li&gt;&#xA;&lt;li&gt;Purism Librem 5 (2020), ships with PureOS, based on Debian&lt;/li&gt;&#xA;&lt;li&gt;Pine64 PinePhone Pro (2022), ships with Manjaro, can install more than a dozen other distributions&lt;/li&gt;&#xA;&lt;li&gt;Pine64 PinePhone (2020), ships with Manjaro, can install more than a dozen other distributions&lt;/li&gt;&#xA;&lt;li&gt;Volla Phone (2020), ships with Ubuntu touch&lt;/li&gt;&#xA;&lt;li&gt;Fxtec Pro1X (2020), ships with Ubuntu touch&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/how-to-run-linux-on-the-phones/featured.webp" />
    </item>
    
    <item>
      <title>Back Up an Android Phone&#39;s postmarketOS Partitions to a PC</title>
      <link>https://ivonblog.com/en-us/posts/backup-android-phone-postmarketos-partitions/</link>
      <pubDate>Mon, 06 Jan 2025 21:00:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/backup-android-phone-postmarketos-partitions/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;Backup postmarketOS partitions of Android phone.&lt;/p&gt;&#xA;&lt;p&gt;This article discusses how to back up data from postmarketOS system partitions.&lt;/p&gt;&#xA;&lt;p&gt;postmarketOS has plenty of backup tools, such as rsync and Timeshift, which can restore the system to a previous state. Linux has more complete permissions than Android, so in theory you can back up any directory. If the phone supports the Linux mainline kernel, then you can make even better use of BTRFS snapshots.&lt;/p&gt;&#xA;&lt;p&gt;However, this article is about a &amp;ldquo;full device backup&amp;rdquo; approach. I want a one-to-one backup of the phone data, so it can be restored to a previous state with one command.&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;Backup postmarketOS partitions of Android phone.&lt;/p&gt;&#xA;&lt;p&gt;This article discusses how to back up data from postmarketOS system partitions.&lt;/p&gt;&#xA;&lt;p&gt;postmarketOS has plenty of backup tools, such as rsync and Timeshift, which can restore the system to a previous state. Linux has more complete permissions than Android, so in theory you can back up any directory. If the phone supports the Linux mainline kernel, then you can make even better use of BTRFS snapshots.&lt;/p&gt;&#xA;&lt;p&gt;However, this article is about a &amp;ldquo;full device backup&amp;rdquo; approach. I want a one-to-one backup of the phone data, so it can be restored to a previous state with one command.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. postmarketOS and Android Partitions&#xA;    &lt;div id=&#34;1-postmarketos-and-android-partitions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-postmarketos-and-android-partitions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;When installing postmarketOS on the PinePhone, we can use &lt;a href=&#34;https://ivonblog.com/en-us/posts/pinephone-tow-boot/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Tow-Boot&lt;/a&gt; to make the PinePhone appear as a disk. After plugging it into a computer, we can use the dd command to extract the entire system image and back up the whole system.&lt;/p&gt;&#xA;&lt;p&gt;But many postmarketOS devices are converted from Android phones, and their partition tables are inherited from Android. So we need to back them up the Android way.&lt;/p&gt;&#xA;&lt;p&gt;Devices before Android 9 often used A/B partitions, while devices after Android 10 mostly use dynamic partitions. Every device is different. Take the Xiaomi Poco F1 as an example: postmarketOS is flashed through fastboot to the &lt;code&gt;boot&lt;/code&gt; and &lt;code&gt;userdata&lt;/code&gt; partitions, while the other partitions remain in their original Android state. Therefore, Fastboot and Recovery can still be used.&lt;/p&gt;&#xA;&lt;p&gt;In theory, those two partitions can be extracted as full partition image files from the Android Recovery interface using ADB commands.&lt;/p&gt;&#xA;&lt;p&gt;Because this is a full device backup, the required space can easily exceed the phone&amp;rsquo;s own storage capacity. Store the extracted image files on a larger SD card or on a computer. I recommend using a USB 3 or faster port for transfer.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. Back Up postmarketOS Partitions&#xA;    &lt;div id=&#34;2-back-up-postmarketos-partitions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-back-up-postmarketos-partitions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Xiaomi&amp;rsquo;s stock Recovery does not have ADB support, so I used LineageOS recovery. Backing up with TWRP also works, but TWRP is not available for every phone.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Reboot the phone into Fastboot mode.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Download Recovery from the LineageOS website and flash it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Reboot into LineageOS Recovery:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fastboot reboot recovery&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Tap the Advanced menu and enable ADB.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Connect the phone to the computer.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Pull the partitions to the computer:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adb pull /dev/block/bootdevice/by-name/userdata userdata.img&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adb pull /dev/block/bootdevice/by-name/boot boot.img&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;7&#34;&gt;&#xA;&lt;li&gt;Now we have two img files.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;3. Restore postmarketOS Partitions&#xA;    &lt;div id=&#34;3-restore-postmarketos-partitions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#3-restore-postmarketos-partitions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Restoration test:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Reboot into postmarketOS.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Delete some files.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Flash the img files back. This time, use fastboot:&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fastboot flash boot boot.img&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fastboot flash userdata userdata.img&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;After rebooting, it should return to the previous state.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You might ask: if the phone system is flashed back to Android, can this method still restore the postmarketOS data? Pretty risky. The partition table may get messed up.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wiki.postmarketos.org/wiki/Android_dynamic_partitions&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Android dynamic partitions - postmarketOS Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://eskerahn.dk/?p=4633&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Partition backup, unlocked Android phones, through Recovery. - EskeRahn | Various tech stuff ……….&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://xdaforums.com/t/how-to-backup-your-partitions-with-command-line-requires-root.4411165/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;How To Guide How to backup your partitions with command line (requires root) XDA&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content:encoded>
      
    </item>
    
    <item>
      <title>Running postmarketOS on Android Termux proot without flashing a custom rom</title>
      <link>https://ivonblog.com/en-us/posts/postmarketos-in-termux-proot/</link>
      <pubDate>Sat, 16 Nov 2024 21:00:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/postmarketos-in-termux-proot/</guid>
      
      <description>&lt;p&gt;&lt;a href=&#34;https://ivonblog.com/posts/postmarketos-in-termux-proot/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;閱讀中文版&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Running postmarketOS and Phosh on Android phone without rooting or flashing a custom ROM.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve taken the unofficial and weird approach of running postmarketOS on Termux Proot, so that we can run mobile Linux on Android.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/title1.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/title2.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;A video demonstration. Phosh + postmarketOS runs on Sony Xperia 10 V Android 14.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; overflow: hidden;&#34;&gt;&#xA;    &lt;iframe style=&#34;position: absolute; width: 100%; height: 100%;&#34;&#xA;        src=&#34;http://www.youtube.com/embed/2O8DXNuinUs&#34; allowfullscreen frameborder=&#34;0&#34; loading=&#34;lazy&#34;&gt;&#xA;    &lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. Motivation&#xA;    &lt;div id=&#34;1-motivation&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-motivation&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Why do I do this? To explore the possibilities of running mobile Linux on an Android phone. And we needed a desktop environment designed for touchscreens.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;a href=&#34;https://ivonblog.com/posts/postmarketos-in-termux-proot/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;閱讀中文版&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Running postmarketOS and Phosh on Android phone without rooting or flashing a custom ROM.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve taken the unofficial and weird approach of running postmarketOS on Termux Proot, so that we can run mobile Linux on Android.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/title1.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/title2.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;A video demonstration. Phosh + postmarketOS runs on Sony Xperia 10 V Android 14.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; overflow: hidden;&#34;&gt;&#xA;    &lt;iframe style=&#34;position: absolute; width: 100%; height: 100%;&#34;&#xA;        src=&#34;http://www.youtube.com/embed/2O8DXNuinUs&#34; allowfullscreen frameborder=&#34;0&#34; loading=&#34;lazy&#34;&gt;&#xA;    &lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. Motivation&#xA;    &lt;div id=&#34;1-motivation&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-motivation&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Why do I do this? To explore the possibilities of running mobile Linux on an Android phone. And we needed a desktop environment designed for touchscreens.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s my personal wish to run mobile Linux on my Sony Xperia 5 &amp;amp; 10 series, but not many people have ported postmarketOS for them, and I didn&amp;rsquo;t succeed myself. So I&amp;rsquo;m just using Termux to taste the sweetness of the mobile Linux OS. I would like to share this highly experimental method of running postmarketOS on Android with you.&lt;/p&gt;&#xA;&lt;p&gt;postmarketOS is a GNU/Linux system designed for out-of-season mobile phones. Based on Alpine Linux, it has full Linux functionality and is able to run Linux pc applications, and it has become one of the most popular distro choice among PinePhone users. However, postmarketOS is not available for all Android phones, see &lt;a href=&#34;https://ivonblog.com/posts/postmarketos-general-installation/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;postmarketOS pmbootstrap installation instruction&lt;/a&gt;. In order to port a postmarketOS to an Android phone, you need to pacth the Linux kernel a lot, and since many drivers are not compatible between Android and Linux, it is more difficult to create a postmarketOS ROM than to port LineageOS. Even if you finally get it up and running, there will be lots of missing proprietary drivers, which makes the system unpleasant to use.&lt;/p&gt;&#xA;&lt;p&gt;Moreover, the entry barrier for installing postmarketOS is very high, and for many mobile phone users, they can&amp;rsquo;t even unlock the bootloader, so it&amp;rsquo;s impossible to flash a custom ROM. This makes Termux a good option to consider, as it allows you to run Linux containers on your Android without rooting, and display the Linux container X server screen with Termux X11. The first question we have to ask is whether pmbootstrap can be run on Termux. According to &lt;a href=&#34;https://github.com/termux/termux-packages/issues/4333&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;this Github issue&lt;/a&gt;, chroot is hard to run on Android without rooting. So we use a slower proot instead.&lt;/p&gt;&#xA;&lt;p&gt;Termux provides rootfs for Alpine Linux, and postmarketOS is originally based on Alpine Linux, so if you do a little trick to convert Alpine Linux to postmarketOS, you can get those packages designed for mobile Linux. Why don&amp;rsquo;t we use Alpine Linux directly, because some packages of postmarketOS are not being upstreamed, some packages are not found in Alpine Linux&amp;rsquo;s repsitory.&lt;/p&gt;&#xA;&lt;p&gt;Finally, let&amp;rsquo;s talk about &lt;a href=&#34;https://phosh.mobi/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Phosh&lt;/a&gt;, a desktop environment developed by Purism, a free software company, designed for Linux phones. Its Wayland compositor, Phoc, is based on wlroots. In the PinePhone community, Phosh is one of the best rated interfaces. According to my personal experience of using PinePhone, I think Phosh is the most stable interface although the interface is very simple, and Phosh is very resource-saving. The animation of Phosh is still very smooth even running on the underpowered PinePhone which equipped with Allwinner A64 processor. I think Phosh is very useful for users who want to interact with Linux system in Termux X11. Because most Android phones don&amp;rsquo;t have keyboard and mouse, so if you run XFCE, KDE Plasma, GNOME and other traditional Linux desktops in Termux X11, it would be very awkward. So that , the touchscreen-optimized Phosh would be an excellent choice.&lt;/p&gt;&#xA;&lt;p&gt;However, you may ask, Phosh is a Wayland compositor, how can it run on Termux X11? Although we cannot use Wayland directly, the nested Wayland session under X11 is still possible. Some compositors can do this, such as &lt;a href=&#34;https://gitlab.freedesktop.org/wayland/weston&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Weston&lt;/a&gt; or &lt;a href=&#34;https://github.com/cage-kiosk/cage&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Cage&lt;/a&gt;. Some features of Wayland can still be used even running under X11 environment. However, simply running cage will result in an incomplete X session and no way to detect the resolution of the phone. So before running cage, I will start a X window manager in the first place. I choose Openbox for performance-wise.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. Prerequisites&#xA;    &lt;div id=&#34;2-prerequisites&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-prerequisites&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ivonblog.com/en-us/posts/how-to-use-termux/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Termux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ivonblog.com/en-us/posts/termux-x11/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Termux X11&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ivonblog.com/en-us/posts/termux-virglrenderer/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;virglrenderer&lt;/a&gt;: Optional hardware acceleration.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://f-droid.org/packages/org.pocketworkstation.pckeyboard/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Hacker&amp;rsquo;s keyboard&lt;/a&gt;: For interacting with the desktop environment. It can simulate PC keyboard inputs which would be very useful.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;3. Install Proot Alpine Linux&#xA;    &lt;div id=&#34;3-install-proot-alpine-linux&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#3-install-proot-alpine-linux&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;postmarketOS provides two updating channels, Edge and Stable. The version number of Stable channel can be found in &lt;a href=&#34;https://wiki.postmarketos.org/wiki/Releases&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Wiki&lt;/a&gt;, currently it is v24.06.&lt;/p&gt;&#xA;&lt;p&gt;The default Alpine Linux of Termux proot uses Edge branch, but this branch is unstable, so I suggest to switch it to Alpine 3.20 (corresponding to postmarketOS v24.06).&lt;/p&gt;&#xA;&lt;p&gt;P.S. At the time of writing, I am using Edge repo for getting latest packages in order to make Phosh launch through Cage. But for stability, you may choose the stable channel.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Start Termux and install proot Alpine Linux.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pkg update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pkg install proot-distro pulseaudio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proot-distro install alpine&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Change the Alpine Linux repository from Edge to v3.20.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proot-distro login alpine --shared-tmp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk add vim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/apk/repositories&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Change &amp;#34;http://dl-cdn.alpinelinux.org/alpine/edge/main&amp;#34; to &amp;#34;http://dl-cdn.alpinelinux.org/alpine/v3.20/main&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Change &amp;#34;http://dl-cdn.alpinelinux.org/alpine/edge/community&amp;#34; to &amp;#34;http://dl-cdn.alpinelinux.org/alpine/v3.20/community&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Add a new user, add it to sudo group, and set the timezone&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk add sudo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;addgroup storage&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adduser -g wheel,storage,video,audio user&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;visudo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo setup-timezone&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Enable SSH remote connection in Termux proot.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/ssh/sshd_config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Change `Port` from 22 to 8023&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rc-update add sshd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rc-serive sshd start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Check the IP address.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip addr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;4. Convert Alpine Linux installtion to postmarketOS&#xA;    &lt;div id=&#34;4-convert-alpine-linux-installtion-to-postmarketos&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#4-convert-alpine-linux-installtion-to-postmarketos&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Add the postmarketOS v24.06 (Alpine v3.20) repository.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/apk/repositories&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add this line at the top:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://mirror.postmarketos.org/postmarketos/v24.06&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# For your reference, the url of the Edge channel is: https://mirror.postmarketos.org/postmarketos/master/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Install postmarketos-keys&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk add -u --allow-untrusted postmarketos-keys&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apk update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apk upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Add the following lines to &lt;code&gt;/etc/os-release&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PRETTY_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;postmarketOS v24.06&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Nura&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;VERSION_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;v24.06&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;VERSION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;v24.06&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;postmarketos&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ID_LIKE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;alpine&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;HOME_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://www.postmarketos.org/&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SUPPORT_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://gitlab.com/postmarketOS&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;BUG_REPORT_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://gitlab.com/postmarketOS/pmaports/issues&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LOGO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;postmarketos-logo&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;5. Installing Phosh desktop environment&#xA;    &lt;div id=&#34;5-installing-phosh-desktop-environment&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#5-installing-phosh-desktop-environment&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install Openbox and Cage:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add openbox cage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;The Phosh package name is &lt;code&gt;postmarketos-ui-phosh&lt;/code&gt;. It is recommended to install some of the mobile device packages made by postmarektOS along with it:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add postmarketos-ui-phosh &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;postmarketos-tweaks &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firefox &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mobile-config-firefox &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;font-noto &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;font-noto-cjk &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;font-noto-cjk-extra &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;font-noto-emoji&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;6. Launch Termux X11 and Phosh&#xA;    &lt;div id=&#34;6-launch-termux-x11-and-phosh&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#6-launch-termux-x11-and-phosh&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The inspiration to start Phosh in proot comes from &lt;a href=&#34;https://github.com/pothos/phosh-vnc&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;phosh-vnc&lt;/a&gt; and &lt;a href=&#34;https://github.com/dw5/termux-phosh/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;termux-phosh&lt;/a&gt;, although running it with WayVNC is one way, why not make good use of Termux X11 for better performance?&lt;/p&gt;&#xA;&lt;p&gt;The process of starting Phosh desktop is as follows: start PulseAudio audio server on Termux side, start Termux X11, then log in to Proot Alpine, start Openbox, cage and Phosh.&lt;/p&gt;&#xA;&lt;p&gt;The whole process is as follows:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Luanch Termux and start Pulse Audio&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pulseaudio --start --exit-idle-time&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacmd load-module module-native-protocol-tcp auth-ip-acl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;127.0.0.1 auth-anonymous&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Luanch Termux X11 APP and start Termux X11 in Termux&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DISPLAY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;:0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;termux-x11 :0 &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Start virglrenderer&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virgl_test_server_android &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Log into Alpine Linux&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proot-distro login alpine --user user --shared-tmp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;Launch Openbox, cage, Phosh&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DISPLAY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;:0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;XDG_RUNTIME_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/tmp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openbox &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cage phoc -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/libexec/phosh&amp;#39;&lt;/span&gt; -U &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In Termux X11 wait for the Openbox window to come out, double click on the title bar to maximize it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Tap Preferences in your phone&amp;rsquo;s notification bar and set Termux X11&amp;rsquo;s Output to Scaled to zoom in to a size that fits your phone.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/Screenshot_20241116-194431.webp&#34; width=300&gt;&#xA;&lt;ol start=&#34;8&#34;&gt;&#xA;&lt;li&gt;And change the Termux X11 Pointer to Direct Touch to simulate a touch screen.&#xA;&lt;img src=&#34;https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/Screenshot_20241116-194435.webp&#34; width=300&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;7. Phosh user experience&#xA;    &lt;div id=&#34;7-phosh-user-experience&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#7-phosh-user-experience&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Most of the touch gestures work. The control logic of Phosh is to swipe up from the bottom to view all the tasks, and swipe up to close the app window.&lt;/p&gt;&#xA;&lt;p&gt;Note Phosh in proot is not a full Linux environment, so some functions are not available.&lt;/p&gt;&#xA;&lt;p&gt;For example, Phosh uses GNOME Control Center to adjust system settings, but the GUI app cannot be opened, so many places have to be changed with commands. For example, to modify the file manager Portfolio to open the app with a specific file format preset, you should use &lt;code&gt;xdg-mime&lt;/code&gt; to modify it. Also GNOME Software doesn&amp;rsquo;t work, please use &lt;code&gt;apk&lt;/code&gt; command to install the apps.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Regarding Chinese input methods: Phosh&amp;rsquo;s built-in Squeekboard only supports English. Press and hold the bar at the bottom of Phosh to activate it (it seems that it doesn&amp;rsquo;t work in proot environment). In order to type Chinese, you&amp;rsquo;ll have to use your Android phone&amp;rsquo;s keyboard.&lt;/p&gt;&#xA;&lt;p&gt;You can wake Android keyboard by pressing the back button in the Termux X11 APP. And then scroll the toolbar at the bottom to left to type charcters.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;8. Let&amp;rsquo;s try other desktop environments?&#xA;    &lt;div id=&#34;8-lets-try-other-desktop-environments&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#8-lets-try-other-desktop-environments&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Besides Phosh, the desktop environments of postmarketOS are Plasma Mobile and SXMO, but I think they have more problems, one is unstable and the other is too complicated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Plasma Mobile&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Plasma Mobile is a desktop envrionment based on the PC version of KDE Plasma, which can be launched with X11 or Wayland backend.&lt;/p&gt;&#xA;&lt;p&gt;Personally, I think this desktop envrionment is very unstable, so it is better to use the PC version of KDE Plasma.&lt;/p&gt;&#xA;&lt;p&gt;Packages name: &lt;code&gt;postmarketos-ui-plasma-mobile&lt;/code&gt;。Launch in X11: &lt;code&gt;startplasma-x11&lt;/code&gt;. Launch in Wayland: &lt;code&gt;startplasma-wayland&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can start Plasma Mobile X11 session by: &lt;code&gt;dbus-launch --exit-with-session startplasma-x11 &amp;amp;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;img src=https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/Screenshot-20230124-121215.webp width=300&gt;&#xA;&lt;p&gt;&lt;strong&gt;SXMO&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The package name is &lt;code&gt;postmarketos-ui-sxmo&lt;/code&gt; but Termux X11 only support X server so I choose &lt;code&gt;postmarketos-ui-sxmo-de-dwm&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install SXMO packages&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apk add postmarketos-ui-sxmo-de-dwm postmarketos-tweaks-sxmo-x11 feh dwm svkbd conky clickclack&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Execute: &lt;code&gt;export XDG_RUNTIME_DIR=/tmp&lt;/code&gt; before launching SXMO.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;SXMO can be launched by executing &lt;code&gt;dbus-launch --exit-with-session /usr/bin/sxmo_xinit.sh &amp;amp;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The configuration files of SXMO is located at &lt;code&gt;~/.config/sxmo/&lt;/code&gt;. Hooks are at &lt;code&gt;/usr/share/sxmo/default_hooks/&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Gestures are not working.&#xA;&lt;img src=https://static.ivonblog.com/posts/postmarketos-in-termux-proot/images/Screenshot-20230124-132311.webp width=300&gt;&lt;/p&gt;&#xA;&lt;p&gt;You may modify dwm source code to change default keybindings.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git@git.sr.ht:~mil/sxmo-dwm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Modify config.def.h then reinstall dwm&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Uninstall &lt;code&gt;sxmo-dwm&lt;/code&gt; package before installing your cutsom dwm.&lt;/p&gt;&#xA;&lt;p&gt;Or you can just install vanilla &lt;code&gt;dwm&lt;/code&gt; package and use default dwm keybindings.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pothos/phosh-vnc&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;pothos/phosh-vnc - Github&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/dw5/termux-phosh/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;dw5/termux-phosh - Github&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wiki.postmarketos.org/wiki/Existing_Alpine_installation&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Existing Alpine installation - postmarketOS Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wiki.postmarketos.org/wiki/Phosh&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Phosh - postmarketOS Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wiki.postmarketos.org/wiki/Plasma_Mobile&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Plasma Mobile#Starting Plasma Mobile from the Terminal - postmarketOS Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://phosh.mobi/posts/phosh-dev-part-0/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Developing for Mobile Linux with Phosh - Part 0: Running nested&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/postmarketos-in-termux-proot/featured.webp" />
    </item>
    
    <item>
      <title>Installing Linux on an iPhone 6: Run postmarketOS Through a checkra1n Jailbreak</title>
      <link>https://ivonblog.com/en-us/posts/iphone-6-postmarketos/</link>
      <pubDate>Mon, 07 Oct 2024 08:00:00 +0800</pubDate>
      <author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author>
      <guid>https://ivonblog.com/en-us/posts/iphone-6-postmarketos/</guid>
      
      <description>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;For attempts at running Linux on iOS devices, I have previously discussed &lt;a href=&#34;https://ivonblog.com/posts/ios-ish-shell/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;iSH Shell terminal&lt;/a&gt; and the &lt;a href=&#34;https://ivonblog.com/posts/ios-utm-alpine-linux-vm/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;UTM virtual machine&lt;/a&gt; approach. This time I am going to try installing Linux directly on an iPhone.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. Background&#xA;    &lt;div id=&#34;1-background&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-background&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;checkm8 is arguably Apple’s biggest vulnerability in recent years. Combined with checkra1n, it can complete the jailbreak process before boot. In 2020, some wizard put together Project Sandcastle and successfully ran Android 10 on the iPhone 7. The author also started porting the Linux kernel. Even though Apple almost sued them, the project is still under development.&lt;/p&gt;</description>
      <content:encoded>&lt;!-- Co-translated by ChatGPT --&gt;&#xA;&lt;p&gt;For attempts at running Linux on iOS devices, I have previously discussed &lt;a href=&#34;https://ivonblog.com/posts/ios-ish-shell/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;iSH Shell terminal&lt;/a&gt; and the &lt;a href=&#34;https://ivonblog.com/posts/ios-utm-alpine-linux-vm/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;UTM virtual machine&lt;/a&gt; approach. This time I am going to try installing Linux directly on an iPhone.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. Background&#xA;    &lt;div id=&#34;1-background&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-background&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;checkm8 is arguably Apple’s biggest vulnerability in recent years. Combined with checkra1n, it can complete the jailbreak process before boot. In 2020, some wizard put together Project Sandcastle and successfully ran Android 10 on the iPhone 7. The author also started porting the Linux kernel. Even though Apple almost sued them, the project is still under development.&lt;/p&gt;&#xA;&lt;p&gt;Recently, people have already developed LineageOS ports, such as &lt;a href=&#34;https://github.com/LineageOS/android_device_apple_snowcastle&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Android device tree for &amp;ldquo;snowcastle&amp;rdquo;&lt;/a&gt;, which can run the latest Android 16 on supported iPhones.&lt;/p&gt;&#xA;&lt;p&gt;A few years later, more developers tried running Linux on other iPhones. The vulnerability checkm8 relies on only supports A7 to A11 chips, meaning devices from the iPhone 5S through the iPhone X. Older or newer devices do not work.&lt;/p&gt;&#xA;&lt;p&gt;Ideally, the iPhone 7 is currently one of the better-supported devices. It can mount postmarketOS on AFPS and boot, and some developers have even gotten Wayland running on it. Unfortunately, I do not have one.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/iphone-6-postmarketos/images/70ee4748eef92335554a6c2cad052a8d.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I have two old iOS devices that support checkm8: an iPhone SE (iOS 15) and an iPod touch 6 (iOS 12). There are many successful Linux boot cases online, but they do not mention their iOS versions. On iOS 15 and later, you can only jailbreak with palera1n, and you need to use the command &lt;code&gt;palera1n -p -f&lt;/code&gt; to start the pongoOS Shell. I tested it and ran into other problems. So I switched to the iPod touch 6 for testing. Its processor is similar to the iPhone 6, so it should theoretically work.&lt;/p&gt;&#xA;&lt;p&gt;So how do we run Linux? First, enter the pongoOS Shell through checkra1n, then boot Linux from there.&lt;/p&gt;&#xA;&lt;p&gt;Which Linux distro should we pick? Although someone on Reddit successfully compiled Ubuntu and booted it, and someone on Twitter got Asahi Linux running (see references at the end), there are more successful photos on the postmarektOS Wiki. Also, that community pays more attention to mobile Linux, so I used that distro as the base for this attempt.&lt;/p&gt;&#xA;&lt;p&gt;There are two possible approaches after that. One is to compile Linux into a ramdisk and boot it; after rebooting, the data disappears.&lt;/p&gt;&#xA;&lt;p&gt;The second is to use the &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-netboot/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Netboot feature provided by pmbootstrap&lt;/a&gt; for network booting. Data still disappears after reboot, but the rootfs stays on the computer.&lt;/p&gt;&#xA;&lt;p&gt;So, strictly speaking, none of this is really “installing” Linux on an iPhone. The system is not actually written to the iPhone’s storage; it only boots Linux temporarily. At the moment, no matter which method you use, you still need a computer to guide the device into Linux.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;2. Requirements&#xA;    &lt;div id=&#34;2-requirements&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-requirements&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A Linux or Mac computer. I used Ubuntu 24.04.&lt;/li&gt;&#xA;&lt;li&gt;An iOS device that supports checkra1n, meaning A7 to A11 chip devices from the iPhone 5S through the iPhone X. I used an iPod touch 6 running iOS 12.5.7.&lt;/li&gt;&#xA;&lt;li&gt;Lightning to USB OTG adapter, mouse, and keyboard. Linux has no touch driver, so after the iPhone boots you need to control it with a keyboard and mouse. If you are comfortable controlling X11 with SSH commands, you can skip these.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;3. Compile pongoOS&#xA;    &lt;div id=&#34;3-compile-pongoos&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#3-compile-pongoos&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;pongoOS is the program that runs before loading the iOS XNU kernel.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Before compiling pongoOS, you need checkr1an. (paler1an does not require compiling pongoOS.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Download the checkra1n executable from the &lt;a href=&#34;https://checkra.in/releases/#all-downloads&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;official website&lt;/a&gt; and put it in a system directory.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://assets.checkra.in/downloads/linux/cli/x86_64/dac9968939ea6e6bfbdedeb41d7e2579c4711dc2c5083f91dced66ca397dc51d/checkra1n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv checkra1n /usr/bin/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Install Clang 11 on Linux.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install clang-11 xdd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Install ld64 and cctools-strip from the checkra1n package repository. Other distros need to manually compile them for newer Clang versions.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;deb https://assets.checkra.in/debian /&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/checkra1n.list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-key adv --fetch-keys https://assets.checkra.in/debian/archive.key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install ld64 cctools-strip&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;Get the pongoOS source code and compile it, using konradybcio’s fork.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/konradybcio/pongoOS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pongoOS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/lib/llvm-11/lib/&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;EMBEDDED_CC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/bin/clang-11&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;EMBEDDED_LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-fuse-ld&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/ld64 &lt;span class=&#34;nv&#34;&gt;STRIP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cctools-strip make all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Note: the pongoOS source has not been updated in a long time, so it sometimes fails to compile. You can also compile it inside a macOS virtual machine. The following commands compile it with Xcode on macOS Ventura:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xcode-select --install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/konradybcio/pongoOS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pongoOS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;You will end up with &lt;code&gt;build/Pongo.bin&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;4. Compile the Linux Kernel&#xA;    &lt;div id=&#34;4-compile-the-linux-kernel&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#4-compile-the-linux-kernel&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install build dependencies.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install build-essential clang  libncurses5 flex git bc bison&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Get the linux-apple kernel source provided by konradybcio.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/konradybcio/linux-apple&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; linux-apple&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Get the defconfig provided by SoMainline.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://raw.githubusercontent.com/SoMainline/linux-apple-resources/master/example.config -O ./.config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Adjust PAGESIZE.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;arm64 &lt;span class=&#34;nv&#34;&gt;LLVM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; menuconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Press &lt;code&gt;/&lt;/code&gt; to search, enter &lt;code&gt;_PAGE&lt;/code&gt;, and press 1.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;For PAGESIZE, set A8 processors to 4K and A9 or newer processors to 16K. Then press Exit and save &lt;code&gt;.config&lt;/code&gt;.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/iphone-6-postmarketos/images/Screenshot_20241004_215131.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Compile the kernel.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;arm64 &lt;span class=&#34;nv&#34;&gt;LLVM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; -j&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;nproc&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; Image.lzma dtbs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;8&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;You will end up with &lt;code&gt;arch/arm64/boot/Image.lzma&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Get the dtbpack script and put it in the Linux kernel directory.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://raw.githubusercontent.com/SoMainline/linux-apple-resources/master/dtbpack.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x dtbpack.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;10&#34;&gt;&#xA;&lt;li&gt;Generate dtbpack.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./dtbpack.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;5. Compile the postmarketOS rootfs&#xA;    &lt;div id=&#34;5-compile-the-postmarketos-rootfs&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#5-compile-the-postmarketos-rootfs&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Install &lt;a href=&#34;https://ivonblog.com/en-us/posts/postmarketos-general-installation/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;pmbootstrap&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Initialize it. Select apple-iphone6 as the device model and xfce4 as the desktop environment.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Create the rootfs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;6. Boot into Linux&#xA;    &lt;div id=&#34;6-boot-into-linux&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#6-boot-into-linux&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Set up &lt;a href=&#34;https://ivonblog.com/posts/linux-access-ios-files/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;libimobiledevice&lt;/a&gt; and confirm that Linux recognizes the iPhone.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Connect the iPhone to the computer and manually enter DFU mode: power it off and wait 5 seconds. Hold the power button for 3 seconds, then hold power + Home for 10 seconds. Release the power button and keep holding Home.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;After confirming it is in DFU mode, open a terminal in the pongoOS source directory and use checkra1n to enter the pongoOS Shell.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pongoOS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo checkra1n -v -V -p -c -k ./build/Pongo.bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;At this point, you should see the pongoOS Shell on the iOS device screen.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/iphone-6-postmarketos/images/20241005_115452.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Start postmarketOS netboot.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap initfs hook_add netboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap export&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;Send the Linux initramfs to the iOS device.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pongoOS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 scripts/load_linux.py -k &lt;span class=&#34;s2&#34;&gt;&amp;#34;linux-apple-kernel-directory/arch/arm64/boot/Image.lzma&amp;#34;&lt;/span&gt; -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;linux-apple-kernel-directory/dtbpack&amp;#34;&lt;/span&gt; -r /tmp/postmarketOS-export/initramfs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;ol start=&#34;7&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Wait for Linux to boot&amp;hellip; and it kernel panics. Damn it.&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;https://static.ivonblog.com/posts/iphone-6-postmarketos/images/Screenshot_20241005-220705.webp&#34;&#xA;    onerror=&#34;this.onerror=null;this.src=&#39;https://ivonblog.com/images/unable-to-load-the-image-pepe.webp&#39;&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;If it boots normally, send the Netboot rootfs and you can enter the Linux system.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pmbootstrap netboot serve&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh user@172.16.42.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;7. Conclusion&#xA;    &lt;div id=&#34;7-conclusion&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#7-conclusion&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Every time I do this kind of thing, I think of this song. It&amp;rsquo;s all a waste of time again.&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; overflow: hidden;&#34;&gt;&#xA;    &lt;iframe style=&#34;position: absolute; width: 100%; height: 100%;&#34;&#xA;        src=&#34;http://www.youtube.com/embed/rIjW7wKzU7s&#34; allowfullscreen frameborder=&#34;0&#34; loading=&#34;lazy&#34;&gt;&#xA;    &lt;/iframe&gt;&#xA;&lt;/div&gt;&lt;/p&gt;&#xA;&lt;p&gt;At the moment, this is not practical. It is a bit like stubbornly flashing postmarketOS onto an Android phone with terrible driver support. The biggest problem is still poor driver support. Just look at the &lt;a href=&#34;https://github.com/SoMainline/linux-apple-resources&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;table provided by SoMainline&lt;/a&gt;: almost every hardware feature has an X next to it.&lt;/p&gt;&#xA;&lt;p&gt;And who is going to reverse engineer Apple device drivers? Are there developers with Asahi Linux-level enthusiasm for this? On top of that, booting Linux still depends on a hardware vulnerability.&lt;/p&gt;&#xA;&lt;p&gt;Aside from booting and running some Linux programs, there is not much room for this to grow.&lt;/p&gt;&#xA;&lt;p&gt;A more realistic strategy is probably to run a JIT-accelerated UTM virtual machine on the iOS device, then run a Linux VM inside it. Much more practical, which is annoying but true.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/SoMainline/linux-apple-resources&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Resources for Linux on checkm8able iDevices - Github&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wiki.postmarketos.org/wiki/Apple_iPhone_6_%28apple-iphone6%29&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Apple iPhone 6 (apple-iphone6) - postmarketOS Wiki&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://project-insanity.org/2020/04/16/running-postmarketos-on-iphone-7/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Running postmarketOS on iPhone 7 - project-insanity.org&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://project-insanity.org/2020/04/22/linux-with-wayland-is-now-running-on-iphone-7/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Linux with Wayland is now running on iPhone 7 - project-insanity.org&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/linux/comments/kvmsfd/success_iphone_7_booting_ubuntu_2004_to_full/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;SUCCESS: iPhone 7 booting Ubuntu 20.04 to full gnome-shell desktop GUI - Reddit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://x.com/konradybcio/status/1531963130934329344&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Linux on iPad Air 2 - Twitter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content:encoded>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/en-us/posts/iphone-6-postmarketos/featured.webp" />
    </item>
    
  </channel>
</rss>
