fix(kasmvnc): ExecStartPre purge les instances Xvnc orphelines + ConditionUser=marc
- ExecStartPre tue toute Xvnc sur le display configure puis purge lock et socket avant de demarrer (une session precedente orpheline tenait :20 apres un switch : « A VNC server is already running », exit 29, crash-loop). Le display est passe en ARGUMENT dans la meme commande : en liste, systemd executerait chaque element comme une commande separee. - ConditionUser=marc : l'unite est installee dans /etc/systemd/user et hermes demarre aussi un user manager linger avec default.target actif ; sans ca il lançait une deuxieme instance sur :20 et son activation utilisateur echouait au switch (rc=4).
This commit is contained in:
@@ -605,6 +605,13 @@ in {
|
||||
# Systemd USER service (not system service!)
|
||||
systemd.user.services.kasmvnc = {
|
||||
description = "KasmVNC Server on display ${cfg.display}";
|
||||
# L'unite est installee dans /etc/systemd/user (visible par tous les
|
||||
# utilisateurs linger : hermes aussi demarre un user manager avec
|
||||
# default.target actif). ConditionUser la restreint au compte de
|
||||
# l'utilisateur configure : sans ca, hermes lançait une deuxieme
|
||||
# instance sur :20 (conflit, crash-loop, et echec de son activation
|
||||
# utilisateur au switch -> rc=4).
|
||||
unitConfig.ConditionUser = cfg.user;
|
||||
# KasmVNC est un serveur X autonome pour l'acces distant : il ne doit pas
|
||||
# dependre de la session graphique locale (Xwayland sur :1). En le voulant
|
||||
# par default.target il demarre aussi pour un utilisateur linger, sans
|
||||
@@ -619,6 +626,22 @@ in {
|
||||
path = [ pkgs.xauth pkgs.xkbcomp pkgs.xrandr pkgs.setxkbmap pkgs.procps pkgs.inetutils pkgs.which pkgs.util-linux ];
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
# Apres un switch, une ancienne instance (session precedente, processus
|
||||
# orphelin hors de la gestion courante de l'unite) peut tenir le display :
|
||||
# Xvnc repond alors « A VNC server is already running as :20 » et sort en
|
||||
# 29 -> crash-loop. Ce pre-hook purge toute instance sur ce display (elle
|
||||
# est par definition obsolete : on demarre la nouvelle) puis les restes
|
||||
# (lock, socket). Lance en tant que l'utilisateur de l'unite.
|
||||
ExecStartPre = [
|
||||
# display passe en ARGUMENT (concatené dans la meme commande) : en
|
||||
# liste, systemd traiterait chaque element comme une commande separee
|
||||
# (« Unable to locate executable '20' »).
|
||||
(pkgs.writeShellScript "kasmvnc-cleanup" ''
|
||||
d="''${1#:}"
|
||||
pkill -f "Xvnc :''${d}" 2>/dev/null || true
|
||||
rm -f "/tmp/.X''${d}-lock" "/tmp/.X11-unix/X''${d}"
|
||||
'' + " ${cfg.display}")
|
||||
];
|
||||
Environment =
|
||||
[
|
||||
"XDG_SESSION_TYPE=x11"
|
||||
|
||||
Reference in New Issue
Block a user