#26 Le 06/04/2017, à 07:32
- Hizoka
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Si c'est bon, ajoute un [Résolu] dans le titre du topic
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
En ligne
#27 Le 06/04/2017, à 09:26
- jmercanton
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Salut,
Je reviens sur mon dernier message pour dire que la fenêtre s'ouvre belle et bien, que le srcipt se lance et qu'on peut différer l'extinction. L'option OFF fonctionne aussi car je l'ai testée lors de mon dernier message.
En fait j'avais stopper la procédure en mettant OFF dans le champ.
Par contre j'ai essayé de laisse le script allez jusqu'à son terme et là !! surprise l'ordinateur ne s'éteint pas
j'ai refait un test dans le terminal avec ./fermeture.sh et avec cette commande tout se passe normalement pour l'extinction de la machine.
Je crois que je vais avoir encore besoin d'un peu d'aide.
Hors ligne
#28 Le 06/04/2017, à 11:20
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
as tu réactivé les lignes qui concernent l'extinction ?
function Eteindre () {
# Pour activer ce script commenter zenity et choisir une façon d'éteindre
zenity --info --text="Eteindre"
# Adapter en fonction du système
# Eteindre_avec_Dbus &
# Eteindre_avec_Systemctl &
# sleep 1 # pour laisser le temps au script
exit 0
}
doit devenir
function Eteindre () {
# Pour activer ce script commenter zenity et choisir une façon d'éteindre
# zenity --info --text="Eteindre"
# Adapter en fonction du système
# Eteindre_avec_Dbus &
Eteindre_avec_Systemctl &
sleep 1 # pour laisser le temps au script
exit 0
}
Hors ligne
#29 Le 06/04/2017, à 13:02
- jmercanton
Re : [Résolu] extinction automatique à une heure précise avec avertissement
je n'avais pas décommenté la ligne # sleep 1 # pour laisser le temps au script
J'ai modifié le script selon tes conseils et refait un test à l'instant
malheureusement ça ne change pas ... l'écran affiche la fenêtre d'avertissement pendant xxx secondes ( chez moi j'ai demandé 20 secondes ), la petite barre du temps progresse en bas de la fenêtre, et ensuite la fenêtre se referme sans que l'ordinateur s’arrête.
voici le script qui est actuellement utilisé dans le fichier /home/ctp-bachet/fermeture.sh
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}" # vous pouvez commenter cette ligne
echo "lancement $nomlogiciel..." # vous pouvez commenter cette ligne
VERSION="0.001"
by="kholo 2017"
# NOTES DE VERSIONS
#
# ----------------------------------------------
pasToutDeSuite=20 # temps par defaut avant de reposer la question
defautTemps=20 # sans confirmation exécution dans x secondes
leTemps=(0 60 120 180 240 300) # liste de choix dans Entry
maForm=0
FONCTION="ce script permet d'arrêter une machine avec inter-action
par défaut il arrête le système après $defautTemps secondes
en cas d'annulation, il ouvrira une fenetre pour choisir le temps avant de se relancer
on peut taper off pour arrêter ce script ou un temps en secondes
en cas d'échappement le script sera relancé automatiquement au bout de $pasToutDeSuite secondes
NB : vous pouvez tester ce script sans modification
cette version est sécurisée en ne faisant qu'afficher une boite de dialogue au lieu d'arrêter réellement le PC
"
# #attention ces functions peuvent éteindre l'ordinateur
function Eteindre_avec_Dbus () {
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
}
function Eteindre_avec_Systemctl () {
# #A partir de 16.04 avec Systemctl (peut être 15.10 voire 15.04)
# avec Systemctl
systemctl poweroff
}
function Eteindre () {
# Pour activer ce script commenter zenity et choisir une façon d'éteindre
# zenity --info --text="Eteindre"
# Adapter en fonction du système
# Eteindre_avec_Dbus &
Eteindre_avec_Systemctl &
sleep 1 # pour laisser le temps au script
exit 0
}
function form () {
zenity --entry --title "Extinction dans $defautTemps secondes" \
--text "Temps en secondes avant extinction \noff pour arrêter ce script" \
--entry-text "${leTemps[@]}"
#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
echo -1
exit 0
fi
}
for (( i=0 ; i<=$defautTemps ; i++ )); do
pourcent=$(( i * 100 / $defautTemps ))
echo "$pourcent"
sleep 1
shift
# echanger ces lignes pour la version finale
done | zenity --progress --text="$FONCTION" --percentage=0 --auto-close
if [ "$?" -eq 1 ]; then
maForm="$(form)"
fi
case $maForm in
-1 ) sleep $pasToutDeSuite # temps par defaut avant de reposer la question
./"$0" # se relance lui même
exit 0
;;
off ) exit 0 ;; # quitter ce script
0 ) Eteindre ;;
* ) sleep $maForm
./"$0" # se relance lui même
;;
esac
exit 0
Dernière modification par jmercanton (Le 06/04/2017, à 13:52)
Hors ligne
#30 Le 06/04/2017, à 14:23
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
en ajoutant &...
systemctl poweroff &
et en retirant l'autre :
Eteindre_avec_Systemctl &
Eteindre_avec_Systemctl
c'est plus logique en désolidarisant sysmctl que la fonction... qué cogno !
ça devrait régler le problème !
les deux fonctions avec leur esperluette...
function Eteindre_avec_Dbus () {
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop &
}
function Eteindre_avec_Systemctl () {
# #A partir de 16.04 avec Systemctl (peut être 15.10 voire 15.04)
# avec Systemctl
systemctl poweroff &
}
Hors ligne
#31 Le 07/04/2017, à 06:22
- jmercanton
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Salut,
J'ai modifié le code comme tu me l'a expliqué
function Eteindre_avec_Systemctl () {
# #A partir de 16.04 avec Systemctl (peut être 15.10 voire 15.04)
# avec Systemctl
systemctl poweroff &
}
function Eteindre () {
# Pour activer ce script commenter zenity et choisir une façon d'éteindre
# zenity --info --text="Eteindre"
# Adapter en fonction du système
# Eteindre_avec_Dbus &
Eteindre_avec_Systemctl
sleep 1 # pour laisser le temps au script
exit 0
}
j'ai refait un test de fermeture à 7h16 ce matin avec la commande
16 07 * * * DISPLAY=:0 /home/ctp-bachet/fermeture.sh
il n'y a pas de changement ...... la fenêtre d'avertissement s'ouvre mais l'ordinateur ne s'éteint pas
Hors ligne
#32 Le 07/04/2017, à 19:35
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
bon,
je l'ai bien secoué aujourd'hui et en effet rien n'y fait !
NB la version de Tamarou (script y compris) pas plus !
tous fonctionne en ligne de commande (à part dbus que j'ai modifié depuis)
mais rien à faire avec cron ou systemd...
en fouillant j'ai trouvé des problèmes de droits...
mais j'aime pas l'idée de modifier par là
Hors ligne
#33 Le 07/04/2017, à 20:04
- jmercanton
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Je suis désolé de te donner tant de problèmes avec mon post.
Quand tu parles des droits, il faut savoir que la machine qui accueille le script n'est utilisée que par moi.
Es ce que les droits dont tu parles engendrent d'autres problèmes que de simples droits d'utilisateurs ?
J'espère que malgré cela une solution sera possible car ton script me plait beaucoup et je serai très heureux de pouvoir l'utiliser.
Une autres question.... peut on l'utiliser autrement que dans un fichier.sh C'est à dire par exemple de l'inclure directement dans la commande cron ?
Ne connaissant pas grand chose, je dis peut-être une grosse bêtise ?? et cette fois ça serait moi le qué cogno !
Dernière modification par jmercanton (Le 07/04/2017, à 20:06)
Hors ligne
#34 Le 08/04/2017, à 01:37
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
j'ai un truc !
NB : seul un sudoer peut fermer
(rien eu à faire avec un utilisateur normal)
on met fermeture dans /bin, on vire le sh
tu vas dans ton dossier où se trouve fermeture
clic droit, ouvrir dans un terminalsudo cp fermeture.sh /bin/fermeture
cron doit lancer shutdown en root
sudo crontab -e
ajouter la ligne
pas de root dans la ligne on est déjà sudo !56 01 * * * DISPLAY=:0 /bin/fermeture
adapter l'heure bien sûr
l'utilisateur doit autoriser root à exécuter des applications graphiques
xhost local:root
trouvé ici
DONC
xhost local:root
puis
je lance /bin/fermeture depuis sudo crontab -e
-> ça marche !
mes derniers cheveux y sont restés :
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
reste à voir où mettre xhost... c'est pas le choix qui manque
on peut rester "graphique" jusqu'au bout :
mkdir $HOME/.config/autostart
puis
ce code ajoute xhost au démarrage
(à copier / coller d'un coup dans le terminal)
echo "[Desktop Entry]
Type=Application
Terminal=false
Exec=xhost local:root
Name=Xhost
Comment=GUI pour root
X-GNOME-Autostart-enabled=true" | tee $HOME/.config/autostart/fermeture.desktop
l'important n'est pas de trouver mais de chercher...
m'enfin ; quand on trouve, c'est mieux !!!
Hors ligne
#35 Le 08/04/2017, à 08:46
- Compte supprimé
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Salut,
J'ai pas tout suivi, mais qu'est-ce qui ne va pas ? Le script ne se lance pas ou il ne fait pas ce qui est attendu ?
Vous passez par cron ou systemd ? Par systemd il faut aussi activer le .timer
systemctl --user enable xxxx.timer
EDIT : A propos du message N°7 :
shutdown ne demande pas les droits de superutilisateur
le message envoyé par shutdown, ne concerne que les autres utilisateurs avec une session active et s'affiche dans un terminal.
Dernière modification par Compte supprimé (Le 08/04/2017, à 12:28)
#36 Le 08/04/2017, à 09:30
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
d'abord le script fermeture bug quand on le lance avec bash en ligne de commande.
il faut remplacer pour avoir :
case $maForm in
-1 ) sleep $pasToutDeSuite # temps par defaut avant de reposer la question
# ./"$0" # se relance lui même
./"$nomlogiciel" # se relance lui même
exit 0
;;
off ) exit 0 ;; # quitter ce script
0 ) # Eteindre
/sbin/shutdown -P now
;;
* ) sleep $maForm
# ./"$0" # se relance lui même
./"$nomlogiciel" # se relance lui même
;;
esac
j'utilise $nomlogiciel qui est défini au début du script et "nettoyé" :
nomlogiciel="${0##*/}"
merci Tamarou,
je vais essayer systemd aussi pour valider les deux méthodes...
pour notre histoire :
d'abord, penser à mettre DISPLAY... dans la ligne cron pour afficher les fenêtres...
ensuite
si je lance l'extinction en ligne de commande quelque soit l'utilisateur ça marche.
dans un script, simple, ça marche
dès que je passe par cron : plus moyen !
-> j'ai modifié le script et, par défaut, ya pas d'utilisateur ni la plupart des variables globales
pe : pas de $USER...
pour ça, il suffit de lancer cron avec sudo et on devient root pour cron
ensuite
root ne peut pas afficher les fenêtre...
donc il faut lancer
xhost... pour acheminer les fenêtres sur le bon bureau...
... plus un cheveux j'te dis !!!
Hors ligne
#37 Le 08/04/2017, à 09:31
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
mon code de fermeture avant nettoyage :
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}"
echo "lancement $nomlogiciel..." # vous pouvez commenter cette ligne
VERSION="0.002"
by="kholo 2017"
# NOTES DE VERSIONS
#
# ----------------------------------------------
# zenity --info --text="PWD $PWD\nUSER $USER\nwhoami $(whoami)" ;
pasToutDeSuite=3 # temps par defaut avant de reposer la question
defautTemps=4 # sans confirmation exécution dans x secondes
leTemps=(0 60 120 180 240 300) # liste de choix dans Entry
maForm=0
FONCTION="ce script permet d'arrêter une machine avec inter-action
par défaut il arrête le système après $defautTemps secondes
en cas d'annulation, il ouvrira une fenetre pour choisir le temps avant de se relancer
on peut taper off pour arrêter ce script ou un temps en secondes
en cas d'échappement le script sera relancé automatiquement au bout de $pasToutDeSuite secondes
NB : vous pouvez tester ce script sans modification
cette version est sécurisée en ne faisant qu'afficher une boite de dialogue au lieu d'arrêter réellement le PC
"
# #attention ces functions peuvent éteindre l'ordinateur
function Eteindre_avec_Dbus () {
# /usr/bin/dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop #& ;
# /usr/bin/dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
DISPLAY=:0 dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true
}
function Eteindre_avec_Systemctl () {
# #A partir de 16.04 avec Systemctl (peut être 15.10 voire 15.04)
# avec Systemctl
# /bin/systemctl poweroff
xterm -e "systemctl poweroff ; read a" ;
}
function Eteindre_avec_shutdown () {
# #A partir de 16.04 avec Systemctl (peut être 15.10 voire 15.04)
# avec Systemctl
/sbin/shutdown -P now
# xterm -e "/sbin/shutdown -P now ; read a" ;
# xterm -e "echo $(whoami) ; read a ; sudo shutdown -P now ;" ;
}
function Eteindre () {
# Pour activer ce script commenter zenity et choisir une façon d'éteindre
# zenity --info --text="Eteindre" ;
# Adapter en fonction du système
# retour=$(Eteindre_avec_Dbus) ;
# retour=$(Eteindre_avec_Systemctl) ;
retour=$(Eteindre_avec_shutdown) ;
# ./home/papa/bin/coupe.sh &
# /sbin/shutdown -P now && msgbox "shutdown oui" || msgbox "shutdown non"
# /bin/systemctl poweroff && msgbox "systemctl oui" || msgbox "systemctl non"
# dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true && msgbox "dbus oui" || msgbox "dbus non"
zenity --info --text="Extinction\n${retour}\nsortie:$?" ;
# sleep 100 # pour laisser le temps au script
# on ne devrait jamais passer par là !
# exit 0
}
function form () {
zenity --entry --title "Extinction dans $defautTemps secondes" \
--text "Temps en secondes avant extinction \noff pour arrêter ce script" \
--entry-text "${leTemps[@]}"
#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
echo -1
exit 0
fi
}
for (( i=0 ; i<=$defautTemps ; i++ )); do
pourcent=$(( i * 100 / $defautTemps ))
echo "$pourcent"
sleep 1
shift
# echanger ces lignes pour la version finale
done | zenity --progress --text="$FONCTION" --percentage=0 --auto-close
if [ "$?" -eq 1 ]; then
maForm="$(form)"
fi
case $maForm in
-1 ) sleep $pasToutDeSuite # temps par defaut avant de reposer la question
# ./"$0" # se relance lui même
./"$nomlogiciel" # se relance lui même
exit 0
;;
off ) exit 0 ;; # quitter ce script
0 ) # Eteindre
/sbin/shutdown -P now
;;
* ) sleep $maForm
# ./"$0" # se relance lui même
./"$nomlogiciel" # se relance lui même
;;
esac
exit 0
version 0.003
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}"
# echo "lancement $nomlogiciel..."
VERSION="0.003"
by="kholo 2017"
# NOTES DE VERSIONS
#
# ----------------------------------------------
pasToutDeSuite=3 # temps par defaut avant de reposer la question
defautTemps=4 # sans confirmation exécution dans x secondes
leTemps=(0 60 120 180 240 300) # liste de choix dans Entry
maForm=0
FONCTION="ce script permet d'arrêter une machine avec inter-action
par défaut il arrête le système après $defautTemps secondes
en cas d'annulation, il ouvrira une fenetre pour choisir le temps avant de se relancer
on peut taper off pour arrêter ce script ou un temps en secondes
en cas d'échappement le script sera relancé automatiquement au bout de $pasToutDeSuite secondes
"
function form () {
zenity --entry --title "Extinction dans $defautTemps secondes" \
--text "Temps en secondes avant extinction \noff pour arrêter ce script" \
--entry-text "${leTemps[@]}"
#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
echo -1
exit 0
fi
}
for (( i=0 ; i<=$defautTemps ; i++ )); do
pourcent=$(( i * 100 / $defautTemps ))
echo "$pourcent"
sleep 1
shift
done | zenity --progress --text="$FONCTION" --percentage=0 --auto-close
if [ "$?" -eq 1 ]; then
maForm="$(form)"
fi
case $maForm in
-1 ) sleep $pasToutDeSuite # temps par defaut avant de reposer la question
./"$nomlogiciel" # se relance lui même
exit 0
;;
off ) exit 0 ;; # quitter ce script
0 ) # Eteindre
/sbin/shutdown -P now
;;
* ) sleep $maForm
./"$nomlogiciel" # se relance lui même
;;
esac
exit 0
Dernière modification par kholo (Le 08/04/2017, à 09:37)
Hors ligne
#38 Le 10/04/2017, à 06:42
- jmercanton
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Salut,
Merci pour le super boulot ( va falloir que je t'offre une séance d'implant capillaire )
C'est de plus en plus évident que je n'aurai jamais été capable de faire cela tout seul
Je suis admiratif devant une telle détermination.
Au final j'ai donc refait un test ce matin et effectivement la fermeture s'opère jusqu’à l’extinction complète de la machine
il y a juste un truc que je n'ai pas bien compris
Es ce que je dois mettre la version 0.003 dans le fichier /bin/fermeture ? Actuellement je suis avec la version 0.002 .
car au test du report, j'ai demandé a retarder de 60 secondes la fermeture et après 2 minutes le pc ne s'est pas éteint.
En tout cas pour moi l'objectif est atteint et si le report n'est qu'une histoire de version, je changerai le contenu du fichier fermeture. Quoi qu'il en soit je ne sais comment te dire merci pour le super travail.
Dernière modification par jmercanton (Le 10/04/2017, à 06:43)
Hors ligne
#39 Le 10/04/2017, à 09:54
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
dans la version 0.003 j'ai juste fait le ménage...
je suis autodidacte et j'utilise des astuces au fur et à mesure que j'apprends
en me donnant des "défis" comme ton petit soucis.
donc, par exemple, maintenant commentés
# xterm -e "/sbin/shutdown -P now ; read a" ;
# xterm -e "echo $(whoami) ; read a ; sudo shutdown -P now ;" ;
c'est comme ça que j'ai compris qu'il manquait des droits ou infos
j'aime bien aussi zenity pour me renvoyer des valeurs facilement
un reste de VB :
function Msgbox () {
zenity --info --text="$@"
}
MsgBox "le texte que je veux !"
ceci ajouté, tu peux mettre un Msgbox dans le code pour avoir une valeur ou valider que le programme passe bien par un endroit du code (un test ou une fonction)
if [ "$?" -eq 1 ]; then
maForm="$(form)"
fi
Msgbox "valeur de maForm = $maForm"
# exit 0 # dé-commenter pour arrêter le temps des tests
case $maForm in
-1 ) sleep $pasToutDeSuite # temps par defaut avant de reposer la question
Msgbox "-1"
./"$nomlogiciel" # se relance lui même
exit 0
;;
off ) exit 0 ;; # quitter ce script
0 ) # Eteindre
Msgbox "Extinction"
#/sbin/shutdown -P now # démilitarisé !
;;
* ) sleep $maForm
./"$nomlogiciel" # se relance lui même
;;
esac
après
sudo crontab -e
tu lances une minute après et enregistres...
ça te permettra peut être de trouver seul ou ça merdoi
je regarde de mon côté, mais tout roulait !
Dernière modification par kholo (Le 10/04/2017, à 10:17)
Hors ligne
#40 Le 10/04/2017, à 10:21
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
fermeture démilitarisé
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}"
# echo "lancement $nomlogiciel..."
VERSION="0.004 demilitarisé"
by="kholo 2017"
# NOTES DE VERSIONS
#
# ----------------------------------------------
function Msgbox () {
zenity --info --text="$@"
}
# MsgBox "le texte que je veux !"
pasToutDeSuite=3 # temps par defaut avant de reposer la question
defautTemps=4 # sans confirmation exécution dans x secondes
leTemps=(0 60 120 180 240 300) # liste de choix dans Entry
maForm=0
FONCTION="ce script permet d'arrêter une machine avec inter-action
par défaut il arrête le système après $defautTemps secondes
en cas d'annulation, il ouvrira une fenetre pour choisir le temps avant de se relancer
on peut taper off pour arrêter ce script ou un temps en secondes
en cas d'échappement le script sera relancé automatiquement au bout de $pasToutDeSuite secondes
"
function form () {
zenity --entry --title "Extinction dans $defautTemps secondes" \
--text "Temps en secondes avant extinction \noff pour arrêter ce script" \
--entry-text "${leTemps[@]}"
#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
echo -1
exit 0
fi
}
for (( i=0 ; i<=$defautTemps ; i++ )); do
pourcent=$(( i * 100 / $defautTemps ))
echo "$pourcent"
sleep 1
shift
done | zenity --progress --text="$FONCTION" --percentage=0 --auto-close
if [ "$?" -eq 1 ]; then
maForm="$(form)"
fi
Msgbox "valeur de maForm = $maForm"
# exit 0 # dé-commenter pour arrêter le temps des tests
case $maForm in
-1 ) sleep $pasToutDeSuite # temps par defaut avant de reposer la question
Msgbox "-1"
./"$nomlogiciel" # se relance lui même
exit 0
;;
off ) exit 0 ;; # quitter ce script
0 ) # Eteindre
Msgbox "Extinction"
#/sbin/shutdown -P now # démilitarisé !
;;
* ) sleep $maForm
./"$nomlogiciel" # se relance lui même
;;
esac
exit 0
fermeture fonctionnel :
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}"
# echo "lancement $nomlogiciel..."
VERSION="0.004"
by="kholo 2017"
# NOTES DE VERSIONS
#
# ----------------------------------------------
# function Msgbox () {
# zenity --info --text="$@"
# }
# MsgBox "le texte que je veux !"
pasToutDeSuite=3 # temps par defaut avant de reposer la question
defautTemps=4 # sans confirmation exécution dans x secondes
leTemps=(0 60 120 180 240 300) # liste de choix dans Entry
maForm=0
FONCTION="ce script permet d'arrêter une machine avec inter-action
par défaut il arrête le système après $defautTemps secondes
en cas d'annulation, il ouvrira une fenetre pour choisir le temps avant de se relancer
on peut taper off pour arrêter ce script ou un temps en secondes
en cas d'échappement le script sera relancé automatiquement au bout de $pasToutDeSuite secondes
"
function form () {
zenity --entry --title "Extinction dans $defautTemps secondes" \
--text "Temps en secondes avant extinction \noff pour arrêter ce script" \
--entry-text "${leTemps[@]}"
#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
echo -1
exit 0
fi
}
for (( i=0 ; i<=$defautTemps ; i++ )); do
pourcent=$(( i * 100 / $defautTemps ))
echo "$pourcent"
sleep 1
shift
done | zenity --progress --text="$FONCTION" --percentage=0 --auto-close
if [ "$?" -eq 1 ]; then
maForm="$(form)"
fi
# Msgbox "valeur de maForm = $maForm"
# exit 0 # dé-commenter pour arrêter le temps des tests
case $maForm in
-1 ) sleep $pasToutDeSuite # temps par defaut avant de reposer la question
# Msgbox "-1"
./"$nomlogiciel" # se relance lui même
exit 0
;;
off ) exit 0 ;; # quitter ce script
0 ) # Eteindre
# Msgbox "Extinction"
/sbin/shutdown -P now # démilitarisé !
;;
* ) sleep $maForm
./"$nomlogiciel" # se relance lui même
;;
esac
exit 0
Hors ligne
#41 Le 11/04/2017, à 09:07
- jmercanton
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Hello,
Je reviens après une nuit ou l'ordinateur a pu se stopper tout seul sans aucune présence.
l’arrêt fonctionne très bien.
Ce matin j'ai refait un test au niveau du report
j'ai essayé de lancer le script dans le terminal avec la commande
bash /bin/fermeture
l'écran d'avertissement s'est correctement affiché sur mon écran
j'ai cliqué sur le bouton annuler. j'ai rentré un délai de 60 secondes pour effectuer le report de la fermeture
après ce délai le terminal m'a envoyé ce message
/bin/fermeture: ligne 65: ./fermeture: Aucun fichier ou dossier de ce type
es ce que cette information est susceptible de donner une information pertinente sur la raison pour laquelle le script n'est pas relancé.
je sais que le fichier est bien présent. mais es ce que c'est la commande qui doit être corrigée ?
au post #20 tu me disais qu'il ne fallait pas de point demande le /
Hors ligne
#42 Le 11/04/2017, à 09:38
- MicP
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Bonjour
/bin/fermeture: ligne 65: ./fermeture: Aucun fichier ou dossier de ce type
à la ligne 3 des scripts qui sont dans le message #40
il te faudrait changer
nomlogiciel="${0##*/}"
par
nomlogiciel="${0}"
=======
et dans les lignes 56 et 65, il te faudrait changer
./"$nomlogiciel" # se relance lui même
par :
"$nomlogiciel" # se relance lui même
=======
Ou alors, si tu ne veux pas modifier ces lignes, étant donné que ./ représente le répertoire courant,
pour que ces scripts puissent fonctionner il te faudrait lancer ces script depuis le répertoire les contenant <=> changer de répertoire courant pour se retrouver dans le répertoire où sont ces scripts
Vu la commande utilisée, il te faudrait donc faire d'abord :
cd /bin
avant de lancer le script
=======
Si le script /bin/fermeture est exécutable (attribut x ),
il n'est pas nécessaire d'utiliser la commande bash pour le lancer.
En entrant juste :
/bin/fermeture
ça devrait suffire
.
Dernière modification par MicP (Le 11/04/2017, à 10:10)
Hors ligne
#43 Le 11/04/2017, à 11:52
- maxire
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Bonjour,
Je vais émettre une critique constructive au sujet du script présenté par Kholo.
Certes ce script va fonctionner tel que jmercaton va l'utiliser mais il ne peut fonctionner:
1 - que lorsqu'une session graphique est en cours ceci à cause du choix de Zenity qui nécessite un serveur Xorg actif X ou Xwayland
2 - que si le serveur graphique est Xorg avec un identifiant égale à :0
Il existe plusieurs solutions pour pallier à ce problème en utilisant systemd via un service systemd-timer utilisateur qui lancera le script de fermeture à l'heure voulue en mode utilisateur et non root avec la variable d'environnement DISPLAY positionnée à la valeur réellement utilisée qui n'est pas nécessairement :0.
Une autre solution plus simple et plus fiable car il est alors certain qu'une session graphique est active, est de lancer à chaque démarrage de session graphique utilisateur cette commande:
systemd-run --user --on-calendar="*-*-* 13:00:00" /chemin vers le script de fermeture
Remplacer 13:00:00 par l'heure voulue.
Avec cette solution plus besoin de cron, d'utiliser root ni xhost et elle fonctionnera en mode multi utilsateur et/ou déporté.
Plus d'information dans les pages man systemd.timer, systemd.time, systemd-run.
Dernière modification par maxire (Le 11/04/2017, à 11:53)
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne
#44 Le 11/04/2017, à 12:36
- Compte supprimé
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Merci maxire pour systemd-run --user --on-calendar, c'est encore plus simple que ma proposition plus haut et indépendant du serveur graphique utilisé.
On pourrait même se passer du script en mettant les deux commandes dans la même ligne lancée à l'ouverture de session.
systemd-run --user --on-calendar="*-*-* 13:34:00" notify-send "Il est xxh, je ferme dans 5 mn." & systemd-run --user --on-calendar="*-*-* 13:34:00" shutdown +5
Dernière modification par Compte supprimé (Le 11/04/2017, à 12:40)
#45 Le 11/04/2017, à 13:03
- maxire
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Se passer d'un script, oui, tout dépend de ce que désire jmercaton.
SystemD est vraiment une grande évolution dans le monde Linux/Unix, un produit professionnel.
Linux sort enfin de l'amateurisme et du bricolage (créatif il est vrai) du monde universitaire.
C'est un ex IBMer qui l'écrit, avec une préférence pour la famille de SE Gcos de Bull/General Electric sans doute les meilleurs SEs de Mainframes.
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne
#46 Le 12/04/2017, à 12:27
- jmercanton
Re : [Résolu] extinction automatique à une heure précise avec avertissement
Merci beaucoup à tous pour l'aide
j'ai modifié le script selon les infos fournies en #42 et ça fonctionne tip-top
Je pense donc que l'objectif est atteint et pour ma part je vais mettre ce poste en résolu.
avec mes meilleures salutations et sincères remerciements.
Hors ligne
#47 Le 13/04/2017, à 09:01
- kholo
Re : [Résolu] extinction automatique à une heure précise avec avertissement
salut,
@jmercanton : merci !
@tous :
pour systemd c'est sûr que c'est une bonne solution
la nécessité du script vient de la possibilité de l'utilisateur de pouvoir repousser l'extinction... ou non
je reviendrai finaliser un peu plus tout ça
si personne ne le fait avant !!!
+1 pour
systemd-run --user --on-calendar="*-*-* 13:00:00" /chemin vers le script de fermeture
à garder sous le coude
Hors ligne