Summary: | Opening an app from konsole has no activation environment set | ||
---|---|---|---|
Product: | [Plasma] kwin | Reporter: | Nate Graham <nate> |
Component: | wayland-generic | Assignee: | KWin default assignee <kwin-bugs-null> |
Status: | CONFIRMED --- | ||
Severity: | normal | CC: | 4wy78uwh, christoph, edoubrayrie, gerrit.huebbers, jan.rathmann, justin.zobel, kde, kurobac, nicolas.fella, oded, pavel23dob, postix, QuarticCat, shafff |
Priority: | NOR | Keywords: | wayland-only |
Version First Reported In: | git master | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Linux | ||
See Also: | https://bugs.kde.org/show_bug.cgi?id=407288 | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Bug Depends on: | |||
Bug Blocks: | 460318 |
Description
Nate Graham
2021-09-10 15:50:57 UTC
This is kate at fault. It's not just Kate, happens happen for any app though. We have a few options here, all with different downsides. We could *somehow* have konsole put an XDG_ACTIVATION token into the current bash whenever konsole gets focus. I don't know if this is feasible, we're already forked from konsole at this point. We could have it so calling request_activate with an invalid token still activates the window when "Focus stealing prevention" is set to None/Low. Fastest and laziest solution that works well shortterm, but will definitely come back to haunt us when inevitability no-one fixes anything. We could have kstart5 or equivalent import the window activation protocol, then it can create a token. It means people using an alias, but that's probably fine. We could do something konsole specific https://invent.kde.org/utilities/konsole/-/commit/29440f0c2453552a050815b80a3fac3129fdf254 and requires all people to either use an alias or work it into a kstart5 equivalent. > We could have it so calling request_activate with an invalid token still activates the
> window when "Focus stealing prevention" is set to None/Low.
Definitely get what you mean about fastest and laziest solution that will come back to haunt us, but I feel like it's the only general purpose way to do this short of re-engineering the entirely world around us. If we don't do this, we will still be tracking down bugs forever--just different ones, in each individual app--but the user experience will suffer in the meantime.
Asking people to use an alias or kstart is probably not going to work as it requires that people 1) know this 2) remember to do it and 3) type more characters/do more work. In practice they won't.
As-is using kstart5 doesn't help. kstart5 is a windowless application, so it doesn't have a focussed surface that we can transfer focus from *** Bug 473237 has been marked as a duplicate of this bug. *** why double clicking a text file in dolphin raises already running Kate instance correctly? Why can't Konsole do the same? Because of the issue tracked by this bug report. (In reply to Nick Shaforostoff from comment #7) > why double clicking a text file in dolphin raises already running Kate > instance correctly? Why can't Konsole do the same? Because Dolphin knows that a file/window is being opened so it can request an activation token from the compositor. Konsole doesn't know that running "kate bla.txt" opens a file but "ls bla.txt" doesn't. Konsole only hosts bash or whatever shell you are using, it doesn't know what's happening inside that Is there a workaround? This is very important part of my workflow Ok, so at least I have got it working locally git clone https://invent.kde.org/utilities/konsole.git --branch release/22.12 cd konsole git cherry-pick 29440f0c2453552a050815b80a3fac3129fdf254 mkdir build cd build cmake .. sudo mv bin/konsole /usr/bin/konsole vim /usr/local/bin/open to add: XDG_ACTIVATION_TOKEN=`qdbus $KONSOLE_DBUS_SERVICE $KONSOLE_DBUS_WINDOW org.kde.konsole.Window.activationToken` kate $@ chmod a+x /usr/local/bin/open and BTW a related BUG: 442721 after apt dist-upgrade which updated kde to 23.08.1 the mentioned workaround no longer works :( Would that work: * Konsole exports an env var that contains a dbus interface * e.g. Kate checks on start if that env var is set and contacts konsole over that interface to get a activation token * Konsole generates the token (it has the current active window) and sends it * Kate uses it to activate the window I have now: https://invent.kde.org/utilities/kate/-/merge_requests/1841 & https://invent.kde.org/utilities/konsole/-/merge_requests/1119 Together they bring Kate back to the X11 experience. Naturally a generic interface would be even nicer, but I think that is a minimal invasive workaround. FYI at some point I know someone (David R) tried #11 with the zsh "preexec" hook, which runs before doing any command. It's a manual user step, and it's a waste when you're doing "ls" or whatever, but I think it worked. Yeah, but that is an even worse hack and needs manual work for each user and shell variant. At least for Kate I prefer my hack, even for the other the Konsole patch is needed. I would assume that patch is not that controversial? Updated https://invent.kde.org/utilities/kate/-/merge_requests/1841 & https://invent.kde.org/utilities/konsole/-/merge_requests/1119 The kate.git patch should now work for KWrite and Kate and the Konsole patch should be more save with the single shot connect and we always do send a dbus response, in worst case with to token. Git commit 0ae9ad22ce34d4e368e2c1dcad8cccb729ecab44 by Christoph Cullmann. Committed on 13/08/2025 at 09:28. Pushed by cullmann into branch 'master'. ask Konsole for activation token this will allow us to pass a valid token to a already existing instance if invoked from Konsole M +2 -2 apps/kate/main.cpp M +1 -1 apps/kwrite/main.cpp M +32 -1 apps/lib/kateapp.cpp M +7 -6 apps/lib/kateapp.h https://invent.kde.org/utilities/kate/-/commit/0ae9ad22ce34d4e368e2c1dcad8cccb729ecab44 Git commit fc6532e97e4227feafdace88c9120a66a16cfff0 by Christoph Cullmann. Committed on 13/08/2025 at 11:10. Pushed by cullmann into branch 'master'. add a DBus slot to get an XDG activation token Will check if the passed shellSessionId is the current one for safety. Will try to generate a token and pass it back. Allows e.g. Kate to properly activate existing instance windows M +52 -0 src/session/Session.cpp M +18 -0 src/session/Session.h https://invent.kde.org/utilities/konsole/-/commit/fc6532e97e4227feafdace88c9120a66a16cfff0 At least for Kate with Konsole that is now fixed, but that is no generic solution. Perhaps one can standardize such a DBus interface for terminal emulators or there are even better solutions. If something better comes up, I will help to add it to Kate and Konsole, until then, a good old hack is IMHO better than an infinite regression. |