72 hours with Phosh and Mobian
by Badri Sunderarajan · Tue 22 October 2024
Inspired partly by the Debian on Mobile (with Phosh) Fund, I recently installed Mobian on my old-but-new Poco F1, after I managed to get it unlocked. First impressions are important, and you only get one chance at having them, so here are my observations from my first 72 hours of using the device. (I'm publishing this a bit more than 72 hours later, but that was mainly to conduct minor edits and add pictures.) This is more of a brain dump than having any target audience in mind. I might write separately in more (or less?) detail later.
Before I begin, some notes:
- I don't use smartphones much. My latest daily driver has been a Nokia 2720 Flip running KaiOS 2.5.
- I use Debian Bookworm as a daily driver on my laptop—either with GNOME, when I'm using the laptop screen, or sway, when I'm using my DASUNG e-ink monitor.
- The aforementioned laptop has a touchscreen, so I've been testing the touch responses of various apps here and there, even before I got an actual smartphone to test it on 😉
- Apart from the installation process, I haven't spelled out every procedure step by step, since that's usually explained in whatever docs I'm linking to. If there's multiple bits of information I had to piece together, I'll link to them all and/or write out the steps.
- I'm new to all this, so my methods may not be the best method out there (especially when I follow the Mobian Tweaks wiki page, which specifically warns that information could be out of date). That said, I'll try to insert updates whenever I find updated information. Feel free to drop me a message if you notice anything amiss.
- If it seems like I'm picking on Dino, that's only because it's an app I use a lot 🦕
With that out of the way, and without further ado, let's begin.
Installation
After Xiaomi's long-winded unlock process, this was a breeze. I found the weekly builds for Poco F1 from the wiki page and started downloading it; in the meantime I found out where the stable releases are and downloaded that as well. (It seems there was a difference between the sdm845
and qcom
image directories but now they've both been consolidated into qcom
). I ended up installing the weekly image since that's what downloaded first—so as you can see it was a very well thought-out reason 🙃
(Actually, the other reason was the wiki told me older builds—such as the latest stable—had an extra file to flash, but the command to do so wasn't listed. I could probably have figured it out, but this was my first time flashing anything onto a phone so I was playing it safe.)
The steps I followed were exactly as on the Mobian wiki (with a little bit of help from its friend, the LineageOS wiki):
Extract and
cd
into the downloaded file, then identify which bootimg to flash (mobian-qcom-phosh-20240922.boot-beryllium-tianma.img
in my case)Get the device into fastboot mode, by running
adb -d reboot bootloader
(you can also switch off the phone and then hold down the power and volume-down buttons simultaneously to get here)Flash the bootloader and then the filesystem (userdata), as well as erase something called the "dtbo" which I know nothing of but which sounded important:
fastboot flash boot mobian-qcom-phosh-20240922.boot-beryllium-tianma.img fastboot -S 100M flash userdata mobian-qcom-phosh-20240922.rootfs.img fastboot erase dtbo
The second command (flashing the userdata) got stuck for a bit at "30-something out of 40-something", which got me worried, but it eventually went past it and carried on.
All commands complete, I unplugged the phone and held down the power button to boot into my brand new Mobian!
Startup
On starting, I saw a tiny version of the usual flash of white-text-on-black before the Mobian splash screen came up. Hopefully I won't have occasion to actually try and read it. The wiki said the first boot would take some time because Mobian has to resize the partition to fill the entire available space. I didn't notice any such delay, but it's possible I missed it because I was admiring the aforementioned splash screen.
The login screen looked like the familiar GNOME/gdm login (is it?) but it was exciting seeing it on a phone! It said Debian 12 underneath which got me a bit confused; at first I thought even the weekly images I had downloaded from had Bookworm (Debian 12) for some reason. But when I went in and checked the repo I could confirm it was actually running Trixie (which will be Debian 13). I guess Debian updates those things as part of the grand release finalé rather than prematurely when the version is still in testing.
Shell
I've see Phosh before a few times, so this was somewhat familiar to me. That said, it was cool to be able to have all my familiar desktop apps running on mobile! The recent GNOME releases have been giving many "we've been thinking about what computing interfaces should look like in 2035" vibes, and Phosh carries that over into mobile.
App launching and navigation works differently from other interfaces I've seen (Android has taught us to expect a universal "back" button) but it matches conceptually with the "Super key"-triggered app overview in GNOME Shell. Phosh lets you swipe up from the bottom of the screen in lieu of the Super key, and you get to see your open apps at the top of the screen followed by the full app list at the bottom. (If done right, this layout could produce interesting effects on foldable phones!) The app list also has an option right at the bottom to toggle between all apps or only mobile friendly apps (determined by the X-Purism-FormFactor=Mobile
property in the app's .desktop
file).
SSH
sudo apt install sshd
was probably the first command I ran after installing Mobian. Having a mobile terminal is cooland all, but I'm not going to go around typing commands on that small screen, least of all when I have a full keyboard right in front of me!
That said, the inbuilt keyboard's "Terminal" layout is quite good, featuring special keys like ESC and Tab, customisable shortcuts for Ctrl+C
style key combinations, and more. This was phosh-osk-stub
by the way, since squeekboard
hadn't yet been packaged for Trixie. I've written more about this in the Keyboard section below.
Customisation
Unlike Android, iOS, and even GNOME, Phosh doesn't have a "home screen"; the full app list is displayed by default. If you want widgets, you'll have to put them on the notification (or the unlock) screen.
Actually, that's not quite true: there are times when an empty "desktop" with the desktop background shows through. If you watch carefully, you may get a fleeting glimpse of it in the wild just before a slightly heavy app finishes opening up; the less adventurous can open a program that's not mobile-optimised and doesn't manage to cover up the entire screen. The backround of this elusive desktop is what is adjusted in the "desktop wallpaper" setting in the Settings app, so be warned that even if you set that, you won't be seeing it often.
Phosh does allow you to customise the lock screen background as well as the background of the app drawer, by creating a custom CSS file as described in this wiki page. After setting the background the launcher and lock screen became quite laggy. I realised because I was using high resolution images; cropping and resizing to the Poco's screen size of 1080x2246 pixels brought it back to acceptable snappiness.
General desktop customisations should also work; I went ahead and changed my icon pack to Eliver Lara's Candy Icons, which is the same as what I have on my laptop. (It's a glowing neon look that may not be everyone's cup of tea, but hey that's what openDesktop.org is for!)
"Changing" the username and password
If you want your username to be something other than mobian
, this should actually be the first thing you do after installing your system, since your home folder will get cleared in the process. (There's a way to do it without clearing anything, but there's a risk it may mess up apps that expect the location of your home folder to be fixed.)
I followed the second method on the Mobian wiki, which involves changing the default mobian
user's user ID (and the mobian
group's group ID) to something other than 1000
, then creating a new user which will end up with a user (and group) ID of 1000
. The reason for this is that Phosh is hardcoded to log in to user 1001
's account by default.
The "PIN" is also your user pasword, used for things like "sudo" and unlocking your keyring. The login/unlock screen shows a numpad by default, and though there's an option to swich to a full keyboard I decided to keep my PIN as numbers just in case (and for ease of use; who wants to keep switching keyboards to unlock their phone).
Unfortunately, the Settings app didn't let me set number-only passwords saying they were too "weak". To get around this, I chose the "user sets password on first login" option and then used the passwd
command to set the password. (I think I did this via SSH, because I had already added my key to ~/.ssh/authorized_keys
to be able to log in there, but I'm not sure. Anyway, sudo passwd $YOUR_USERNAME
works fine.) Of course, I made sure it wasn't 4 digits and certainly not the default 1234
😉
I wonder if Phosh keyboards could accept a hint in the future to enter "password entry" mode. This would let them automatically switch to the same layout used on the lockscreen—which could be a numpad, but could also be customised to something fancy like the "lines on a grid" thing that Android has going (which would be translated to numbers in the backend for interoperability).
Software and Packaging
Mobian is basically Debian, so you can just fire up a terminal and run sudo apt install
like you would on a computer! GNOME's Software app is also installed for a graphical interface (and Flatpak support); surprisingly it's more snappy and responsive than I've seen it on my laptop or desktop.
I usually avoid Flatpak because initial packages tend to bring in 300MB instead of 300KB, but I made an exception this time for Newsflash and GNOME Podcasts (incidentally both RSS related and written in Rust—perhaps some RSS-related Rust libraries are still waiting to be packaged for Debian?). I had to initialise the official Flatpak repo with
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
before Flatpak apps started showing up in GNOME Software, suggesting that it's not enabled by default. Once enabled, if a package is available in multiple repos, you have the option of switching between repos to decide which version you want to install (guess which version I chose).
Finally, since this is proper mainline Linux, you can also build whatever packages you want, write on the phone itself! Just install git
or build-essential
or whatever you need and you'll be done. In a world where mainstream mobile operating systems become slow and sluggish even when just displaying a few texts and videos, having my entire development toolchain on my phone feels like a real power move 💪
Screenshots
How to take them, that is! Again, the Mobian wiki has a bunch of ways; I ended up choosing the third option which is to create a simple shell script and a launcher for it.
Shell script, stored at my ~/.local/bin/screenshot
:
#!/bin/bash
# this file should be stored as /home/mobian/bin/screenshot
SCREENSHOT=${HOME}/Pictures/screenshots/$(date +%Y-%m-%d-%H%M%S).png
notify-send -t 1000 screenshot "Taking a screenshot in 5 seconds"
sleep 5
grim "$SCREENSHOT"
notify-send screenshot "Screenshot stored at ${SCREENSHOT}"
Launcher, which I've kept at ~/.local/share/applications/screenshot.desktop
:
[Desktop Entry]
Name=Screen Shot
Type=Application
Icon=applets-screenshooter
Exec=/home/hippo/.local/bin/screenshot
Categories=Utility;
X-Purism-FormFactor=Mobile;
Tapping it it gives me five seconds to get to whatever screen I actually want, and then a notification when the shot is actually captured, which is handy. Incidentally, the screenshot gets captured on the lock screen as well, if I trigger it before locking!
The script uses grim
, which I've used before for sway thanks to some helpful suggestions from Amin Hollon (unfortunately I can't find the exact conversation anymore).
Audio
Both the Poco F1 and the OnePlus 6/6T have a known issue where the audio is really soft by default. On full volume, one can detect faint signs of loud music playing if one holds the phone to one's ear. The solution, described in the wiki, involves:
"Masking" the systemd service (I didn't know that was a thing):
sudo systemctl mask alsa-restore
Creating a config folder for
wireplumber
:sudo mkdir -p /etc/wireplumber/wireplumber.conf.d/
Creating a config file in the aforementioned folder, named
51-qcom-sdm845.conf
or maybe the more descriptive51-qcom-disable-suspension.conf
used in the related GitLab issue. The contents of that file are as below.monitor.alsa.rules = [ { matches = [ { # Matches all sources node.name = "~alsa_input.*" }, { # Matches all sinks node.name = "~alsa_output.*" } ] actions = { update-props = { audio.format = "S16LE" audio.rate = 48000 api.alsa.period-size = 4096 api.alsa.period-num = 6 api.alsa.headroom = 512, # session.suspend-timeout-seconds = 0 # dither.method = "wannamaker3", # add dither of desired shape # dither.noise = 2, # add additional bits of noise } } } ]
The GitLab issue also mentions deleting
/etc/wireplumber/main.lua.d
which sounds destructive but I have little clue of how these things work 😅
Anyway, following the preceding steps meant I was able to listen to music without any problems, as well as record sound. (Audio during calls is a different ballgame; see below for more on that.)
My earphones work well too, through the Poco's audio jack. I didn't try them until later, so I'm not sure if they always worked or if they were soft too until I'd done the audio fix. Maybe something to watch out for the next time you install Mobian 😉
Incidentally, I suddenly found the sound quality of my earphones to be crackly with a lot of static. It was at night, so I wasn't able to test it with speakers. The next night though, the crackles had magically disappeared! It might be something to do with a bunch of audio-related system updates I had installed in the meantime, but whatever it was my audio setup is now going well. Okay, almost. Maybe I should try adjusting it to be a leetle bit lowder than it currently is....
Calls and SMS (modem stuff, basically)
SMS works well in the inbuilt messaging app Chatty; nothing new to report there. I enabled delivery reports because SMS delivery has become a bit unreliable in the past few years, so I like to track when my message has actually reached the other person's device. Chatty also supports Matrix and XMPP, although it's a bit buggy and there are some basic features missing (it's all being worked on). But hey, at least it's possible!
Calls was a different story. The phone would ring when I received a call, but upon picking up neither I nor the caller were able to hear a thing. When one of us inevitably hung up, the phone's audio would come to life again which the characteristic beep-beep of disconnection. Both the ringing and the hanging-up were clearly audible, but not everything in between!
It turns out there were two things happening here.
Note: Just in case it wasn't clear, these audio and call issues are specific to Qualcomm based devices like the Poco F1 and OnePlus 6/6T. Calls and audio on other devices like the Librem 5 and Pinephone work fine. Hopefully they're temporary hiccups that'll eventually work fine here too.
Building tinyalsa
and q6voiced
Firstly, audio call support requires the package q6voiced
which, along with its dependency tinyalsa
, were not yet packaged for Debian. Packaging for both is being worked on by erebion, who helped me out on the Mobian group chat.
The merge requests for both tinyalsa
and q6voiced
might be merged in by the time you read this, but in case they aren't here's the procedure for installing them. Note that the exact repo and branches may change, so be sure to check the merge request first for the latest updates:
First, install
git
andbuild-essential
on your system if you haven't yet:sudo apt install git build-essential
And yes, by "system" I mean the phone. You're going to do the power move of compiling things right there! 😉
Next, clone erebion's fork of the
tinyalsa
repo,cd
inside it, and build:git clone https://salsa.debian.org/erebion/tinyalsa-fork-for-merging.git tinyalsa cd tinyalsa/debian dpkg-buildpackage -us -uc -rfakeroot -b
At this point,
dpkg-buildpackage
may fail citing missing dependencies. You can just install those dependencies and try again. In my case, I had to install the following:sudo apt install doxygen graphviz debhelper-compat meson
Once installed, run the
dpkg-buildpackage
command again. Depending on what you already have installed, your dependencies may differ; I got them all in three attempts.At this point, you can get out of the directory and see a bunch of
.debs
ready to install! There are three to install in total:libtinyalsa2
,libtinyalsa2-dev
, andtinyalsa
...but I just realised I don't havetinyalsa
installed, andq6voiced
doesn't list it as a dependency, so I guess only the first two are necessary:cd .. ls # if you want to admire the files ;) sudo apt install ./libtinyalsa2_2.0.0+git20240621-1_arm64.deb ./libtinyalsa2-dev_2.0.0+git20240621-1_arm64.deb
Remember to tweak the file names if necessary.
The procedure is much the same for
q6voiced
, so I'm just going to skim through it:# Get into the repo git clone https://salsa.debian.org/erebion/packaging_q6voiced.git q6voiced cd q6voiced/debian # Build the package dpkg-buildpackage -us -uc -rfakeroot -b # Get out and install cd .. sudo apt install ./q6voiced_0~0+git20240607-1_arm64.deb
Finally, you need to set the
q6voiced
configuration file, in/etc/q6voiced.conf
:q6voice_card=0 q6voice_device=4
The audio workaround
The second thing that had to be set up was a workaround script. It turns out the system doesn't manage audio at all when a call is actually in progress; both mic and speakers are handled directly by the modem. In order to activate this, I had to set up a workaround script which isn't mentioned in the Mobian wiki page for my phone, but is described on the page for the OnePlus 6 and 6T.
#!/bin/sh
# dbus-monitor is run as a child process to this script. Kill child process too when the script terminates.
trap 'pkill -9 -P $$ && exit 0' INT TERM
interface=org.freedesktop.ModemManager1.Call
member=StateChanged
dbus-monitor --system "type='signal',interface='$interface',member='$member'" |
while read -r line; do
state=$(echo "$line" | awk '/\<int32\>/ {print $2}')
if [ -n "$state" ]; then
# Call State is based on https://www.freedesktop.org/software/ModemManager/doc/latest/ModemManager/ModemManager-Flags-and-Enumerations.html#MMCallState
if [ "$state" -eq '0' ] || [ "$state" -eq '3' ]; then
echo "Call Started"
# Unload module-suspend-on-idle when call begins
pidof pulseaudio && pactl unload-module module-suspend-on-idle
# With Wireplumber audio, the Pulseaudio
# compatibility layer doesn't support
# loading/unloading the suspend module. Add
# loopback sinks and sources instead.
sleep 1
pw-loopback -m '[FL FR]' --capture-props='media.class=Audio/Sink' &
pw-loopback -m '[FL FR]' --playback-props='media.class=Audio/Source' &
fi
if [ "$state" -eq '7' ]; then
echo "Call Ended"
killall -9 pw-loopback &
# Reload module-suspend-on-idle after call ends
pidof pulseaudio && pactl load-module module-suspend-on-idle
fi
fi
done &
wait
Debian Trixie uses pipewire for its sound system, whereas older versions of Debian use pulseaudio. The above script detects which one you're using and acts accordingly. I saved it as /usr/local/bin/call_audio_idle_suspend_workaround.sh
but you can also save it anywhere else you want..
To activate the script, I used the following systemd user file at /etc/systemd/user/call_audio_idle_suspend_workaround.service
:
[Unit]
Description=Disable pulseaudio/pipewire suspend-on-idle module during call
After=ModemManager.service
ConditionUser=!@system
[Service]
ExecStart=/usr/local/bin/call_audio_idle_suspend_workaround.sh
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=default.target
To activate the new systemd service, I used,
systemctl --user enable call_audio_idle_suspend_workaround.sh
The OnePlus6 also needs a systemd service to auto-restart q6voiced
when waking up after suspend. I didn't find this necessary on the Poco F1.
Update: Another issue I found later is that if the device is suspended, it doesn't wake up even when a call comes in. A workaround is described here that I am yet to test out.
Waydroid
Despite having access to an array of desktop apps, there are still times when one needs to run Android apps such as Organic Maps. With 6GB RAM, my Poco could easily handle Waydroid, installed through the standard procedure, although I had to make sure not to run any other apps with high RAM usage at the same time. I think the Waydroid container took up around a GB and a half—two, depending on the apps you're running on top of it—which is why some devices like the older Pinephones struggle to run it.
I like to close down the Waydroid container when I'm done using it, which I made easy using the following launcher (saved as ~/.local/share/applications/stopwaydroid.desktop
):
[Desktop Entry]
Type=Application
Name=Waydroid Stop
Exec=sh -c 'waydroid session stop && notify-send -i waydroid "Waydroid stopped" "Your Waydroid session has been stopped."'
Icon=waydroid
X-Purism-FormFactor=Mobile;
You can remove the && notify-send ...
bit if you don't want the notification.
Background services
Besides keeping on top of calls and SMSes, I set up Dino and Geary to run in the background for emails (IMAP) and messages (XMPP), respectively. The default SMS app Chatty has XMPP support, but it's a little broken, or at least I couldn't get it working on my phone (although it worked to some extent when I tried Chatty on my laptop earlier). Luckily, I had already set up automatic launch for these two apps on my laptop, so all I had to do was copy over the respective .desktop
files from my laptop's ~/.config/autostart
to the phone's:
im.dino.Dino.desktop
[Desktop Entry]
Version=1.0
Name=Dino (background service)
GenericName=Jabber/XMPP Client
Keywords=chat;talk;im;message;xmpp;jabber;
Exec=dino-im --gapplication-service
Icon=im.dino.Dino
StartupNotify=true
Terminal=false
Type=Application
Categories=GTK;Network;Chat;InstantMessaging;
X-GNOME-UsesNotifications=true
MimeType=x-scheme-handler/xmpp;
geary-autostart.desktop
[Desktop Entry]
Name=Geary
GenericName=Email
Comment=Send and receive email
Keywords=Email;E-mail;Mail;
Icon=org.gnome.Geary
TryExec=geary
Exec=geary --gapplication-service
Type=Application
Terminal=false
Categories=GNOME;GTK;Network;Email;
StartupNotify=true
NoDisplay=true
I think these were modified from the apps' actual launcher files, since the original Geary one had alternative names in various languages! I trimmed them out in order to keep this snippet brief.
Having these services running constantly is not ideal. Work is currently on to implement a Unified Push notification system, where one listener stays running to "wake up" other apps when a notification comes for them. As a start, work is on to implement Unified Push for Matrix messages in Chatty.
Writing and Keyboards
squeekboard is the default keyboard for Phosh, but since it's not packaged for Trixie yet my Mobian came with phosh-osk-stub. This program started as an experimental keyboard (hence the name) but is now fully usable in its own right. There's even a "Terminal" mode that has extra keys like Tab and Escape, as well as a handy (and customisable) list of shortcuts for doing things like Ctrl+C
or Shift+Ctrl+V
.
The latest command I used to customise that list is
gsettings set sm.puri.phosh.osk.Terminal shortcuts "['<ctrl>z','<ctrl>r', 'Home', 'End', '<ctrl>w', '<alt>b', '
<alt>f', '<ctrl>v', '<ctrl>c', '<ctrl><shift>v', '<ctrl><shift>c', '<ctrl>q']"
...where you can replace the above shortcuts with whatever ones you actually want.
What I found to be the coolest feature though is that you can long-press on the space bar to enter a cursor navigation mode, allowing me a more accurate way to precisely place the cursor than futilely tapping and hoping I hit right. I think Android has a "slide on the space bar to move your cursor" thing going too these days, but the only other place I've seen someone think about this is on the onscreen keyboard of my Kobo devices, where they actually include "left" and "right" arrow keys for my cursor to navigate. Coupled with their larger screens, this method is more precise, but the phosh-osk-stub version is more fun. In fact, I've gotten so used to it now that I forget I can just tap on the screen to place my cursor approximately where I want it to be.
(Guido, author of phosh-osk-stub, informed me that I could also set literal arrow keys as part of the shortcuts in Terminal mode, if I wanted.)
Clipboard
phosh-osk-stub recently got a "paste" button that works for text copied from anywhere. Work is in progress to have a corresponding "copy" button too. Until then, some GTK apps show a mini popup when you long-press and select text, allowing you to cut, copy, or select all.
What about non-text items, like images and other files? There's a simple trick for that: switch to the Terminal layout in phosh-osk-stub and use the old familiar Ctrl+C
and Ctrl+V
as you would on a destkop! Hmm, maybe I should go and modify my configuration to make them the first items on the shortcut list.
Sometimes, I have some text on the laptop that I want to copy to my phone, or vice versa. I found the quickest way to do this, if you have SSH set up, is to install wl-clipboard
. Now I can SSH into the phone, run echo "whatever I wanted to paste" | wl-copy
, and then head over to the phone and paste it. I've done it the other way too, on occasion, such as to get the contents of an SMS over to my laptop.
Word completion (autosuggest)
At first, the typing experience was a bit fiddly—especially compared to the tactile buttons I'm used to on my flip phone—but then I discovered how to enable autosuggest (called "word completion") which sped up things considerably.
Phosh has a 'Mobile Settings' app which lets you set parameters specific to phones. One of them is the word completion settings, where you can tell your keyboard to automatically take hints from the app and enable word completion where it'll be useful. Independently, you can enable an option that lets you manually toggle word completion on and off via the menu.
Of course, what engine is used to complete these words is customisable. I'm not sure what the default was (not hunspell
, I think, because that wasn't installed), but it was only suggesting options based on the few letters I'd already typed in the current word. Then I set up presage
, which seems to use some kind of Markov analysis that takes earlier words into account while predicting the next one (and learns based on what I've typed before). The presage
engine was marked experimental due to clashes with the keyboard's "long press the space bar to move around" feature (apparently it ended up with a word salad), but that had been fixed just a day or two before I started my experiments!
One thing I noticed is that even presage
places a lot of emphasis on what letters I've already typed—in the sense, it assumes I never make typos. This means it gets easily derailed when I do tap the wrong letter by accident. Maybe this behaviour can be modified to also "guess" nearby letters somehow, similar to T9 typing on button phones where all of g, h, and i are taken into account as possible intended letters when I press the 4 key that represents all three of them. In this case, the possiblities would be not cohabitants of the same key but more like nearby letters that may have been mistyped—such as considering q, e, a, and s when I press w on a QWERTY keyboard. The nearby letters could be given a lower weight than the original, but the engine could still consider all of them when generating suggestions.
That said, when I don't make typos the suggestions from presage
are very useful, and I can see it learning my own preferred words and phrases as well.
Touch interaction
I've been seeing apps add touchscreen support over time even when on my laptop, and things usually worked fine when I stuck to apps specifically adapted to mobile screens (which is quite a lot of them).
I do come across the occasional glitch, such as the Dino accounts window which is too wide to fit in the phone screen. My first workaround was to switch the phone to landscape mode. The person behind LinuxPhoneApps.org suggested using the Compositor settings in the Mobile Settings app to force-resize the popup (and any other non-fitting apps). I used that trick on the file picker too, but also noticed a newer and more responsive file picker in some of the new apps, so I'm looking forward to that catching on.
Tapping on buttons can be fiddly, especially if they're small and the disappearing kind. To reply to a message in Dino, I need to hover over it and click on the "reply" button that comes up on top. Or rather, since it's a phone, I have to tap the message and then tap the reply button, and I don't get second chances because if I tap wrong it ends up selecting the previous message instead (and revealing that message's reply button). I wonder if it would help to make tapping areas in general larger than they visually appear, because if someone's tapping nearby that's probably what they're reaching for. In which case this might be something that could be implemented GTK-wide (I'm no expert though).
The other thing is that sometimes when I'm scrolling over a list of items, one of the items discolours a bit as if it's been selected, making me worry that I've accidentally tapped it. This discolouration is probably designed for the hover of a mouse—it's a bit disorienting, until it becomes familiar.
Battery life
The million dollar question! The short answer is, I've been charging it twice a day—once in the morning, and once at night. If I time it right and switch it off during the night, I can bring that down to a half-charge at night which I then complete in the morning.
This varies with usage. The first day, the battery lasted 4½ hours with heavy usage—an SSH shell to my laptop was running all the time, as was the screen most of the time (I had enabled "do not sleep" mode, a.k.a. "Caffeine", since I hadn't yet learnt this tweak to let the SSH connection itself keep the phone awake). I was setting up a bunch of things on the system, including downloading and installing the many GBs of Waydroid.
After charging it at night, I left it on but disabled the Internet, and in the morning it had dropped by only about 15% in ~9½ hours, which I thought was great, but I later realised it had gone into such a deep sleep that it wasn't waking up even when a call came in. When I finally got around to waking up the phone, I would see a brief flash of "Call ended" followed by a missed call notification for something possibly a while in the past.
Waking up for modem activity is possible, but in addition to calls and SMSes "modem activity" also includes random things like signal change, which in practice means my phone seems to wake up far too ofter to get a reasonable sleep. I'm still working on this. Anyway, at least I know that if I don't care about missing some calls this is workable as a daily driver.
Random crashes
I've had my phone freeze on me a few times. Once was when I was running both Duolingo on Waydroid and Dino—both of which tend to use GBs of RAM, so that might have been what caused it.
Epiphany (or "Web" as it is now called) is well integrated, but it crashes when you try to long-press anything. I had removed Firefox from my phone (after accidentally removing it from my laptop, as I didn't realise the SSH session was not connected) but perhaps I'll add it back. The URL bar in Epiphany is one place where long-pressing actually works to start selecting text, so that makes Epiphany workable, although a bit more cumbersome when I want to open things in multiple tabs.
I tried adding my XMPP account to Chatty and it didn't work (there were no such issues on my laptop installation, which is possibly a newer version). Unfortunately, when I try deleting the account, Chatty freezes instead.
Finally, I think the phone has trouble waking up if it goes to sleep without a user logged in (i.e. on the login screen). I haven't tested this because I always end up hurriedly logging in as soon as the phone boots and before it has a chance to sleep.
Having a (Debian) smartphone
Physically speaking, the Poco F1 is much larger and more in-your-face than my Nokia 2720 Flip. Its size makes it a bit harder to stow away while still keeping it nearby. What's more, the white indicator that starts blinking on any notification can be more distracting, calling you in without really explaining why. The flip phone handles this by displaying a fuller message and icon on its outer screen, and then going blank—so you can decide whether it's worth worrying about or not. Of course all these are true of nearly any smartphone, regardless of what they're running. I can see why foldable phones might be popular to address some of these issues.
On the other hand, Mobian makes the Poco F1 powerful. More than any other phone I've seen (smart or otherwise), this approaches being a mini laptop in terms of what it can do. This device unfortunately doesn't (yet) support convergence so I can't dock it to a monitor and keyboard and us it as a full-fledged screen. But I can still achieve quite a bit—either directly or using SSH (ironically through some other laptop or desktop).
It's also customisable, not just in the sense that I can easily flip settings, but in the sense that nothing stops me from digging into its internals if I want to, and fixing anything that affects me. If the various bugs and problems were ironed out, would this be my perfect phone? The answer, I think, is yes.
Or rather, yes until someone brings out a similar device in a flip-phone form factor with comparably powerful specs 😉