Page 1 sur 1
[variety, nitrogen] comment changer mon script en service systemd ?(résolu)
Publié : ven. 11 déc. 2015, 16:51
par Freedomsha
Bonjour chers spécialistes,
depuis un moment que mon script de démarrage $home/.config/openbox/autostart fonctionne,
je souhaite remplacer la ligne
qui me permet d'afficher avec nitrogen une image téléchargé avec variety toutes les 15 minutes
par un service systemd.
Voici le script actuel que je compte mettre en route:
Code : Tout sélectionner
[Unit]
Description=Daemon mettre à jour Nitrogen afin d'afficher les images de Variety
After=graphical.target
[Service]
Type=oneshot
ExecStart=/usr/bin/nitrogen --restore
RestartSec=15min
[Install]
WantedBy=graphical.target
j'aimerais savoir si c'est ok, ou comment améliorer mon script !
Merci pour vos réponses constuctives !
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : ven. 11 déc. 2015, 16:57
par benjarobin
Bonjour,
Si tu parles d'un service système, cela ne peut pas fonctionner, car ce n'est pas fait pour cela : Ne pas mélanger les processus lancés depuis un environnement graphique depuis un compte utilisateur et un processus système.
Si tu parle d'un service utilisateur, je dirais pourquoi pas, mais ce que tu as fait ne fonctionnera pas, tu dois te baser sur un timer et aussi lire la doc de systemd.
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : ven. 11 déc. 2015, 17:13
par Freedomsha
justement, il s'agit bien d'un service utilisateur.
j'ai utilisé le man de systemd.service pour le rédiger.
faut-il que je spécifie plus précisement la fait de le relancer avec un Restart=always
Code : Tout sélectionner
[Unit]
Description=Daemon mettre à jour Nitrogen afin d'afficher les images de Variety
After=graphical.target
[Service]
Type=oneshot
ExecStart=/usr/bin/nitrogen --restore
Restart=always
RestartSec=15min
[Install]
WantedBy=graphical.target
je compte le mettre dans /etc/systemd/user !
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : ven. 11 déc. 2015, 17:25
par benjarobin
Cela fonctionnera déjà mieux ainsi, bien que dans l'idée normalement on est censé utiliser un timer, mais cela devrait fonctionner de la même façon en théorie (jamais testé ainsi).
De plus il est nécessaire que /etc/X11/xinit/xinitrc.d/50-systemd-user.sh
soit lancé lors du démarrage de ta session, sinon ton service utilisateur n'aura pas accès à Xorg
En fonction de comment tu lances ta session, il est possible que ceci ne soit pas exécuté.
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : ven. 11 déc. 2015, 18:43
par Freedomsha
!!! !!!
En quoi il est nécessaire puisque ma session est démarré via la méthode de log sur tty1:
/$home/.bashrc :
Code : Tout sélectionner
# Démarre startx après s'être loggué.
[[ $(tty) = "/dev/tty1" ]] && exec startx
Si je comprend la page
https://wiki.archlinux.org/index.php/Systemd/User, ce .sh semble être utile pour introduire des variables d'environnement dans systemd !
je viens de créer le lien:
Code : Tout sélectionner
sudo ln -s /$home/Commandes/Systemd/Nitrogen.service /etc/systemd/user/Nitrogen.service
malheureusement, je n'arrive pas à le lancer avec:
Code : Tout sélectionner
# sudo systemctl start /etc/systemd/user/Nitrogen.service
Failed to start etc-systemd-user-Nitrogen.service.mount: Unit etc-systemd-user-Nitrogen.service.mount failed to load: No such file or directory.
et
Code : Tout sélectionner
sudo systemctl start Nitrogen.service
Failed to start Nitrogen.service: Unit Nitrogen.service failed to load: No such file or directory.
??? Faut-il plutot le copier dans /lib/systemd/user/ ?
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : ven. 11 déc. 2015, 20:31
par papajoke
Bonjour,
c'est que systemctl recherche/utilise par défaut que les unités système, il faut utiliser obligatoirement l'option
--user
avec tes commandes systemctl
utiliser des majuscules dans le nom ? drôle d'idée
/$home/Commandes/Systemd/ ? re drôle d'idée, alors qu'il existe un dossier défini par systemd : $HOME/.config/systemd/user/ si tu désires le placer dans ton home (bizarre même pas dans
systemd-path

)
ps: +1 pour le
timer c'est fait pour cela, mais la aussi tu désires sortir des chemins battus...
-------------------
avec variety il doit être possible de se passer de timer et systemd, voir le bash :
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : sam. 12 déc. 2015, 00:03
par benjarobin
/etc/X11/xinit/xinitrc.d/50-systemd-user.sh est forcément chez toi, sauf si tu n'as pas systemd sur ton PC, wait...
Et si tu as bien besoin du positionnement de ces variables d'environnement, comment veux tu que nitrogen fonctionne sans ces variables d'environnement ?
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : sam. 12 déc. 2015, 01:18
par Freedomsha
1000 excuses, benjarobin, pour ma réponse hâtive ! J'ai bien /etc/X11/xinit/xinitrc.d/50-systemd-user.sh. j'avais confondu le dossier avec /etc/X11/xorg.conf.d.
bizarre quand même que je n'avait pas de dossier /$home/.config/systemd/user/ ! Je l'ai créé et ajouté mon fichier
Code : Tout sélectionner
[Unit]
Description=Daemon mettre à jour Nitrogen afin d'afficher les images de Variety
After=graphical.target
[Service]
Type=oneshot
ExecStart=/usr/bin/nitrogen --restore
[Install]
WantedBy=graphical.target
le lancement me donne des erreurs:
Code : Tout sélectionner
systemctl --user start nitrogen.service
Job for nitrogen.service failed because the control process exited with error code. See "systemctl status nitrogen.service" and "journalctl -xe" for details.
Code : Tout sélectionner
systemctl status nitrogen.service
● nitrogen.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Code : Tout sélectionner
journalctl -xe
-- L'unité (unit) UNIT a commencé à démarrer.
déc. 12 01:49:53 XXX nitrogen[10093]: (nitrogen:10093): Gtk-WARNING **: cannot open display:
déc. 12 01:49:53 XXX systemd[550]: nitrogen.service: Main process exited, code=exited, status=1/FAILURE
déc. 12 01:49:53 XXX systemd[550]: Failed to start Daemon mettre à jour Nitrogen afin d'afficher les images de Variety.
-- Subject: L'unité (unit) UNIT a échoué
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- L'unité (unit) UNIT a échoué, avec le résultat failed.
déc. 12 01:49:53 XXX systemd[550]: nitrogen.service: Unit entered failed state.
déc. 12 01:49:53 XXX systemd[550]: nitrogen.service: Failed with result 'exit-code'.
Re: [variety, nitrogen] comment changer mon script en service systemd ?
Publié : sam. 12 déc. 2015, 10:27
par benjarobin
Toujours utiliser --user avec systemctl, même pour le status.
Sinon l'erreur de nitrogen indique qu'il ne peut pas accéder au display, car avant de lancer le service il faut absolument envoyer ces var d'env via le script indiqué.
Si tu prends le xinitrc de référence il appel bien ce script.
Re: [variety, nitrogen] comment changer mon script en service systemd ?(résolu)
Publié : lun. 14 déc. 2015, 15:57
par Freedomsha
bon après lecture de
https://wiki.archlinux.fr/Systemd/cron
https://bbs.archlinux.org/viewtopic.php?id=129509qui m'a envoyé sur
https://fedoraproject.org/wiki/User:Joh ... stemd.exec(très intéressant) et
http://forums.fedora-fr.org/viewtopic.php?id=62699
j' ai du coup créé 2 scripts

