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