#1 Le 30/07/2021, à 08:55
- jepide
utilisation de systemctl [résolu]
Bonjour,
Je suis sur Ubuntu 20.04.2 LTS - 64 bits
J'ai un programme myclod qui marche très bien dans les applications au démarrage,
mais que je voudrais lancer (toujours au démarrage de session) avec systemctl pour en faire un service.
Sans succès pour le moment.
mon fichier /etc/systemd/system/myclod.service (root:me 664) est le suivant:
[Unit]
Description=myclod
After=network-online.target
[Service]
Type=simple
User=me
# le probleme est identique avec ou sans User
ExecStart=/home/***/bin/myclod
# Cette commande marche très bien exécutée dans un terminal
# propriétés myclod: appimage - root:me 775
# Restart=on-failure (plus tard après mise au point)
[Install]
WantedBy=multi-user.target Je fais
me@OptiPlex:~$ systemctl daemon-reload
me@OptiPlex:~$ systemctl enable myclod.service
me@OptiPlex:~$ systemctl start myclod.servicemais avec la commande me@OptiPlex:~$ systemctl status myclod.service j'obtiens:
● myclod.service - myclod
Loaded: loaded (/etc/systemd/system/myclod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2021-07-29 15:13:35 CEST; 10s ago
Process: 6883 ExecStart=/home/***/bin/myclod (code=exited, status=1/FAILURE)
Main PID: 6883 (code=exited, status=1/FAILURE)
juil. 29 15:13:34 OptiPlex systemd[1]: Started myclod.
juil. 29 15:13:35 OptiPlex myclod[6883]: cannot open display:
# bizarre car le programme n'ouvre normalement pas de fenêtre, juste une icône en haut à droite
juil. 29 15:13:35 OptiPlex systemd[1]: myclod.service: Main process exited, code=exited, status=1/FAILURE
juil. 29 15:13:35 OptiPlex systemd[1]: myclod.service: Failed with result 'exit-code'.Je ne comprends pas ce qui cloche.
Avez vous une idée pour m'aider ?
Merci d'avance
Voir la SOLUTION en FIN de DISCUSSION
Dernière modification par jepide (Le 04/08/2021, à 10:02)
Hors ligne
#3 Le 30/07/2021, à 09:59
- Watael

Re : utilisation de systemctl [résolu]
salut,
si c'est myClod qui place l'icone, et pas le gestionnaire de fenêtre qui détecte le service, ça peut poser problème, car myClod ne peut pas atteindre l'affichage.
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 30/07/2021, à 11:11
- jepide
Re : utilisation de systemctl [résolu]
Bonjour Watael
Merci pour l'explication possible. Comme le programme fonctionne bien lancé dans un terminal ou via programmes au démarrage, je suppose que systemctl, lui, le lance trop tôt et qu'il faut attendre que d'autres services aient été lancés, mais lesquels? Au hasard gdm.service ?
Hors ligne
#5 Le 30/07/2021, à 11:47
- Watael

Re : utilisation de systemctl [résolu]
c'est un peu comme avec cron, qui s'exécute en tâche de fond;
pour exécuter un programme en mode graphique, il faut indiquer le $DISPLAY (ce qui est toujours un peu hasardeux) en variable d'environnement sur la ligne de commande du programme.
par exemple, pour cron :
* * * * * DISPLAY=0 maCommande avec ses argumentsDernière modification par Watael (Le 30/07/2021, à 11:48)
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 30/07/2021, à 12:59
- cqfd93

Re : utilisation de systemctl [résolu]
Modération
Il t'est demandé de corriger ton message 1 pour mettre entre balises code le contenu du fichier et le contenu du terminal, commandes et retours.
− cqfd93 −
Hors ligne
#7 Le 30/07/2021, à 13:30
- lynn

Re : utilisation de systemctl [résolu]
Bonjour,
il faut indiquer le $DISPLAY (ce qui est toujours un peu hasardeux) en variable d'environnement
J'utilise cette commande pour déterminer quel est le display en cours quand cron lance sa tache :
* * * * * for i in /tmp/.X11-unix/X*; do i=${i#${i%?}}; export DISPLAY=":$i"; done; ma commandeAprès, il y a peut-être plus simple..!?
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#8 Le 30/07/2021, à 13:39
- Watael

Re : utilisation de systemctl [résolu]
hmmm, et si tu as plusieurs utilisateurs connectés ?
il faut identifier le propriétaire du fichier.
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 30/07/2021, à 14:43
- maxire
Re : utilisation de systemctl [résolu]
Salut,
C'est un service utilisateur dont tu as besoin, déplace ton fichier myclod.service dans /etc/systemd/user et cela devrait le faire.
EDiIT :
Avant le déplacement faire :
systemctl disable myclod.serviceDernière modification par maxire (Le 30/07/2021, à 14:48)
Maxire
Archlinux/Mate + Ubuntu 18.04 + Lubuntu 18.04 + Archlinux/Gnome + Windows 10 Familial sur portable -- Archlinux/Mate sur poste de travail
Hors ligne
#10 Le 30/07/2021, à 15:10
- jepide
Re : utilisation de systemctl [résolu]
OK L'idée semblait bonne, mais en déplaçant myclod.service dans ..systemd/user, systemctl ne le trouve plus: Failed to enable unit: Unit file myclod.service does not exist.
Hors ligne
#11 Le 30/07/2021, à 15:18
- maxire
Re : utilisation de systemctl [résolu]
systemctl --user enable ...Je te conseille de lire la documentation disponible concernant systemctl, cela aide beaucoup.
Maxire
Archlinux/Mate + Ubuntu 18.04 + Lubuntu 18.04 + Archlinux/Gnome + Windows 10 Familial sur portable -- Archlinux/Mate sur poste de travail
Hors ligne
#12 Le 30/07/2021, à 15:36
- jepide
Re : utilisation de systemctl [résolu]
OK j'ai oublié de modifier la commande - Je recommence
Hors ligne
#13 Le 30/07/2021, à 15:57
- jepide
Re : utilisation de systemctl [résolu]
resultat sensiblement différent après déplacement dans systemd/user
● myclod.service - myclod
Loaded: loaded (/etc/xdg/systemd/user/myclod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2021-07-30 16:45:13 CEST; 29s ago
Process: 5702 ExecStart=/home/jpd/bin/myclod (code=exited, status=216/GROUP)
Main PID: 5702 (code=exited, status=216/GROUP)
juil. 30 16:45:13 OptiPlex systemd[828]: Started myclod.
juil. 30 16:45:13 OptiPlex systemd[5702]: myclod.service: Failed to determine supplementary groups: Operation not permitted
juil. 30 16:45:13 OptiPlex systemd[5702]: myclod.service: Failed at step GROUP spawning /home/jpd/bin/myclod: Operation not permitted
juil. 30 16:45:13 OptiPlex systemd[828]: myclod.service: Main process exited, code=exited, status=216/GROUP
juil. 30 16:45:13 OptiPlex systemd[828]: myclod.service: Failed with result 'exit-code'.Qu'en pensez vous ? problème de propriété ?
Hors ligne
#14 Le 30/07/2021, à 16:09
- ylag
Re : utilisation de systemctl [résolu]
Bonjour,
Sous toute réserve, il faudrait peut-être retirer la ligne :
User=me...de ton fichier /etc/systemd/system/myclod.service ?
[SOLVED] systemd: Failed to determine supplementary groups
A+
Hors ligne
#15 Le 30/07/2021, à 16:42
- Watael

Re : utilisation de systemctl [résolu]
y a-t-il un gain à passer par systemctl, qui démarrera le service même quand l'utilisateur se connectera en mode console (alors qu'il requiert un Gestionnaire de Fenêtre), plutôt que d'inscrire le programme au démarrage du Gestionnaire de Fenêtre, dont on est sûr qu'il est démarré ( !
) ?
Dernière modification par Watael (Le 30/07/2021, à 16:43)
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 30/07/2021, à 18:08
- jepide
Re : utilisation de systemctl [résolu]
merci ylag. myclod.service étant sous systemd/user je peux maintenant démarrer le programme avec systemctl start. Mais il ne démarre pas automatiquement au stratup. Je vais donc remettre à nouveau myclod.service dans systemd/system.
Watael je suis loin d'être un expert de unbuntu . Il faut que je me renseigne pour savoir quel service lance le gestionnaire de fenêtres et n'appeler Myclod qu'après.
Hors ligne
#17 Le 30/07/2021, à 18:28
- Watael

Re : utilisation de systemctl [résolu]
J'ai un programme myclod qui marche très bien dans les applications au démarrage
àmha, il n'y a pas de gain à passer par systemd.
qu'espères-tu ?
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 31/07/2021, à 08:21
- jepide
Re : utilisation de systemctl [résolu]
J'ai aussi essayé d'ajouter
Environment=DISPLAY=:0 mais sans succès
cannot open display: :0y a-t-il un gain à passer par systemctl, qui démarrera le service même quand l'utilisateur se connectera en mode console (alors qu'il requiert un Gestionnaire de Fenêtre), plutôt que d'inscrire le programme au démarrage du Gestionnaire de Fenêtre, dont on est sûr qu'il est démarré ( ! smile ) ?
OK j'abandonne le démarrage par systemctl pour ce programme précis.
Mais, débutant, pouvez vous m'éclairer sur " inscrire le programme au démarrage du Gestionnaire de Fenêtre " ?
Hors ligne
#19 Le 31/07/2021, à 10:25
- Watael

Re : utilisation de systemctl [résolu]
ça devrait être sous quelque chose comme « Menu -> Système/Paramètres -> Programmes au démarrage »
ça dépend du WM...
Welcome to sHell. · eval is evil.
Hors ligne
#20 Le 01/08/2021, à 15:54
- jepide
Re : utilisation de systemctl [résolu]
Finalement j'insiste un peu.
C'est un service utilisateur dont tu as besoin, déplace ton fichier myclod.service dans /etc/systemd/user
Après ce déplacement je peux lancer l'application dans un terminal via systemctl --user. Mais elle ne se lance pas automatiquement au démarrage.
En mettant la commande
systemctl --user start myclod.service dans les applications au démarrage ça marche, je peux utiliser les commandes systemctl pour contrôler le fonctionnement. Mais c'est inélégant et anormal à mon sens, même si je m'en contente pour l'instant.
selon https://wiki.archlinux.org/title/systemd/User
As per default configuration in /etc/pam.d/system-login, the pam_systemd module automatically launches a systemd --user instance when the user logs
. Je n'ai pas de system-login dans pam.d ce qui sous entend que systemd --user n'est pas lancé automatiquement.
Vu https://github.com/systemd/systemd/issues/2690
j'ai peur que la solution soit compliquée pour moi. A moins d'une idée géniale ?
Dernière modification par jepide (Le 01/08/2021, à 15:57)
Hors ligne
#21 Le 01/08/2021, à 16:33
- ylag
Re : utilisation de systemctl [résolu]
Bonjour,
Tu pourrais essayer de modifier la section [Install] de ton fichier /etc/systemd/system/myclod.service de :
WantedBy=multi-user.target...à :
WantedBy=default.targetFacile de rétablir la valeur originale si ça ne fonctionne pas...
A+
Dernière modification par ylag (Le 01/08/2021, à 16:49)
Hors ligne
#22 Le 02/08/2021, à 06:34
- jepide
Re : utilisation de systemctl [résolu]
Bonjour,
Tu pourrais essayer de modifier la section [Install] de ton fichier /etc/systemd/system/myclod.service de :
merci pour m'avoir suggéré cette idée. Mais ça ne change rien, aucune trace de myclod ni dans dmesg ni dans syslog, ni après la commande
systemctl --userqui pourtant me met une tartine d'infos.
Dernière modification par jepide (Le 02/08/2021, à 06:35)
Hors ligne
#23 Le 02/08/2021, à 10:39
- Watael

Re : utilisation de systemctl [résolu]
En mettant la commande
systemctl --user start myclod.servicedans les applications au démarrage ça marche[...]
Mais c'est inélégant et anormal à mon sens, [...]
tout à fait. C'est redondant : ça fait un "démarreur" dans un "démarreur".
Finalement j'insiste un peu.
tu ne devrais pas.
Dernière modification par Watael (Le 02/08/2021, à 10:40)
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 02/08/2021, à 10:51
- ylag
Re : utilisation de systemctl [résolu]
Bonjour,
Vu au commentaire #13 :
juil. 30 16:45:13 OptiPlex systemd[5702]: myclod.service: Failed at step GROUP spawning /home/jpd/bin/myclod: Operation not permittedPeut-être des problèmes de droits dans ton /home ?
La commande suivante devrait retourner la valeur zéro si tout est correct à ce niveau :
find $HOME ! -user $USER | wc -l...sinon, pour voir quels seraient les fichiers incriminés :
find $HOME ! -user $USER -exec ls -l {} \;A+
Hors ligne
#25 Le 02/08/2021, à 12:42
- jepide
Re : utilisation de systemctl [résolu]
Après un bon moment la commande
find $HOME ! -user $USER | wc -l retourne zero
pour info
-avec une sauvegarde j'ai remis le system OK comme il était avant ces tentatives
- puis j'ai réecris/copié myclod.service par la commande
systemctl --user edit myclod.service --full --force avec le même contenu. Myclod est maintenant dans ~/.config/systemd/user, avec un répertoire multi-user.target.wants ce qui est normal.
Mais ça n'a rien changé.
j'ai modifié la ligne
After=network-online.target display-manager.servicepour le cas ou il yaurait un problème avec le display.
Toujours sans résultat, ce qui se comprend si systemctl --user ne démarre pas. Je pense faire un essai en revenant à systemd/system.
Hors ligne
