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:
- Unlocked the bootloader
- This requires an online unlock procedure using the phone’s serial number and IMEI.
- Flashed Android 13
- 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
Interesting observations:
- With a different cable, ADB and MTP started working.
- After flashing to Android, both cables work. After flashing Ubuntu Touch, they stop working again.
- ADB switches slowly — if I connect the wrong cable shortly after using a working one, it sometimes still connects.
- In a KVM virtual machine,
adb devices
always shows the device asoffline
even with right cable.
DisplayLink over USB-C
The convergence feature — HDMI over USB-C — is one of the main reasons I chose the Fairphone 5. It’s clear that there are only a few developers working on it, as there are quite a few small bugs. For example, the Open Store shows the app being installed and allows switching to another app, but the installation progress bar then appears in the wrong app. It would also be great to be able to install more than one app at a time.
When it comes to the web browser, mouse wheel scrolling sensitivity isn’t ideal — especially noticeable on Facebook.
On my home docking station, DisplayLink works only when I unplug the AC adapter. On my work docking station, it works immediately. I have two external monitors, so it would be great to configure their layout and use them as an extended display. It would also be nice to support mirroring mode to demonstrate the Ubuntu Touch user experience.
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.
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
I’m still a bit stuck with version string substitution. This feature is provided by an unreleased version of Clickable and allows distinguishing between builds for focal and noble.
In the case of Amazfish, the ICU package (used for transliteration) introduces binary incompatibility. In other words, each release requires rebuilding the package from source. The package uploaded to the OpenStore must therefore have different versions for focal and noble. Additionally, the version string must increase monotonically — meaning the noble version must always be higher than the focal one.
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.
- Google authenticator (authenticator ng) works.
- Dekko, mostly works. I have reported some bug.
Features I Haven’t Tried Yet
- Pure maps
- Video recording
- Cinny (or other Matrix client)
- Libertine
- Nextcloud integration
- Waydroid
I’m a bit disappointed by how the Fairphone 5 is described on its device page. It claims “Fully Optimized State: Advanced support” and rates the community strength as beta, but most of the content looks almost identical to other devices. For example, the Volla Phone shows a lower percentage of working features yet has the same community strength rating — and I would still consider it a better choice for end users.
The key detail is that the Fairphone 5 currently offers only the “devel” (daily) release channel, while other devices — like the Volla Phone — also provide “rc” and “stable” channels. This difference should be reflected in the progress bar showing supported features, since having only a development channel means the port is still less mature. The release channels table highlights this difference clearly: the Volla Phone lists three entries (devel / rc / stable), while the Fairphone only lists devel.
Update: Now Fairphone 5 have also stable channel for noble.
Overall, the displayed metrics don’t fully capture the real quality of the port. For instance, the feature list marks the camera as working, but in practice, the camera driver integration is still unreliable. Likewise, issues such as unexpected reboots and other stability quirks aren’t represented anywhere in these summaries.