[variety, nitrogen] comment changer mon script en service systemd ?(résolu)

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
Freedomsha
Hankyu
Messages : 15
Inscription : dim. 03 juin 2012, 19:51

[variety, nitrogen] comment changer mon script en service systemd ?(résolu)

Message 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

Code : Tout sélectionner

xterm -iconic -e watch -n 900 nitrogen --restore &
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 !
Dernière modification par Freedomsha le lun. 14 déc. 2015, 16:18, modifié 1 fois.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17618
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [variety, nitrogen] comment changer mon script en service systemd ?

Message 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.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Freedomsha
Hankyu
Messages : 15
Inscription : dim. 03 juin 2012, 19:51

Re: [variety, nitrogen] comment changer mon script en service systemd ?

Message 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 !
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17618
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [variety, nitrogen] comment changer mon script en service systemd ?

Message 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é.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Freedomsha
Hankyu
Messages : 15
Inscription : dim. 03 juin 2012, 19:51

Re: [variety, nitrogen] comment changer mon script en service systemd ?

Message par Freedomsha »

!!!
il est nécessaire que /etc/X11/xinit/xinitrc.d/50-systemd-user.sh soit lancé lors du démarrage de ta session
!!!

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/ ?
Dernière modification par Freedomsha le sam. 12 déc. 2015, 01:16, modifié 2 fois.
Avatar de l’utilisateur
papajoke
Elfe
Messages : 819
Inscription : sam. 30 août 2014, 19:54

Re: [variety, nitrogen] comment changer mon script en service systemd ?

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

Code : Tout sélectionner

[Timer]
Unit=nitrogen.service
OnCalendar=*-*-* *:15:00 
-------------------
avec variety il doit être possible de se passer de timer et systemd, voir le bash :

Code : Tout sélectionner

/usr/share/variety/scripts/set_wallpaper
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17618
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [variety, nitrogen] comment changer mon script en service systemd ?

Message 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 ?
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Freedomsha
Hankyu
Messages : 15
Inscription : dim. 03 juin 2012, 19:51

Re: [variety, nitrogen] comment changer mon script en service systemd ?

Message 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'.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17618
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [variety, nitrogen] comment changer mon script en service systemd ?

Message 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.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Freedomsha
Hankyu
Messages : 15
Inscription : dim. 03 juin 2012, 19:51

Re: [variety, nitrogen] comment changer mon script en service systemd ?(résolu)

Message 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

Code : Tout sélectionner

# OnUnitActiveSec=15min
me semble plus convenir pour se lancer à partir du démarrage système !

points que je remarque :
utiliser

Code : Tout sélectionner

ExecStart=/bin/sh -c 'nom_de_commande'
avec

Code : Tout sélectionner

Environment=DISPLAY=:0
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.
Répondre