Extinction écran avec cron

Bonjour a tous,
J’essaye d’éteindre mon écran sur un raspberry (avec raspbian) à des horaires fixes avec cron
j’ai fait un fichier .sh pour executer la commande
xset dpms force off
qui fonctionne parfaitement lorsque je la tappe à la main mais en passant par le script, impossible.
J’ai essayé d’écrire la date dans un fichier avec ce même fichier shell et
cela fonctionne, donc le souci vient de ma commande je suppose !
j’ai meme essayé de mettre un petit
export DISPLAY=:0
mais c’est pareil.
Est-ce que quelqu’un aurait une idée de ou je me plante ?

Et, juste :

xset -dpms

?

Ensuite, si tu nous montrait réellement le script en question ?!

Bonjour, et merci de répondre :slight_smile:

xset -dpms
Va juste désactiver l’éxtinxtion de l’écran, or je veux que au moment de l’exécution, mon écran passe en noir.
Voilà le code de mon script :

export DISPLAY=:0.0
xset dpms force off

Concrètement, si tu mets ça :

#! /bin/sh
export DISPLAY=:0.0
xset dpms force off

dans un fichier eteindre_ecran.sh, que tu fais chmod +x eteindre_ecran.sh puis ./eteindre_ecran.sh, il se passe quoi ?

Bizarre …
En rendant exécutable le fichier comme tu me l’as demandé, et en l’éxécutant depuis le terminal, j’obtiens un command not found
si je l’éxécute en double cliquant dessus, idem, par contre, si je l’appelle avec bash, ça fonctionne :
bash eteindre_ecran.sh

Bon, c’est dommage mais ça veut simplement dire (je pense) que tu n’as pas la commande sh fournie par le paquet dash. C’est une bataille d’interpréteur qui ne touche que peu ton petit script :slight_smile:. Tu peux donc changer #! /bin/sh par #! /bin/bash et ça devrait fonctionner.

À la longue, considère peut-être quand même l’option d’installer dash. C’est un interpréteur Shell plus respectueux (moins crado) des normes que bash.

Édit : je m’aperçois que tu cherches à lancer cette commande à heures fixes avec cron. Pourquoi passer par un script pour une commande si simple ? Tu peux la mettre en place dans crontab directement (crontab -e).

J’ai modifié le code pour mettre bash au lieu de sh mais c’est pareil…
d’ailleurs, j’ai vérifié, et j’ai dash d’installé, d’ou le fait que cela ne fonctionne pas non plus ^^

Je passes par un script, tout simplement parc que dans la crontab, ca ne fonctionne pas non plus ^^ j’ai trouvé plus simple de déboguer un script plutôt que d’éditer la crontab a chaque fois …

Sinon, si tu connais un autre moyen pour éteindre l’écran, ou bien même encore mieux, passer le raspberry en mode veille, et qu’il se redémarre tout seule à une heure précise ?

Alors, personnellement, je vois une toute petite erreur, dans le script :

#!/bin/sh et non pas #! /bin/sh

Ensuite, vérifies les droits d’exécution dessus, et d’appartenance … dans ton crontab, tu le fais exécuter par qui ?
Si par défaut, c’est … ‘root’ … non ?!

Bon alors au temps pour moi, je ne mettais pas le ./ devant le nom du fichier, normal qu’il ne connaisse pas la commande !
du coup, ca ne fonctionne tout de même pas, mais l’erreure est
bash: ./eteindre_ecran.sh: bin/sh: bad interpreter: No such file or directory
j’ai essayé avec #!/bin/bash et #!/bin/sh avec ou sans l’espace, idem :confused:

mon crontab, je le fait executer par l’utilisateur mais j’ai essayé avec root, c’est pareil

Attend, on fait un point.
Ton script, tu veux le lancer avec cron, mais il fonctionne quand actuellement ? Quand tu fais bash eteindre_ecran.sh ? Et c’est tout ?

c’est tout à fait ca, je n’arrive a le lancer que lorsque je lance la commande dans le terminal avec l’appel bash ou bien lorsque je double-clique dessus, mais lorsque c’est cron qui l’appelle, rien ne se passe.
(et cron essaye de le lancer toutes les minutes…)

Quelques commandes à lancer :
cat ./eteindre_ecran.sh
id
ls -l ./eteindre_ecran.sh
./eteindre_ecran.sh
bash ./eteindre_ecran.sh
crontab -l

J’y verrais mieux avec les retours des commandes.

Voilà le retour…
Juste une chose, mon fichier scrip s’appelle commande-stop.sh et non eteindre_ecran.sh ^^

pi@Ecran_atelier:~ $ cat ./commande-stop.sh
#! /bin/bash

set DISPLAY=:0.0
xset dpms force offpi@Ecran_atelier:~ $ id
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi)
pi@Ecran_atelier:~ $ ls -l ./commande-stop.sh
-rwxr-xr-x 1 pi pi 50 Jul 28 17:04 ./commande-stop.sh
pi@Ecran_atelier:~ $ ./commande-stop.sh
pi@Ecran_atelier:~ $ bash ./commande-stop.sh
pi@Ecran_atelier:~ $ crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
* * * * * /home/pi/commande-stop.sh

Est-ce qu’il s’est produit quelque chose sur ton écran pour ces deux lancements de la commande ?

Oui, pour les deux commandes, le script s’exécute bien (j’ai oublié de le mentionner !)

Plus personne pour m’aider ? :cry:

Heu, tu as essayé de mettre directement ça ?
DISPLAY=:0.0 xset dpms force off

1 J'aime

WOW, ca marche…
je me souviens avoir déjà essayé pourtant ! Je n’avais pas du mettre le DISPLAY…
Bref, je ne vais plus me faire chier avec le script (même si par curiosité, j’aurais bien aimé savoir pourquoi ca ne fonctionne pas !)

Merci :slight_smile:

En bash, set permet de définir une variable. Cette variable a juste valeur dans le script, mais elle n’est pas confiée à l’environnement de xset, du coup, xset ne sait pas à quel DISPLAY envoyer ses commandes.

Tu pouvais faire la même chose en faisant export DISPLAY=:0.0, là, ça place la variable DISPLAY dans l’environnement.

J’avais mit export lors de mon permier test… sauf que j’avais oublié le #! /bin/bash/ …du coup, je viens de retester et ca fonctionne aussi ^^

Merci :slight_smile:

PS : Tant que je suis là, est-ce qu’il existe une commande pour désactiver l’écran, comme lorsqu’on débranche le câble, l’écran se met en veille…?