If you have recently installed a very up-to-date Linux distribution with a desktop environment, or upgraded your system on a rolling-release distribution, you might have noticed that your home directory has a new folder: “Projects”
Why?
With the recent 0.20 release of xdg-user-dirs we enabled the “Projects” directory by default. Support for this has already existed since 2007, but was never formally enabled. This closes a more than 11 year old bug report that asked for this feature.
The purpose of the Projects directory is to give applications a default location to place project files that do not cleanly belong into one of the existing categories (Documents, Music, Pictures, Videos). Examples of this are software engineering projects, scientific projects, 3D printing projects, CAD design or even things like video editing projects, where project files would end up in the “Projects” directory, with output video being more at home in “Videos”.
By enabling this by default, and subsequently in the coming months adding support to GLib, Flatpak, desktops and applications that want to make use of it, we hope to give applications that do operate in a “project-centric” manner with mixed media a better default storage location. As of now, those tools either default to the home directory, or will clutter the “Documents” folder, both of which is not ideal. It also gives users a default organization structure, hopefully leading to less clutter overall and better storage layouts.
This sucks, I don’t like it!
As usual, you are in control and can modify your system’s behavior. If you do not like the “Projects” folder, simply delete it! The xdg-user-dirs utility will not try to create it again, and instead adjust the default location for this directory to your home directory. If you want more control, you can influence exactly what goes where by editing your ~/.config/user-dirs.dirs configuration file.
If you are a system administrator or distribution vendor and want to set default locations for the default XDG directories, you can edit the /etc/xdg/user-dirs.defaults file to set global defaults that affect all users on the system (users can still adjust the settings however they like though).
What else is new?
Besides this change, the 0.20 release of xdg-user-dirs brings full support for the Meson build system (dropping Automake), translation updates, and some robustness improvements to its code. We also fixed the “arbitrary code execution from unsanitized input” bug that the Arch Linux Wiki mentions here for the xdg-user-dirs utility, by replacing the shell script with a C binary.
Thanks to everyone who contributed to this release!
Just like last year,
the Grazer Linuxtage team had made rooms available for KDE people to meet in the week prior to the conference.
More than twenty contributors attended, below are a few notes from discussions I have been involved with.
Photo by Kieryn Darkwater
AppStream release notes
We use AppStream application metadata in a number of places
currently:
Software stores such as Flathub, F-Droid, Google Play or the Microsoft Store.
Software centers such as Discover.
In-app application metadata has so far been maintained separately though, using the KAboutData API.
With KDE Frameworks 6.26 it will become possible to populate that from AppStream data as well,
reducing duplicated data and duplicated translation efforts.
We also expanded how we use release notes from AppStream data:
There’s new API for accessing
AppStream release notes inside an application itself. This is meant to avoid duplicated efforts
for in-app release notes.
The KDE Gear release automation will now handle notes for pre-releases
correctly. This means you can add release notes for users of CD builds already, those will get translated
and merged into the subsequent stable release notes automatically.
There’s a few more things to do here still:
We don’t have a Kirigami-based standard component for in-app release notes yet.
The metadata converters for F-Droid and Google Play don’t handle release notes yet.
LSAN rollout on the CI
After Albert had added infrastructure
for LeakSanitizer (LSAN) suppressions in the CI, we were
able to enable LSAN in several more repositories which had previously been blocked on “unfixable” or
intentional “leaks” outside of our control.
The increased visibility on actual issues then also helped with identifying and fixing a couple more “real”
leaks, e.g. in KGuiAddons and
LibKGAPI.
Qt 6.11 for Android
There has been some progress on the long overdue Qt update for our Android builds. This had been delayed
as it’ll imply some rather drastic changes to the supported Android versions and devices. Lacking alternatives
we will go ahead with this.
In particular, after 26.04.0 is out this means only Android 9 and higher will be supported, and
32bit ARM builds will be discontinued.
We prepared Qt 6.11 CI images and applied necessary build fixes to practically all of our apps that have Craft-based Android builds.
Initial test looks promising, and some of the annoying input handling glitches seem to have been fixed.
Sentry for Android
Another Android-related topic we looked into was uploading crash information to KDE’s Sentry instance. Our Linux and
Windows builds can do this since some time, and it has been a great help with identifying, prioritizing and fixing
crashes.
Initial experiments got this to work quickly on Android as well, but it will require more work to do this properly and give users full
control over whether they want to upload crash information or not. We explored a few options on how to do that and
have a plan now, but that yet has to be implemented.
KMime move to KDE Frameworks
The long-lasting move of KMime to KDE Frameworks will finally happen
early May, after the 26.04 KDE Gear release and in time for the 6.27 KDE Frameworks release.
Users of KMime will need a few minor build system adjustments for this. The CMake target name changes from KPim6::Mime to
KF6::Mime, and the version number changes from KDE PIM versioning KDE Frameworks versioning. You can either replace
this at once, or use the forward-compatibility approach suggested below.
The following CMake snippet replaces the previous find_package call for KPim6Mime and will handle both variants
from before and after the move.
find_package(KF6Mime 6.27 CONFIG)if(NOT TARGET KF6::Mime)find_package(KPim6Mime 6.7.0 CONFIG REQUIRED)add_library(KF6::Mime ALIAS KPim6::Mime)endif()
Target names in target_link_library calls can then be switched to the new KF6::Mime already. Once the transition
is complete, the above snippet can be simplified to a single find_package call for the new variant again, without
needing to touch anything else anymore.
As it was already known that Akademy would be in Graz this year, we could use the opportunity to inspect venues, test food options,
as well as to review and improve OSM (indoor) mapping of the conference location.
Itinerary
With a bunch of people traveling to the sprint, Itinerary also got a bit of attention
of course:
Performance of opening the “My Data” page the first time was improved, by optimizing computing some of the statistics
shown on that page.
A new way of sharing GraphQL query fragments should simplify maintaining support for the various OpenTripPlanner
flavors in KPublicTransport. For some of the backends, the information
available for rental bikes/scooters/cars became more detailed as a result of this.
At Grazer Linuxtage we had a KDE booth again, showing devices running Plasma,
Krita and Plasma Mobile,
handing out stickers as well as the famous amigurumi Konqis, collecting donations, and of course
with a bunch of KDE contributors around to talk to.
KDE's booth at Grazer Linuxtage (photo by Kieryn Darkwater)
There’s current positions of trams, busses, and regular cars, speed, acceleration vectors, status of all external lights, and which pedal gets pressed.
Traffic lights report their current state and change timings as well as provide a full machine-readable model of their signal groups and lane relations.
All of that in a standardized and (intentionally) unencrypted form.
Lots of potential in this, I wasn’t aware this went anywhere after things had gotten a bit quieter around the self-driving cars hype.
How you can help!
Bringing people together, for a small meeting or a big conference, is extremely useful and productive.
The necessary travel and logistics come with costs though, which is where your donations to organizations
like KDE e.V. or Grazer Linuxtage help!
Last week over 20 KDE contributors converged on the Austrian city of Graz for our annual mega-sprint. It was a busy week, offering a good opportunity for the kinds of face-to-face conversations that can unblock stuck work and reach new consensus. Expect reports to appear on Planet KDE over the next week or two.
We skipped an issue of TWiP due to the sprint but these past two weeks have indeed been busy! Some major features landed, along with a slew of impactful UI improvements. Let’s get right into it:
Notable new features
Plasma 6.7
Each screen can now switch between any of the system’s virtual desktops independently! (Hynek Schlindenbuch, KDE Bugzilla #107302)
You can now choose your default calendar app on System Settings’ Default Applications page. (Denys Madureira, plasma-workspace MR #6468)
…And you can now middle-click on the Digital Clock widget to open the calendar app you’ve configured there. (Denys Madureira, plasma-workspace MR #6462)
You can now configure the Alt+Tab window switcher to always appear on the primary screen, rather than whichever screen has keyboard focus or the pointer on it. (Yuki Tsujii, KDE Bugzilla #329696)
You can now mark app-specific actions that you find in a search as favorites. (Kai Uwe Broulik, plasma-workspace MR #6224)
The Kicker Application Menu widget now highlights newly-installed apps, just like the Kickoff Application Launcher widget does. (Christoph Wolk, plasma-desktop MR #3649)
You can now drag-and-drop apps to the “Favorites” sections of the Kickoff, Kicker, and Dashboard widgets. (Christoph Wolk, KDE Bugzilla #383302 and plasma-desktop MR #3652)
If you find yourself captivated by a picture of the day wallpaper image, you can now right-click on it and access external information about it. (Kai Uwe Broulik, kdeplasma-addons MR #1035)
You can now optionally set Discover to quit after installing updates. (Taras Oleksyn, KDE Bugzilla #508743)
Notable UI improvements
Plasma 6.6.5
While entering the password for a Wi-Fi network using the Networks widget, the password field no longer loses keyboard focus if you happen to move the pointer away from it. (Tobias Fella, plasma-nm MR #556)
The Input Method System Tray widget no longer disables the active input method if you click it while the input method isn’t currently visible. Now it just shows and hides it. (Aleix Pol Gonzalez, plasma-workspace MR #6485)
Improved the design of Discover’s grid and list items, which also slightly increases the information density of the pages that show them. (Nate Graham, discover MR #1292)
The Kicker Application Menu widget now shows tooltips for items whose labels have been elided. (Christoph Wolk, KDE Bugzilla #515608)
System Monitor now differentiates multiple GPUs by their names, rather than by arbitrary numbers. (Bernhard Friedreich, libksysguard MR #464 and ksystemstats MR #129)
System Monitor now exposes top-level actions you can use to launch it and go straight to a specific page. These can be invoked from the app’s context menu, or via a global shortcut you set yourself. (Bernhard Friedreich, plasma-systemmonitor MR #427)
The Margins Separator widget is now added from the panel configuration dialog’s “Add New” menu, rather than the widget explorer sidebar. This matches how the similar spacer widget is added. (Antti Savolainen, plasma-workspace MR #6494 and plasma-desktop MR #3663)
The clipboard popup invoked with Meta+V now closes if it’s open when you press that keyboard shortcut a second time. (Kristem McWilliam, plasma-workspace MR #6450)
Improved how System Settings’ Shortcuts page handles being told to assign a shortcut that’s already assigned to something else. (David Bacskay-Nagy, KDE Bugzilla #484526 and KDE Bugzilla #489544)
KRunner now lets you evaluate fancy mathematical expressions more flexibly; in the past you could ask for sqrt(2) + 2 but not 2 + sqrt(2); now both are accepted. (Alex Cizinsky, KDE Bugzilla #496343)
Frameworks 6.26
The dialog that asks you if you want to launch or edit an executable text file (like a .desktop file) no longer gives you the opportunity to tell it to always do that thing. This behavior was making .desktop files un-launchable for people who selected the option to always open those types of files in a text editor. Anyone who wants to use this feature can still configure it in Dolphin’s settings. (Nate Graham, kio MR #2171)
Removed the CFP franc from the list of common currencies, so it no longer shows up automatically for every currency conversion run using KRunner-powered searches. (Pellaeon Lin, kunitconversion MR #84)
Notable bug fixes
Plasma 6.6.4
Fixed a case where Plasma Keyboard could crash after Alt+Tabbing away from a window marked as “keep above others”. (Devin Lin, KDE Bugzilla #517087)
Worked around a bug added in Qt 6.11 that made some of Spectacle’s annotation tools unclickable. (Oliver Beard, KDE Bugzilla #515304)
Fixed a layout issue in the Activity Pager widget that made it look weird at specific non-default panel sizes. (Marco Martin, KDE Bugzilla #518451)
Plasma 6.6.5
Fixed a case where KWin could crash on logout when the session that’s closing had sent any emulated keyboard or mouse events. (Vlad Zahorodnii, kwin MR #9092)
Fixed an issue with the screen locker that could cause the buttons to malfunction and leave you unable to unlock after you pressed the Esc key in combination with various other actions with specific timings. (Akseli Lahtinen, KDE Bugzilla #515299)
Fixed an issue that made color picker functionality throughout the system return random colors on systems with certain graphics hardware. (Xaver Hugl, KDE Bugzilla #518770)
Fixed an issue that made the clock times shown on the lockscreen differ across the screens of a multi-screen setup. (DeepChirp, KDE Bugzilla #516479)
Fixed two issues that made network connections added from the Plasma setup wizard not always work properly. (Adam Williamson, KDE Bugzilla #514841 and plasma-setup MR #100)
Fixed a couple of cases where auto-hide panels might not hide properly when there were any unread notifications. (Patrick Cleary, KDE Bugzilla #519046)
Switching away from the Networks Widget in the System Tray no longer briefly makes a placeholder message appear. (Tobias Fella, KDE Bugzilla #511367)
Improved the reliability of the Weather Widget’s icon fallback behavior, making it less likely to show broken weather icons. (Ismael Asensio, kdeplasma-addons MR #1032)
Plasma 6.7
Fixed an issue that could make the Audio Volume widget not notice that a new audio device was connected and became the default one. (Oliver Beard, plasma-pa MR #393)
Using the clipboard’s non-default “Never save [non-text items] in history” option no longer breaks the ability to paste items that have been moved to the top of the clipboard history. (Christoph Wolk, KDE Bugzilla #514095)
Apps in the Quick Launch widget can once again be re-arranged. (Alex Folland, KDE Bugzilla #481922)
KWin now supports the Wayland session management protocol! This is an important step for apps to be able to remember their sizes and positions after restarting the system. The next step is for toolkits, libraries, and apps to implement support. We’re getting there! (Vlad Zahorodnii, KDE Bugzilla #436318)
Reduced the size of animated GIF images produced by apps like Spectacle that use KDE’s KPipeWire library. (Bernhard Friedrich, kpipewire MR #247)
How you can help
KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.
Would you like to help put together this weekly report? Introduce yourself in the Matrix room and join the team!
Beyond that, you can help KDE by directly getting involved in any other projects. Donating time is actually more impactful than donating money. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer, either; many other opportunities exist.
You can also help out by making a donation! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.
To get a new Plasma feature or a bug fix mentioned here
You cannot use the GNU (A)GPL to take software freedom away
Tags: tech, foss, licensing, law
The FSF is now weighting in on the Euro-Office vs OnlyOffice situation. You have to respect the spirit of the AGPL and can’t take away freedom with extra clauses. Seems to make sense to me.
Interesting piece, shows quite well how new technologies get in the home and then slowly expand. In the case of the Internet, it was indeed literally in a corner of the home before slowly being woven in our lives.
Tags: tech, ai, machine-learning, copilot, marketing, hype, research
Are we surprised it’s mostly a PR stunt? Not at all. Of course, I agree a lot with the conclusion: we can’t trust any claim from those companies. They try to present themselves as labs but mostly try to disguise marketing as research…
There’s a whole swat of solutions for very lean services. You can go a long way reducing complexity as much as possible. Less infrastructure bills are definitely welcome.
Supply chain nightmare: How Rust will be attacked and what we can do to mitigate the inevitable
Tags: tech, rust, supply-chain, security
Indeed, the current supply chain model of Rust could be better. While we wait for improvements (with no sign of them coming), there are ways to try to avoid some of the common pitfalls.
Can crates.io make things easier to secure? I do think so. But this post is right that we shouldn’t forget the social aspect of the whole supply chain security conversation.
Or why I tend to favor desktop applications (made by KDE as much as possible) rather than web applications whenever possible. It’s just more pleasant to have things which look and feel homogeneous.
A good primer about design documents. What’s nice about this one is the focus on the process rather than the form of the document. Indeed what matters is the shared understanding and making sure the right decision is made.
Short and to the point reminder: our job is never only about the tech. It always encompass some people related concerns, be it inside teams, between teams, or the impact on the users.
Even Ohno’s Classic “5 Whys” Example Deserves Another Why
Tags: agile, lean, failure
A bit long for what it’s saying. And yet it’s a good reminder, don’t focus on why… Ask the question as many times as necessary to get to the point where you can find a solution which prevents issues to reappear.
La Palma Tech Tagoror vuelve. Los meetups en la isla canaria de La Palma se relanzan este 23 de abril, en La Real Sociedad Aridane, Los Llanos de Aridane. La entrada es gratuita previo registro. Únete al evento o apúntate al grupo de Meetup para estar informado de futuras actividades.
This April, KDE once again had a sprint in Graz, Austria. This one was deemed a
"Mega Sprint" as unlike last year it was not just for Plasma, but for everything
KDE-related from Plasma, goals, frameworks, apps, and more. We had a great
turnout!
Amazingly I managed to go the whole trip this time without getting sick! 😊
We covered a lot of ground! Briefly, a few of the things off the top of my
head:
Improving reliability, ease of running locally, documentation, and ensuring that
test failures are reported by the CI in merge requests. We have some work to do
for all of these to improve our testing story, and we collectively came to
important decisions on how to move forwards.
There is a lot, often not enough hours/energy to deal with it, and a lot of the
time people just don't even know about the issue(s). Let's try: being more
proactive about closing bad/stale MRs, creating a GitLab bot to help automate
things that get people's attention, keep track of things by sending regular
notices to the mailing list(s) similar to how the "failing ci" emails help
people keep on top of things.
A complicated topic! We had a lot of good discussions about the user flow/UI/UX,
and I think we came to a really good place that sets us up for some excellent
custom gestures/bindings with the fantastic work by Jakob & Natalie.
This sort of work is a really great example of something that would have been
very difficult to do online, that we broke through with a lot of back and forth
conversation/explanation/design at the sprint — which is exactly why we get
together to unblock these things and make quick progress together!
We covered all of the large topics/issues that have been pending, for example:
morekeys/full keyboard emulation, emojis, speech-to-text, Wayland protocols,
testing, etc. So much that each could probably be its own blog post! We'll
continue to see a whole lot of changes and improvements here; we really want
plasma-keyboard to be a first-class experience for all sorts of input stories.
We were once again in lovely Graz, and the weather was a very welcome change
from the brutal winter we've had in Canada — still had ice and snow when I left
home! In addition to the mostly sunny weather and chirping birds, the city and
its people were just fantastic once again. 💙
I can't say enough just how lovely Graz is, and how glad I was to get to visit
again. 🇦🇹 Special shout out to Kevin Krammer, our KDE local who did so much to
make this sprint great for us!
The fact that Graz is a lovely place to go is good news, since this year we'll
be hosting Akademy there — I am already looking forward to coming back! :D
La Palma Tech Tagoror is back. After a year without events, the meetup series relaunches on April 23rd at Real Sociedad (Casino) Aridane, Los Llanos de Aridane, La Palma. Free entry, short talks, good conversations. Join us — or sign up to the Meetup group to stay informed.
Before arriving in Graz I already did some work on the train from Vienna. I published a new version of kio-gopher so KDE Frameworks 6 applications can browse gopher sites and helped finish the review of KDominate, Albert Vaca's latest tactical game.
At the Sprint itself many things were achieved, too many to remember.
There was some discussion about improving release notes so they go into the appstream files and end up in lots of interesting places (apps.kde.org, Discover, etc).
I also talked a bit with David Edmundson on how to streamline our work in the KDE Security team.
Another important thing was that we introduced a way to help us enable the LeakSanitizer in more repositories (by ignoring leaks that are not our fault and that we can't control)
Non-planned group photo of Sprint attendees, a few are missing. Apologies!
While we were at the Sprint it was announced that we will have Akademy 2026 also in Graz. So start preparing to visit Austria in late September!
Grazer Linuxtage was very nice, as far as I've heard also very successful in attendance, with the estimate being around 50% more than the previous year (hard to calculate when you don't require registration).
There were not many talks in English but the ones I attended were interesting. If you have time I would recommend giving them a quick skim to see if they interest you.
I gave a talk about KDE and the 30 years of the Linux desktop, that from the reaction of the attendees I think it was well received, that's always nice :)
I immediately wanted to apply this to KDE projects. So I took the commands from the post and made some shell aliases and functions for convenience:
# git repo analysis tools
alias what-changes="echo 'What changes a lot?' && git log --format=format: --name-only --since='1 year ago' | rg -v 'po$|json$|desktop$' | sort | uniq -c | sort -nr | head -20"
alias what-breaks="echo 'What breaks a lot?' && git log -i -E --grep='fix|bug|broke|bad|wrong|incorrect|problem' --name-only --format='' | sort | uniq -c | sort -nr | head -20"
alias emergencies="echo 'And what were the emergencies?' && git log --oneline --since='1 year ago' | grep -iE 'revert|hotfix|emergency|urgent|rollback'"
alias momentum="echo \"What's the project's momentum over the past 5 years?\" && git log --format='%ad' --date=format:'%Y-%m' | sort | uniq -c | tail -n 60"
alias maintainers-recently="echo \"Who's been driving this project in the past year?\" && git shortlog -sn --no-merges --since='1 year ago' | rg -v 'l10n daemon script' | head -n 30"
alias maintainers-alltime="echo 'And what about for all time?' && git shortlog -sn --no-merges | rg -v 'l10n daemon script' | head -n 30"
function repo-analysis {
what-changes
echo
what-breaks
echo
emergencies
echo
momentum
echo
maintainers-recently
echo
maintainers-alltime
}
Now let’s run it on Plasma. Here’s plasma-workspace, the core of Plasma:
Who’s been driving this project in the past year? 116 Vlad Zahorodnii 113 Nicolas Fella 87 Christoph Wolk 82 Fushan Wen 78 Nate Graham 66 Kai Uwe Broulik 48 Bohdan Onofriichuk 37 Harald Sitter 34 Tobias Fella 31 Marco Martin 30 David Edmundson 25 Akseli Lahtinen 21 Ismael Asensio 17 David Redondo 16 Niccolò Venerandi 15 Bhushan Shah 11 Alexander Lohnau 11 Kristen McWilliam 9 Oliver Beard 9 Shubham Arora 8 Alexey Rochev 8 Han Young 8 Philipp Kiemle 7 Albert Astals Cid 6 Aleix Pol 6 Méven Car 5 Devin Lin 5 Joshua Goins 4 Alexander Wilms 4 Arjen Hiemstra
And what about for all time? 1543 Fushan Wen 1497 Marco Martin 1374 Kai Uwe Broulik 1030 David Edmundson 772 Nate Graham 658 Alexander Lohnau 551 Aleix Pol 548 Nicolas Fella 438 ivan tkachenko 385 Eike Hein 264 Sebastian Kügler 250 Martin Gräßlin 238 Harald Sitter 232 Martin Klapetek 223 Jonathan Riddell 207 Vlad Zahorodnii 194 David Redondo 190 Friedrich W. H. Kossebau 189 Laurent Montel 144 Bhushan Shah 134 Christoph Wolk 134 Ismael Asensio 126 Lukáš Tinkl 121 Niccolò Venerandi 117 Méven Car 105 Natalie Clarius 91 Konrad Materka 80 Vishesh Handa 80 Volker Krause 79 Ivan Čukić
ShellCorona both changing and breaking a lot is no great surprise to me; it’s fiddly and complicated. We need to do something about that. The number of emergencies doesn’t look too bad, and momentum feels fine too. The project also appears to have a nice healthy diversity of contributors. Excellent!
It’s been quite illuminating to run these tools on KDE projects that I’m both more and less familiar with. Give it a try!