[systemd-devel] Question about propagation of INVOCATION_ID and JOURNAL_STREAM env variables in Desktop Environments
Andrei Borzenkov
arvidjaar at gmail.com
Thu May 23 18:04:14 UTC 2024
On 23.05.2024 09:18, Nop wrote:
> From my terminal emulator that I start by clicking in the menu:
> echo "kitty: $(pidof kitty) - $INVOCATION_ID" && echo "plasmashell:
> $(pidof plasmashell) - $(sudo strings /proc/$(pidof
> plasmashell)/environ | grep INVOCATION_ID)"
> kitty: 4441 - e3ec804609094a139948a1887c90ac7a
> plasmashell: 857 - INVOCATION_ID=e3ec804609094a139948a1887c90ac7a
>
> But indeed, looking at systemd-cgls, it is in its own scope:
> -.slice
> ├─user.slice
> │ └─user-1000.slice
> │ ├─user at 1000.service …
> │ │ ├─session.slice
> │ │ │ ├─plasma-plasmashell.service
> │ │ │ │ └─857 /usr/bin/plasmashell --no-respawn
> │ │ ├─app.slice
> │ │ │ ├─app-kitty-96877b039d10481298f59807a062a5c5.scope
> │ │ │ │ ├─4441 /usr/bin/kitty
> │ │ │ │ ├─4450 /bin/zsh
> │ │ │ │ ├─9810 systemd-cgls
> │ │ │ ├─app-steam-68615b37d4554dc8bcdce0bb903517bb.scope
> │ │ │ │ ├─2777 bash /home/ctxnop/.local/share/Steam/steam.sh
> │ │ │ └─app-chromium-185faea96ff5421b8ecfb0753298c32b.scope
> │ │ │ ├─2266 /usr/lib/chromium/chromium
> │ │ │ ├─2269 /usr/lib/chromium/chrome_crashpad_handler --monitor-self
>
> Did not know about this, thank you. But it feels even more weird now:
> for P in 857 4441 4450 2777 2269; do echo -n "$P: " && tr '\0' '\n' <
> /proc/$P/environ | grep INV; done
> 857: INVOCATION_ID=e3ec804609094a139948a1887c90ac7a
> 4441: INVOCATION_ID=e3ec804609094a139948a1887c90ac7a
> 4450: INVOCATION_ID=e3ec804609094a139948a1887c90ac7a
> 2777: INVOCATION_ID=e3ec804609094a139948a1887c90ac7a
> 2269: INVOCATION_ID=e3ec804609094a139948a1887c90ac7a
>
Looking here on GNOME I confirm the same behavior. Unless program
explicitly handles INVOCATION_ID (or, I assume, any other environment
variable set by systemd) they are inherited. I am "lucky" in that
gnome-terminal does not propagate it, so I can use INVOCATION_ID to
distinguish between being called from interactive shell and invoked as
service. But I was about to add some launcher icons and they would
certainly have the same issue as you described.
But everything started by gnome-shell inherits gnome-shell
INVOCATION_ID. Everything started by gnome-session-binary inherits
gnome-session-binary INVOCATION_ID. Etc ...
All that I am interested in is how I can distinguish between "it runs as
part of interactive user session" or "it runs as part of systemd
service". I do not see any way to do it.
It was so simple initially until someone got brilliant idea to misuse
systemd user instance for session management ...
More information about the systemd-devel
mailing list