Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 06/04/2017, à 08: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

Hors ligne

#27 Le 06/04/2017, à 10: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  sad

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, à 12: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, à 14: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, à 14:52)

Hors ligne

#30 Le 06/04/2017, à 15: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, à 07: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, à 20: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, à 21: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, à 21:06)

Hors ligne

#34 Le 08/04/2017, à 02: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)

  1. on met fermeture dans /bin, on vire le sh
    tu vas dans ton dossier où se trouve fermeture
    clic droit, ouvrir dans un terminal

    sudo cp fermeture.sh /bin/fermeture
  2. 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

  3. 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, à 09: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, à 13:28)

#36 Le 08/04/2017, à 10: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, à 10: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, à 10:37)

Hors ligne

#38 Le 10/04/2017, à 07: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 big_smile )
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, à 07:43)

Hors ligne

#39 Le 10/04/2017, à 10: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, à 11:17)

Hors ligne

#40 Le 10/04/2017, à 11: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, à 10: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, à 10: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, à 11:10)

Hors ligne

#43 Le 11/04/2017, à 12: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, à 12:53)


Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail

Hors ligne

#44 Le 11/04/2017, à 13: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, à 13:40)

#45 Le 11/04/2017, à 14: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, à 13: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, à 10:01

kholo

Re : [Résolu] extinction automatique à une heure précise avec avertissement

salut,
@jmercanton : merci ! wink
@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 !!! big_smile

+1 pour

systemd-run --user --on-calendar="*-*-* 13:00:00" /chemin vers le script de fermeture

à garder sous le coude

Hors ligne