I recently broke the screen on my previous phone, so I decided it was time to try something new. I went for a Fairphone 5—and of course, I couldn’t resist flashing Ubuntu Touch on it.

Don’t get me wrong: I know I’m using daily builds of unreleased version. Still, the overall experience has been surprisingly good. This post is a collection of my first impressions and notes. Mostly so I can reference them later without explaining everything over and over again.

Flashing

Flashing was a bit tricky. At one point, I even managed to brick the phone—I’m still not sure how. Here are the steps I took:

  1. Unlocked the bootloader
    • This requires an online unlock procedure using the phone’s serial number and IMEI.
  2. Flashed Android 13
  3. Flashed Ubuntu Touch

On the first attempt, the phone only booted into recovery. The interesting part is that version information was missing. Luckily, I succeeded on the second attempt.

MTP and ADB over USB

Developer mode is enabled, but MTP and ADB almost never work for me. I did see MTP appear once, but I don’t know what triggered it. It’s hard to express how annoying this is—debugging and file transfers has to be done over SSH.

# lsusb
Bus 002 Device 014: ID 05c6:903a Qualcomm, Inc. FP5
Started umtprd.service - uMTP-Responder.
09-29 18:43:39.100  6491  6493 I adbd    : usb_ffs.cpp:276 opening control endpoint /dev/usb-ffs/adb/ep0
09-29 18:43:39.100  6491  6491 I adbd    : main.cpp:291 adbd started
09-29 18:43:39.100  6491  6493 I adbd    : usb.cpp:154 UsbFfsConnection constructed
09-29 18:43:39.100  6491  6494 I adbd    : usb.cpp:261 UsbFfs-monitor thread spawned
Started adbd.service - Android Device Bridge Daemon.
09-29 18:43:39.101  6491  6494 I adbd    : usb.cpp:300 USB event: FUNCTIONFS_BIND
09-29 18:43:39.195  6491  6492 I adbd    : adbd_auth.cpp:339 adbd_auth: received a new framework connection
09-29 18:43:39.196  6491  6492 I adbd    : adbd_auth.cpp:160 adbd_auth: received new framework fd 16 (current = -1)
[2025-09-29:18:43:39.222] qtmir.sensor: OrientationSensor::readingChanged
[2025-09-29:18:43:39.222] qtmir.sensor: PlatformScreen[0x55612f5740]::onOrientationReadingChanged()
[2025-09-29:18:43:39.222] qtmir.sensor: PlatformScreen[0x55612f5740]::customEvent() - unknown orientation.
[uMTPrd - 18:43:39 - Info] uMTP Responder
[uMTPrd - 18:43:39 - Info] Version: v1.6.2 compiled the Jul 14 2023@10:52:12
[uMTPrd - 18:43:39 - Info] (c) 2018 - 2021 Viveris Technologies
[uMTPrd - 18:43:39 - Info] Sending command : unlock

Apps and the Noble Migration

As I explained previously I am using noble/daily. The migration of apps to noble is still in progress. Many of basic apps doesn’t work because it wasn’t ported yet. Most known is probably email client dekko.

For porting there is guide here: https://forums.ubports.com/topic/11333/app-developers-guide-to-publishing-applications-for-ubuntu-touch-24.04-1.x

But I have some open questions about versioning:

  -DCLICK_VERSION=$(
    git describe --tags --dirty|sed -e 's/^v//'
  ).ut${SDK_FRAMEWORK#ubuntu-*-}
  • git describe should return the app version (e.g. 2.7.0)
  • SDK_FRAMEWORK should contain the framework (e.g. 24.04.1)

This expects the use of CMake, but my apps don’t define the version through a CMake variable to replace it in the manifest. Ideally, Clickable would fill in the package version automatically.

Additionally, The process of building for other frameworks should be explained more clearly in the documentation:

CLICKABLE_FRAMEWORK=ubuntu-touch-24.04-1.x clickable build --arch arm64 --app --skip-review

At one point I had to prune Docker images to get rid of a wrong version. Since builds always go into the same directory, mixed binaries are possible.

On the bright side: Amazfish, qthLocator, and exPhone now compile successfully and run fine.

Calendar

Setting up Google Calendar sync caused a noticeable lag when opening the authentication dialog.

Accidentally enabling the Chinese calendar switched part of the UI to Chinese! This seems to be hardcoded without translation support. I was expecting extra events (Chinese New Year, zodiac years, lunar phases), not a language change.

Contacts

Export/import is unreliable. On the first try, exporting from my old phone stopped at around 70% of contacts. Until I tried importing, I had the impression everything was working fine. On the second attempt, I managed to export the remaining contacts. However, I had to remove all contacts beforehand via the terminal, since repeated imports don’t detect duplicates.

rm -rf ~/.local/share/evolution/addressbook/system/

Other Notes

  • 5G/VoLTE “just work™” including Calls and SMS.
  • Wi-Fi feels a bit slow.
  • I’ve had a few random reboots.
  • Camera app is unreliable. Sometimes switching between front/back helps; sometimes it just freezes.
  • Notch patches needed (otherwise the clock isn’t visible). Not sure if they actually work.
  • Calendar icon is always visible in the status bar (since I always have something scheduled).
  • Rotation lock is nice new feature shows a “rotate” button when needed. But I’ve seen it stop working after a while.
  • Fingerprint reader works (though the setting is ugly and buried deep).
  • Flashlight works.
  • The battery is draining really fast—it lasts roughly two days.

Features I Haven’t Tried Yet

  • Google authenticator
  • Pure maps
  • Video recording
  • Cinny (or other Matrix client)
  • Libertine
  • Nextcloud integration
  • Waydroid

I am a little disappointed with the description on the device webpage. It claims “Fully Optimized State: Advanced support” and community strength beta, but most of the content is similar to other devices. For example, the Volla Phone shows a lower percentage of working features but the same community strength rating—yet I would still recommend it as a better device for end users.

The most important detail, the “release channel: devel”, omits the “release channel: stable”. This should also be reflected in the progress bar showing supported features. The release channels table makes this clear: the Volla Phone lists three rows (devel/rc/stable), while the Fairphone only shows devel. It only mentions focal, not noble, even though the FP5 also supports noble—this isn’t noted on the page.

Overall, the metrics don’t fully reflect the port’s real quality. For instance, the feature list marks the camera as working, but the camera driver integration is unreliable in practice. Similarly, sudden reboots and other quirks aren’t represented at all.

Loading

By Jozef Mlích

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

Leave a Reply

Your email address will not be published. Required fields are marked *