Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.service

mais 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

#2 Le 30/07/2021, à 09:41

cqfd93

Re : utilisation de systemctl [résolu]

Modération

Bonjour,

Pour ajouter toi-même les balises code à ton message #1 :

  • Cliquer sur le lien « Modifier » en bas à droite du message

  • Sélectionner le texte

  • Cliquer sur le <> de l'éditeur de message
    1471986854.png


cqfd93

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 arguments

Derniè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,

Watael a écrit :

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 commande

Aprè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.service

Derniè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é ( ! smile ) ?

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]

jepide a écrit :

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: :0
Watael a écrit :

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é ( ! 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.

maxire a écrit :

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.target

Facile 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,

ylag a écrit :

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 --user

qui 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.service

dans 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 permitted

Peut-ê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.service

pour 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