Package: systemd Version: 252.3-2 Severity: normal Hey.
What I do is about the following: I log on via SSH to some node, and a "special" remote command starts a VNC server as systemd --user service and upon certain signals it stops it, while on HUP it just exits. The idea is that in the HUP case one likely wants to keep the VNC server running, so that it can be later re-connected to. Now this works fine with e.g. SUSE's 246.16 systemd, but already fails with the systemd in bullseye. What seems to happen is that just a while after SSH's remote command has exited, systemd kills off the whole --user session. After googling a bit I found: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=825394 and already though that this would be what happens. But as far as I understand the default was actually reverted to not kill user processes, and that's also what loginctl show-seat shows. My SSH remote commands looks like this: Host VNC_example.org HostName example.org LocalForward localhost:51006 localhost:5903 StreamLocalBindUnlink yes ExitOnForwardFailure yes ControlPath none RequestTTY force RemoteCommand displaynumber=3; id="${LOGNAME}"; trap -- 'trap -- - EXIT INT TERM QUIT; exit 0' HUP; trap -- 'exit 0' INT TERM QUIT; trap -- "systemctl --quiet --user is-active \"tigervncserver@:\${displaynumber}_\${id}.service\"; [ \"\$?\" -ne 3 ] && systemctl --user stop \"tigervncserver@:\${displaynumber}_\${id}.service\"; exit 0" EXIT; systemctl --quiet --user is-active "tigervncserver@:${displaynumber}_${id}.service" && printf '%%sVNC server (`%%s`) already running and re-used.%%s\n' "$(tput setaf 6 2>/dev/null)" "tigervncserver@:${displaynumber}.service" "$(tput sgr0 2>/dev/null)" >&2 || { systemd-run --quiet --user --no-ask-password --unit="tigervncserver@:${displaynumber}_${id}.service" --collect --service-type=exec --working-directory="${HOME}" tigervncserver ":${displaynumber}" -fg && printf '%%sVNC server (`%%s`) started.%%s\n' "$(tput setaf 2 2>/dev/null)" "tigervncserver@:${displaynumber}.service" "$(tput sgr0 2>/dev/null)" >&2; }; while true; do sleep 6; systemctl --quiet --user is-active "tigervncserver@:${displaynumber}_${id}.service" || exit 0; done A bit easier to read: displaynumber='<n>'; vncserver_extra_options=""; unit_name_suffix="%C"; trap -- 'trap -- - EXIT INT TERM QUIT; exit 0' HUP; trap -- 'exit 0' INT TERM QUIT; trap -- "systemctl --quiet --user is-active \"tigervncserver@:\${displaynumber}_\${unit_name_suffix}.service\"; [ \"\$?\" -ne 3 ] && systemctl --user stop \"tigervncserver@:\${displaynumber}_\${unit_name_suffix}.service\"; exit 0" EXIT; systemctl --quiet --user is-active "tigervncserver@:${displaynumber}_${unit_name_suffix}.service" && printf '%%sVNC server (`%%s`) already running and re-used.%%s\n' "$(tput setaf 6 2>/dev/null)" "tigervncserver@:${displaynumber}.service" "$(tput sgr0 2>/dev/null)" >&2 || { systemd-run --quiet --user --no-ask-password --unit="tigervncserver@:${displaynumber}_${unit_name_suffix}.service" --collect --service-type=exec --working-directory="${HOME}" tigervncserver ":${displaynumber}" -fg ${vncserver_extra_options} && printf '%%sVNC server (`%%s`) started.%%s\n' "$(tput setaf 2 2>/dev/null)" "tigervncserver@:${displaynumber}.service" "$(tput sgr0 2>/dev/null)" >&2; }; while true; do sleep 60; systemctl --quiet --user is-active "tigervncserver@:${displaynumber}_${unit_name_suffix}.service" || exit 0; done journal log after the SSH disconnect (which I do via <newline>~. for a HUP): Dec 22 03:01:33 example.org sshd[3409]: Received disconnect from 2003:... port 55458:11: disconnected by user Dec 22 03:01:33 example.org sshd[3409]: Disconnected from user user 2003:... port 55458 Dec 22 03:01:33 example.org sshd[3386]: pam_unix(sshd:session): session closed for user user Dec 22 03:01:33 example.org systemd-logind[579]: Session 5 logged out. Waiting for processes to exit. Dec 22 03:01:36 example.org systemd[1]: session-5.scope: Deactivated successfully. Dec 22 03:01:36 example.org systemd-logind[579]: Removed session 5. Dec 22 03:01:46 example.org systemd[1]: Stopping User Manager for UID 1000... Dec 22 03:01:46 example.org systemd[3389]: Activating special unit Exit the Session... Dec 22 03:01:46 example.org systemd[3389]: Stopped target Main User Target. Dec 22 03:01:46 example.org systemd[3389]: Stopping D-Bus User Message Bus... Dec 22 03:01:46 example.org systemd[3389]: Stopping /usr/bin/tigervncserver :3 -fg... Dec 22 03:01:46 example.org systemd[3389]: Stopped D-Bus User Message Bus. Dec 22 03:01:46 example.org systemd[3389]: Removed slice User Core Session Slice. Dec 22 03:01:46 example.org tigervncserver[3413]: Killing Xtigervnc process ID 3428... success! Dec 22 03:01:46 example.org systemd[3389]: Stopped /usr/bin/tigervncserver :3 -fg. Dec 22 03:01:46 example.org systemd[3389]: tigervncserver@:3_user.service: Consumed 1.418s CPU time. Dec 22 03:01:46 example.org systemd[3389]: Removed slice Slice /app/tigervncserver. Dec 22 03:01:46 example.org systemd[3389]: app-tigervncserver.slice: Consumed 1.418s CPU time. Dec 22 03:01:46 example.org systemd[3389]: Stopped target Basic System. Dec 22 03:01:46 example.org systemd[3389]: Stopped target Paths. Dec 22 03:01:46 example.org systemd[3389]: Stopped target Sockets. Dec 22 03:01:46 example.org systemd[3389]: Stopped target Timers. Dec 22 03:01:46 example.org systemd[3389]: Closed D-Bus User Message Bus Socket. Dec 22 03:01:46 example.org systemd[3389]: Closed GnuPG network certificate management daemon. Dec 22 03:01:46 example.org systemd[3389]: Closed GnuPG cryptographic agent and passphrase cache (access for web browsers). Dec 22 03:01:46 example.org systemd[3389]: Closed GnuPG cryptographic agent and passphrase cache (restricted). Dec 22 03:01:46 example.org systemd[3389]: Closed GnuPG cryptographic agent (ssh-agent emulation). Dec 22 03:01:46 example.org systemd[3389]: Closed GnuPG cryptographic agent and passphrase cache. Dec 22 03:01:46 example.org systemd[3389]: Removed slice User Application Slice. Dec 22 03:01:46 example.org systemd[3389]: app.slice: Consumed 1.425s CPU time. Dec 22 03:01:46 example.org systemd[3389]: Reached target Shutdown. Dec 22 03:01:46 example.org systemd[3389]: Finished Exit the Session. Dec 22 03:01:46 example.org systemd[3389]: Reached target Exit the Session. Dec 22 03:01:46 example.org systemd[1]: user@1000.service: Deactivated successfully. Dec 22 03:01:46 example.org systemd[1]: Stopped User Manager for UID 1000. Dec 22 03:01:46 example.org systemd[1]: user@1000.service: Consumed 1.737s CPU time. Dec 22 03:01:46 example.org systemd[1]: Stopping User Runtime Directory /run/user/1000... Dec 22 03:01:46 example.org systemd[1]: run-user-1000.mount: Deactivated successfully. Dec 22 03:01:46 example.org systemd[1]: user-runtime-dir@1000.service: Deactivated successfully. Dec 22 03:01:46 example.org systemd[1]: Stopped User Runtime Directory /run/user/1000. Dec 22 03:01:46 example.org systemd[1]: Removed slice User Slice of UID 1000. Dec 22 03:01:46 example.org systemd[1]: user-1000.slice: Consumed 1.859s CPU time. I've checked the signals received by the sshd processes and the shell executing the command. Looks all good. Also the VNC server process gets the TERM sig clearly by systemd. Any idea why this doesn't work as expected (by me)? Thanks, Philippe