TL;DR
Be very careful with qbootctl because it can brick your phone.
The long story:
I’ve a shift6mq shift-phone running postmarketOS and Android in a dual boot (slot A/B) setup.
Sometime in December, I had an appointment with my doctor for an annual checkup. I wanted to pay my doctor with my smartphone (Payconiq/Android), so it was time to switch my phone back to Android.
Instead of pressing the volume up key during the reboot (to switch to the bootloader), I ran my bootB sxmo user script.
#!/bin/sh
sxmo_terminal.sh /bin/sh -c '
doas qbootctl -s b
sleep 1
doas qbootctl -m b
sleep 1
doas qbootctl
sleep 10
doas reboot
'
I should have deleted this user script, because it bricked my phone before. And yes, also now my phone was bricked again… I’m stupid ;)
EDL backup
Since I had an EDL backup of my phone, I tried to fix the problem with EDL. No matter what I tried, it didn’t work.
Back to Germany (dec 2025)
I ended up sending my phone back to SHIFT GmbH Support/Reparatur to get it flashed again.
Back to Belgium (jan 2026)
I got my phone back. Luckily, installing postmarketOS wasn’t much work, since it was installed on an SD card.
Things I did to (try to) avoid the problem in the future.
I don’t trust qbootctl anymore, so I’ve tried everything possible to avoid it.
Delete my bootB sxmo userscript
jan@s6sxmo:~$ rm .config/sxmo/userscripts/bootB.sh
Uninstall qbootctl (failed)
I tried to remove qbootctl completely, but that didn’t work.
root@s6sxmo:~# apk del qbootctl
World updated, but the following packages are not removed due to:
qbootctl: device-shift-axolotl
Disable qbootctl service
rc-update del qbootctl
Normally this service is needed to mark a boot as successful, …
jan@s6sxmo:~$ cat /etc/init.d/qbootctl
#!/sbin/openrc-run
name="bootctl"
description="Mark current boot as successful in Android A/B interface"
# This marks the current boot as successful, without this after ~7
# reboots A/B devices automatically switch to the inactive slot
# causing a lot of confusion and usually a soft-bricked device
command="qbootctl"
command_args="-m"
start() {
default_start
}
… but it seems that this functionality is already present in the bootloader.
Create /usr/local/bin/qbootctl
root@s6sxmo:~# cat /usr/local/bin/qbootctl
#!/bin/sh
echo Don\'t use qbootctl, it bricks your phone!
sleep 1m
Change permissions of /usr/bin/qbootctl (so I can’t start it by accident anymore)
root@s6sxmo:~# chmod 644 /usr/bin/qbootctl
root@s6sxmo:~# chattr +i /usr/bin/qbootctl