# Extinction écran avec cron

**URL:** <https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436>\
**Category:** Programmation\
**Created:** [Juillet 27, 2016, 9:51 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436 "2016-07-27T21:51:36Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 27, 2016, 9:51 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/1 "2016-07-27T21:51:36Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Juillet 28, 2016, 6:27 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/2 "2016-07-28T06:27:21Z")

</div>

Et, juste :

```
xset -dpms

```

?

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

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 28, 2016, 7:35 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/3 "2016-07-28T07:35:37Z")

</div>

Bonjour, et merci de répondre 🙂

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

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Juillet 28, 2016, 7:54 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/4 "2016-07-28T07:54:31Z")

</div>

Concrètement, si tu mets ça :

```auto
#! /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 ?

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 28, 2016, 8:20 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/5 "2016-07-28T08:20:39Z")

</div>

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`

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Juillet 28, 2016, 10:08 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/6 "2016-07-28T10:08:48Z")

</div>

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 🙂. 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`).

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 28, 2016, 10:28 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/7 "2016-07-28T10:28:33Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Juillet 28, 2016, 11:06 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/8 "2016-07-28T11:06:14Z")

</div>

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 ?!

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 28, 2016, 12:16 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/9 "2016-07-28T12:16:54Z")

</div>

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 😕

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

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Juillet 28, 2016, 2:36 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/10 "2016-07-28T14:36:46Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 28, 2016, 3:07 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/11 "2016-07-28T15:07:48Z")

</div>

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…)

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Juillet 28, 2016, 3:21 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/12 "2016-07-28T15:21:16Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 29, 2016, 7:09 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/13 "2016-07-29T07:09:18Z")

</div>

Voilà le retour…  
Juste une chose, mon fichier scrip s’appelle [commande-stop.sh](http://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
```

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Juillet 29, 2016, 7:27 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/14 "2016-07-29T07:27:06Z")

</div>

> [@roideseaux](#):
>
> `pi@Ecran_atelier:~ $ ./commande-stop.sh
> pi@Ecran_atelier:~ $ bash ./commande-stop.sh`

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

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Juillet 29, 2016, 7:59 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/15 "2016-07-29T07:59:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Août 1, 2016, 8:59 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/16 "2016-08-01T08:59:31Z")

</div>

Plus personne pour m’aider ? 😢

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Août 1, 2016, 9:15 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/17 "2016-08-01T09:15:28Z")

</div>

> [@roideseaux](#):
>
> `set DISPLAY=:0.0
> xset dpms force off`

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

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Août 1, 2016, 9:31 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/18 "2016-08-01T09:31:37Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Août 1, 2016, 9:42 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/19 "2016-08-01T09:42:53Z")

</div>

> [@roideseaux](#):
>
> même si par curiosité, j’aurais bien aimé savoir pourquoi ca ne fonctionne pas !

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.

---

<div class="post-metadata">

**Author:** ![roideseaux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/e19b73/32.png) [@roideseaux](https://www.debian-fr.org/u/roideseaux)\
**Post date:** [Août 1, 2016, 10:36 UTC](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436/20 "2016-08-01T10:36:16Z")

</div>

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 🙂

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…?

[Page suivante](https://www.debian-fr.org/t/extinction-ecran-avec-cron/70436.md?page=2)
