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.

#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 smile

Merci

N3o hmm


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 smile

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 wink).

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

n3o51 a écrit :

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 smile

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

Link31 a écrit :

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 wink).

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

roll


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


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

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

seb0uil

Re : Script d'arret pc :)

n3o51 a écrit :

Tout fonctionne sauf le fait de donner un parametre temps j'ai tester avec at dans mon script mais ca marche pas !!!

As tu essayé avec sleep ?


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

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 tongue
Cela dit je vais essayer de suite je te tiens au jus big_smile
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

#21 Le 05/12/2008, à 18:09

seb0uil

Re : Script d'arret pc :)

tu peux faire des essais, mais je supposerais que c'est en millisecondes


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

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

sad


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


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

Hors ligne