nitrogen.service
Code : Tout sélectionner
[Unit]
Description=Daemon mettre à jour Nitrogen afin d'afficher les images de Variety
After=graphical.target
#ConditionPathExists=/usr/bin/nitrogen
[Service]
Type=oneshot
#ExecStart=/usr/bin/nitrogen --restore
# d'après http://www.linuxtricks.fr/wiki/systemd-les-commandes-essentielles
ExecStart=/bin/sh -c '/usr/bin/nitrogen --restore'
#StandardOutput=tty
#TTYPath=/dev/tty1
Environment=DISPLAY=:0
#RemainAfterExit=no
# Restart=always
# RestartSec=15min
# TimeoutSec=0
# RemainAfterExit=no
# SysVStartPriority=99
[Install]
#
WantedBy=graphical.target
et nitrogen.timer
Code : Tout sélectionner
[Unit]
Description=Daemon mettre à jour Nitrogen afin d'afficher les images de Variety
After=graphical.target
[Timer]
Unit=nitrogen.service
# démarrage différé
# OnBootSec=1min
# Pour choisir le bon format, référez-vous aux pages de man systemd.time
OnCalendar=*-*-* *:15:00
# ou je compte essayer ceci:
# OnUnitActiveSec=15min
[Install]
#
WantedBy=timers.target
me semble plus convenir pour se lancer à partir du démarrage système !
points que je remarque :
utiliser
avec
tu avais raison pour les variables d'environnement mais je ne voyais pas lesquels mettre !
résultat:
nitrogen.service
Code : Tout sélectionner
[Unit]
Description=Daemon mettre à jour Nitrogen afin d'afficher les images de Variety
After=graphical.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/nitrogen --restore'
Environment=DISPLAY=:0
[Install]
WantedBy=graphical.target
et nitrogen.timer
Code : Tout sélectionner
[Unit]
Description=Daemon mettre à jour Nitrogen afin d'afficher les images de Variety
After=graphical.target
[Timer]
Unit=nitrogen.service
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
A part quelques petites retouches personnelles, j'ai obtenu ce que je voulais !
la fenêtre xterm de ma tâche de fond a disparu.
Un petit regret: utiliser 2 scripts de plus de 10 lignes pour remplacer 1 ligne.