Plasma Sprint in Graz 2025

It has been quite a long time since I attended any KDE sprint, last sprint for me was Plasma Sprint in Valencia, Spain before pandemic and personal life got in a way. Last month I had chance to attend Plasma Sprint 2025 in Graz, Austria. This was good opportunity for me to meet some of long time contributors to Plasma Mobile like Devin Lin and Luis, as well as other Plasma contributors to discuss some of technical details about my upcoming power management work.

Plasma Mobile group

Before sprint

Some of us arrived slightly earlier on Sunday/Monday at Graz including me, so we took that chance to socialize as well as do some hacking at realraum, local hackerspace in Graz

I spent some time trying to organize Plasma Mobile topics that we had planned to discuss at sprint mostly and discussing how we got involved in Plasma Mobile or Plasma with Luis and Devin! 😁

Hacking at realraum

Day ended with we going for dinner and, then from halfway mobile crew coming back to realraum because I couldn’t find my phone with me, realizing it was in my messy bag all along and then walking back to dinner. Pretty exhausting! (Sorry again! 🥲)

Sprint

15-min bug-squash

Plasma Mobile developers hacking at realraum

One of first things we did was to see what is most obvious bugs that we can find if we spend about 10-15 minutes with Plasma Mobile. Some of findings were,

  • Slow loading time of lock-screen when turning screen on first time
  • Over-all slow loading of top panel
  • Power button stops working in some conditions (That was discovered few days before sprint but that still counts, right?!)
  • User gets double ringing as well as dialer window gets frozen after call ends if screen is locked
  • … and many more

While we were not able to fix all, we still managed to fix quite a lot.

  • Devin and Luis worked on many optimizations for top panel including benchmarking and loading stuff in asynchronous way where possible
  • We worked on making it possible to show panel from shell on top of lockscreen so that we don’t need to load it again in kscreenlocker_greet when screen locks
  • If for some reason kwin_wayland restarts, that makes powerdevil crash due to some internal ddcutil implementation, while we work on proper fix, distributions with Plasma Mobile, they can start powerdevil with POWERDEVIL_NO_DDCUTIL=1 in Plasma Mobile setup.
  • We managed to fix Plasma Dialer bug with changes in Plasma Dialer as well as Vlad fixed KWin to let animation effects finish fully even when screen is locked by removing some old code.

Power management

Scheduled wakeups

In postmarketOS currently we can not use the powerdevil to wake device up using timerfd. Reason for this is if we set the CAP_WAKE_ALARM on executable it can not connect with dbus anymore.

See more details at this report, Fortunately there is still a way to set this capability on process using AmbientCapabilities option in systemd unit. While I was able to test this on my Arch Linux machine and it worked properly, on the postmarketOS this option was not working. Thankfully, jane400 from postmarketOS found that this is because of upstream systemd bug and fix for that needs to be back-ported to older version or systemd version in postmarketOS needs updating.

I worked on building systemd with aforementioned patch, however due to time constraint I decided to look at it after sprint, I will have update on this soon.

Push notifications

I also discussed with Volker on various aspects of KUnifiedPush, and infrastructure needed for push notifications that can wake the system on Plasma Mobile.

Some of action items include, adding support for WoWLAN in powerdevil, and adding a runtime independent wake-me-up-at-a-specified-time API in kidletime which can be then used by various apps to register wakeups from suspend.

Plasma developers at sprint

Always-on display

Lots of Android devices support the Ambient Display or so called always-on-display to show users of clock or notifications without users having to turn-on display. This feature is pretty useful and in general doesn’t really consume much energy if used on devices with AMOLED display panels.

Me and Xaver did some investigation into how this is working on android and how this can work with mainline devices. Some investigation on how it works in Android shows,

  • SurfaceFlinger can set ask hwcomposer HAL to put display in PowerMode::DOZE or PowerMode::DOZE_SUSPEND - Documentation link
  • hwcomposer HAL then based on display capabilities can send some DSI commands to display panels to activate internal always-on mode - Kernel DTS showing such DSI commands
  • This causes display to go in so called - “self-refresh” mode which means SurfaceFlinger does not need to send new data to panel on every refresh cycle, and display panel or hardware itself will self-refresh the current data in buffer.
  • This also means that GPU can shutdown all clocks as well as hardware domains that are responsible for sending data to display panel.

While this information is pretty extensive, it is not really clear how this can be implemented in mainline kernel yet. My current understanding is, this functionality is bound to self_refresh_active property of drm_crtc_state and userspace (KWin in this case) can send DPMS on/off request with this property set/unset when we want to enter or leave this mode.

Unfortunately at a quick look of kernel code, this is not really implemented in MIPI-DSI panels yet and only for eDP panels and in some drivers only. I plan to take a look at this in more details if I get time later on. If you are kernel developer reading this and have some insights please reach out to me! 😀

One side effect of this investigation was however that we found out that when dim effect is active we were redrawing whole display even when nothing was being repainted by lockscreen or shell. Xaver quickly fixed this bug in KWin which is quite nice power usage improvement.. 😉

Other infrastructure

We discussed several other topics in general Plasma Mobile stack / infrastructure, Devin has done good job of documenting notes for these topics in his blog post, I am linking some of topics here,

In addition some of ad-hoc topic discussion and bug triage work was done to clear out our issue tracker.

Grazer Linuxtage

KDE people at Grazer Linuxtage KDE booth

Plasma sprint was co-hosted with Grazer Linuxtage where we had a KDE booth on Saturday. We show-cased KDE Plasma running on SteamDeck, Krita with drawing tablet support on Wayland, HDR support and of-course Plasma Mobile running on OnePlus 6.

It was really great to see visitors being pretty curious about Plasma Mobile! I quite enjoyed booth duty as well as improvised hacking area nearby the booth. 😝

Outlook

Thanks to Harald Sitter and Kevin Krammer for hosting us and organizing this sprint! It was really well done, kudos to them! Also thanks to Harald for sightseeing tour of Graz city on last day! Thanks to Kevin Krammer and Andy Betts for photos!

I also want to thank KDE e.V. for sponsoring the travel and accommodation for sprint! It was really productive to able to meet all developers in-person. If you want to support KDE community please visit KDE donation page. It helps make such in-person developer meeting possible.