#1 Le 02/12/2008, à 10:09
- n3o51
Script d'arret pc :)
Bonjour a tous , voila j'ai un amis qui souhaite arretter son pc aprés la fin des telechargements avec Downthemall .
Vissiblement downthemall n'as pas de processus a lui , il a l'air d'utilisé directement le pid de firefox, cela seras verifier dans les testes;J'ai commencé le script mais voila j'ai quelque question.
Le script
#!/bin/bash
#
################################
function STOP_PROG {
if [ "$?" != "0" ] ; then
zenity --info --title="$0" --text="Vous avez souhaitez arreter l'arret programmé" ; sudo shutdown -c
fi
}
function STOP_KILL {
zenity --info --title='Verification ' --text="Votre ordinateur va rédemarrer.
\n Annuler cette opération
\n Simplement en cliquant sur valider"
STOP_PROG
argument=$(zenity --entry --text="Quand souhaitez arretter l'ordi?" --entry-text="$(date +%H:%M )" --title="Arrêter")
if [ ! $argument ] ; then exit
else gksudo -u root "shutdown -h $argument"
fi
STOP_PROG
}
if [ ! "$(pidof firefox)" ]; then
STOP_KILL
fi
exit 0
Les actions qui me paraisse essentiel :
1. Le script verifie que firefox tourne
2. Si Firefox ne tourne plus alors on lance " en arriere plan" la commande d'arret
3. Avec une notification a l'utilisateur que le pc va s'arretter
4. Si l'utilisateur est sur le pc au meme moment , il clique sur valider et annule donc la précedente operation
5. si celui ci annule l'operation ( pour l'instant seulement le choix de donner une autre valeur temps)
Deux choix sont proposer :
choix 1 arret du pc en fonction de $argument
choix 2 l'utilisateur prefere arretter son pc manuelement
Pensez vous que la maniere dont j'ai commencé le script soit la bonne
Comment ne pas étre embetté avec la demande de mot de passe
Merci
N3o
Welcome to the real world
________________________________
Hors ligne
#2 Le 02/12/2008, à 13:14
- n3o51
Re : Script d'arret pc :)
Re moi une derniere chose aussi comment je met en place la boucle while sur le
if [ ! "$(pidof firefox)" ]; then
Comme ca c'est bon ?
while true; do
if [ ! "$(pidof firefox)" ]; then
sudo shutdown -t 600 ;
STOP_KILL
fi
done
exit 0;
Dernière modification par n3o51 (Le 02/12/2008, à 13:19)
Welcome to the real world
________________________________
Hors ligne
#3 Le 02/12/2008, à 13:47
- Link31
Re : Script d'arret pc :)
if ! pidof firefox > /dev/null; then
Hors ligne
#4 Le 02/12/2008, à 14:04
- n3o51
Re : Script d'arret pc :)
Ce que j'ai fonctionne mais j'ai un petit soucis la commande shutdown me demande le mot de passe
J'ai ajouté dans etc/sudoers
n3o ALL=NOPASSWD: /sbin/shutdown
Pourquoi cela ne fonctionne pas s'il vous plait
Welcome to the real world
________________________________
Hors ligne
#5 Le 02/12/2008, à 15:26
- n3o51
Re : Script d'arret pc :)
Je poste le nouveau script fonctionnel encore quelque point a verifier et un peut de mise en forme
#!/bin/bash
#
################################
# nom-d-utilisateur ALL=NOPASSWD:/sbin/halt,NOPASSWD:/sbin/reboot
# User privilege specification
# root ALL=(ALL) ALL
# n3o ALL=NOPASSWD: /sbin/shutdown
# Afin de prendre les modification en compte sudo -v
function SUSPENDRE {
if [ "$?" != "0" ] ; then
zenity --info --title="$0" --text="L'extinction programmé de votre ordinateur a éte suspendu"
exit 0
fi
}
function RESTAURE {
argument=$(zenity --entry --text="Quand souhaitez arretter l'ordi?" --entry-text="Indiquez le temps en minute" --title="Arrêter")
if [ ! $argument ] ; then exit
else
sudo /sbin/shutdown -h +$argument
fi
}
function ACCUEIL {
ACT=$(zenity --list --checklist --width=400 --height=350 --title "L'extinction programmé de votre ordinateur a éte suspendu" --text="Veuillez sélectionnez les informations demandés:" \
--column="Selection" --column="" --column="Categories" --hide-column=2 \
FALSE SUSP "Suspendre l'arrét automatique" \
FALSE REPO "Reporter l'arrét automatique" )
}
function MENU {
while true; do
ACCUEIL
if [ $? != 0 ] ; then
zenity --info --title="Fin du script !" --text="Merci d'avoir utilisé ce script. \n
Bonne journée ! \n
N3o"
exit 0
fi
case $ACT in
SUSP)
# Menu
SUSPENDRE
if [ $? != 0 ] ; then
zenity --info --title="Fin du script !" --text="Merci d'avoir utilisé ce script. \n
Bonne journée ! \n
N3o"
fi
;;
REPO)
# Menu
RESTAURE
if [ $? != 0 ] ; then
zenity --info --title="Fin du script !" --text="Merci d'avoir utilisé ce script. \n
Bonne journée ! \n
N3o"
fi
;;
esac
done
}
while true; do
## On verifie l'etat d'execution de firefox
if [ ! "$(pidof firefox)" ]; then
## Firefox étant terminé un arrét programmé a 3 minute
## Est prevu de façon a laissé le temps d'annuler l'operation
sudo /sbin/shutdown -h +3&
zenity --info --title='Verification ' --text="Votre ordinateur va rédemarrer.
\n Annuler cette operation
\n Simplement en cliquant sur valider"
sudo /sbin/shutdown -c
MENU
fi
done
exit 0;
Cela dit je suit obliger de mettre un mot de passe lors de l'utilisation de la commande shutdown
J'ai meme essayer d'enlever sudo mais need to be root ?
J'ai vraiment besoin de vous
Dernière modification par n3o51 (Le 02/12/2008, à 15:27)
Welcome to the real world
________________________________
Hors ligne
#6 Le 02/12/2008, à 15:35
- Link31
Re : Script d'arret pc :)
Je ne sais pas, je n'utilise pas sudo. Dans un système UNIX normal, on donnerait les droits sgid au binaire /sbin/shutdown, au groupe à qui tu veux donner le droit de l'utiliser (le groupe "admin" par exemple, ou ce que tu veux d'autre).
Mais tu devrais plutôt chercher à communiquer avec GDM ou KDM pour ton script, ça éviterait de changer les permissions sur des programmes sensibles, et ça éviterait que n'importe quel programme stupide ou malveillant arrête la machine sans que tu sois d'accord (utile quand on teste des thèmes KDM et qu'on clique involontairement sur arrêter ).
Je n'ai pas d'exemple de code pour ce dernier point, mais ça doit pouvoir se faire avec des outils du genre dcop (pour KDE). Ça doit bien être indiqué dans la doc, voire sur freedesktop.
Hors ligne
#7 Le 02/12/2008, à 16:58
- n3o51
Re : Script d'arret pc :)
Ok je te remercie mais j'aurais une question j'ai trouvé ca sur le forum
Oui, et il est plus simple de faire sudo chmod +s /sbin/shutdown:
Si je fait ca pour tester mon script comment revenir en arriere ?
Aussi quelqu'un aurai-il une olution plus simple que celle proposer par link31 car je voitr vraiment ce que tu veut dire et surtout ou trouver l a doc pour mettre ca en place.
Je signal aussi je suis sous gnome
Dernière modification par n3o51 (Le 02/12/2008, à 17:02)
Welcome to the real world
________________________________
Hors ligne
#8 Le 02/12/2008, à 17:00
- Link31
Re : Script d'arret pc :)
Oui, et il est plus simple de faire sudo chmod +s /sbin/shutdown
Si je fait ca pour tester mon script comment revenir en arriere ?
sudo chmod -s /sbin/shutdown
Hors ligne
#9 Le 02/12/2008, à 17:03
- n3o51
Re : Script d'arret pc :)
Merci
Je signal que je suis sous gnome quand meme si jamais quelqu'un connait
Welcome to the real world
________________________________
Hors ligne
#10 Le 02/12/2008, à 18:21
- n3o51
Re : Script d'arret pc :)
Une petite chose que je comprends pas j'ai ajoute la ligne que beaucoup personne donne pour pouvoir utiliser shutdown sans mot de passe
Je conprends je fait sudo -l
est j'ai
User n3o may run the following commands on this host:
(root) NOPASSWD: /sbin/shutdown
(ALL) ALL
Pourquoi il me met root avant NOPASSWD ? alors que j'ai mis
n3o ALL=NOPASSWD:/sbin/shutdown
Welcome to the real world
________________________________
Hors ligne
#11 Le 05/12/2008, à 01:41
- n3o51
Re : Script d'arret pc :)
Je ne sais pas, je n'utilise pas sudo. Dans un système UNIX normal, on donnerait les droits sgid au binaire /sbin/shutdown, au groupe à qui tu veux donner le droit de l'utiliser (le groupe "admin" par exemple, ou ce que tu veux d'autre).
Mais tu devrais plutôt chercher à communiquer avec GDM ou KDM pour ton script, ça éviterait de changer les permissions sur des programmes sensibles, et ça éviterait que n'importe quel programme stupide ou malveillant arrête la machine sans que tu sois d'accord (utile quand on teste des thèmes KDM et qu'on clique involontairement sur arrêter
).
Je n'ai pas d'exemple de code pour ce dernier point, mais ça doit pouvoir se faire avec des outils du genre dcop (pour KDE). Ça doit bien être indiqué dans la doc, voire sur freedesktop.
Je me permet de repasser ici car j'ai terminer ce script .Mais voila la methode que j'ai donner dans le script de faire un sudo +s sur le fichier shutdown ne me plait comme Link me la preciser.Hors j'ai trouver en fouillant un peut une methode qui utilise directement gdm c'est un script disponible dans /usr/bin.Il s'agit de gnome-power-cmd.sh qui permet divers commande comme le reboot l'arret etc ... sans demande de mot de passe.
Hors je me demander s'il etait possible de passer un parametre temps sur gnome-power-cmd.sh shutdown comme la commande shutdown le permet ce qui m'aiderai grandement pour implementer cela dans mon script.
Merci pour vous reponse futur !!!
N3o
Welcome to the real world
________________________________
Hors ligne
#12 Le 05/12/2008, à 10:01
- n3o51
Re : Script d'arret pc :)
Bonjour donc vissiblement impossible de passer un parametre temps a shutdown en utilisant gnome-power.Si quelqu'un pouvait m'aider a implementer cela dans mon script
Merci
Welcome to the real world
________________________________
Hors ligne
#13 Le 05/12/2008, à 12:17
- n3o51
Re : Script d'arret pc :)
J'ai vraiment besoin de vous car je ne vois vraiment pas comment faire pour donner un parametre de temps mais surtout comment empecher le rebbot si l'utilisateur clique sur valider
Welcome to the real world
________________________________
Hors ligne
#14 Le 05/12/2008, à 13:09
- n3o51
Re : Script d'arret pc :)
Ne trouvant aucune methode je me demande si je peut le coupler avec at de cette maniere
if [ ! $argument ] ; then exit
else
at now +3 minutes <<EOF
execute_dbus_method Shutdown
EOF
fi
Pouvez vous confirmer et aussi me dire comment ensuite si l'uilisateur annule comment faire dans le script pour annuler la commande at en recuperant le bon job
Merci !!!
Welcome to the real world
________________________________
Hors ligne
#15 Le 05/12/2008, à 14:19
- n3o51
Re : Script d'arret pc :)
Voila j'ai testé avec ce script :
#!/bin/bash
# AfterDown.sh V 2.0
################################
# ################################################## #
# Ce script permet d'arretter l'ordinateur aprés #
# fin des telechargements avec DownthemAll #
# #
# #
# ################################################## #
# Script créer par N3o51 sur une idée de Xeno
## Fonction Menu Choix d'arreter La programmation ou de continuer en indiquant une nouvelle durée
## Le temps seras definit en Mn
function execute_dbus_method {
dbus-send --session --dest=org.freedesktop.PowerManagement \
--type=method_call --print-reply --reply-timeout=2000 \
/org/freedesktop/PowerManagement \
org.freedesktop.PowerManagement.$1
if [ $? -eq 0 ]; then
echo "Failed"
fi
}
function MENU {
ACT=$(zenity --list --checklist --width=400 --height=350 --title "L'extinction programmé de votre ordinateur a éte suspendu" --text="Veuillez sélectionnez les informations demandés:" \
--column="Selection" --column="" --column="Categories" --hide-column=2 \
FALSE SUSP "Suspendre l'arrét automatique" \
FALSE REPO "Reporter l'arrét automatique" )
if [ $? != 0 ] ; then
zenity --info --title="Fin du script !" --text="Merci d'avoir utilisé ce script. \n
Bonne journée ! \n
N3o"
exit 0
fi
case $ACT in
## Choix 1 → Arret du script avec Notification via zenity
SUSP)
zenity --info --title="Fin du script !" --text="Merci d'avoir utilisé ce script.
\n Bonne journée !
\n N3o"
exit 0
;;
REPO)
# minutes ou hours
## Choix deux on reporte l'extinction de l'ordinateur
argument=$(zenity --entry --text="Quand souhaitez arretter l'ordi?" --entry-text="Ex : Pour 1 heure mettre 1 hours pour 10 minutes mettre 10 minutes" --title="Arrêter")
if [ ! $argument ] ; then exit
else
at now +$argument >> EOF
execute_dbus_method shutdown
fi
if [ $? != 0 ] ; then
zenity --info --title="Fin du script !" --text="Merci d'avoir utilisé ce script. \n
Bonne journée ! \n
N3o"
exit 0
fi
break
;;
esac
}
while true; do
## On verifie l'etat d'execution de firefox
if [ ! "$(pidof firefox)" ]; then
## Firefox étant terminé un arrét est programmé a 3 minute
## Prévu de façon a laissé le temps d'annuler l'operation
at now +3 minutes >> EOF
execute_dbus_method shutdown
EOF
## Information notifier a l'utilisateur
zenity --info --title='Verification' --text="Votre ordinateur va rédemarrer.
\n Annuler cette operation
\n Simplement en cliquant sur valider"
atrm
## Annulation de l'utilisateur
## Lancement du Menu
MENU
break
fi
done
exit 0;
Voila ce qui en resort :
+ at now +3 minutes
warning: commands will be executed using /bin/sh
at> + execute_dbus_method shutdown
+ dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.shutdown
Error org.freedesktop.DBus.Error.UnknownMethod: Method "shutdown" with signature "" on interface "org.freedesktop.PowerManagement" doesn't exist
+ '[' 1 -eq 0 ']'
+ EOF
downthemall.sh: line 101: EOF : commande introuvable
+ zenity --info --title=Verification '--text=Votre ordinateur va rédemarrer.
\n Annuler cette operation
\n Simplement en cliquant sur valider'
+ atrm
Usage: at [-V] [-q x] [-f file] [-mldbv] time
at -c job ...
atq [-V] [-q x]
atrm [-V] job ...
batch
+ MENU
++ zenity --list --checklist --width=400 --height=350 --title 'L'\''extinction programmé de votre ordinateur a éte suspendu' '--text=Veuillez sélectionnez les informations demandés:' --column=Selection --column= --column=Categories --hide-column=2 FALSE SUSP 'Suspendre l'\''arrét automatique' FALSE REPO 'Reporter l'\''arrét automatique'
+ ACT=
+ '[' 1 '!=' 0 ']'
+ zenity --info '--title=Fin du script !' '--text=Merci d'\''avoir utilisé ce script. \n
Bonne journée ! \n
N3o'
+ exit 0
Welcome to the real world
________________________________
Hors ligne
#16 Le 05/12/2008, à 14:28
- seb0uil
Re : Script d'arret pc :)
salut,
pour ton shutdown sans mot de passe, as tu essayé de lancer
# /sbin/shutdown
et non directement shutdown (en laissant le shell le trouver dans le path)
Il me semble qu'il faut indiquer la même chose que ce qui est indiqué dans le fichier sudoers, donc ici avec le chemin complet...
Hors ligne
#17 Le 05/12/2008, à 15:14
- n3o51
Re : Script d'arret pc :)
Oui j'avais teste de le lancer en modifiant le sudoers mais ca ne passe pas de plus le script n'es pas pour moi et j'aimerais mieux implementer la meme chose que le gnome-power-cmd.sh car cela permet facilement de faire un shutdown
Tout fonctionne sauf le fait de donner un parametre temps j'ai tester avec at dans mon script mais ca marche pas !!!
Merci quand meme pour t'as reponse
Dernière modification par n3o51 (Le 05/12/2008, à 15:14)
Welcome to the real world
________________________________
Hors ligne
#18 Le 05/12/2008, à 16:58
Hors ligne
#19 Le 05/12/2008, à 17:39
- n3o51
Re : Script d'arret pc :)
En faite non faut croire que j'aime bien la complication
Cela dit je vais essayer de suite je te tiens au jus
Par contre si quelqu'un aurait l'amabilité de me dire ou j'ai fait l'erreur ça serait bien sympa.
Merci d'avance ....
Cela dit une derniere chose j'etais parti du principe de lancé le shutdown avec +3 ( = 3 minute ) , ensuite si la personne cliqué sur valider ca permettait d'empecher le shutdown via la commande
shutdown -c
donc je me demande comment faire la meme chose avec dbus
Welcome to the real world
________________________________
Hors ligne
#20 Le 05/12/2008, à 17:50
- n3o51
Re : Script d'arret pc :)
Je pense avoir trouver comment proceder juste une chose en quoi est exprimer le timeout
--reply-timeout=2000
pour dbus-send j'ai rien vu dans le man
Welcome to the real world
________________________________
Hors ligne
#22 Le 05/12/2008, à 18:17
- n3o51
Re : Script d'arret pc :)
effectivement en milliseconde !!
Bon sinon je ne sais pas comment faire pour la parti
On trouve plus firefox alors on lance le shutdown avec 3 minute si entre temps la personne annule alors on arrette le shutdown et on propose a la personne de donner une valeur temps pour arreter le pc ou arretter completement le script
Le probléme vient de deux choses la premiere je ne sais pas comment suspendre un shutdown lancé via dbus
Sinon j'ai pensé a
while true; do
## On verifie l'etat d'execution de firefox
if [ ! "$(pidof firefox)" ]; then
## Firefox étant terminé un arrét est programmé a 3 minute
## Prévu de façon a laissé le temps d'annuler l'operation
arret=$( zenity --question \
--text="Voulez-vous vraiment continuer ?"
if [ $? != 0 ] ; then
dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=180000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Shutdown
fi
Mais la le soucis c'est comment faire pour dire au script si la personne ne clique pas continu et éteint l'ordinateur ?
Welcome to the real world
________________________________
Hors ligne
#23 Le 05/12/2008, à 21:52
- n3o51
Re : Script d'arret pc :)
Welcome to the real world
________________________________
Hors ligne
#24 Le 06/12/2008, à 14:52
- n3o51
Re : Script d'arret pc :)
personne ne peut m'aider plz
Welcome to the real world
________________________________
Hors ligne
#25 Le 06/12/2008, à 22:00
- seb0uil
Re : Script d'arret pc :)
salut,
comme ca je ne vois pas trop. Un truc envisageable est :
Firefox arrêter -> Tu lances un script dans lequel tu fais un sleep, suivi de l'arrêt du pc,
tu lances ce script en tache de fond, a coté de ca, tu demandes a l'utilisateur s'il souhaite continuer a utiliser le pc. S'il valide la question, tu lances alors un killall de ton script précédent...
S'il ne fait rien, dès que le sleep du script précédent est fini, hop, le pc s'éteind...
Hors ligne