#1 Le 18/09/2014, à 13:50
- tdc63
[RESOLU] Comment revenir à mon menu principal ?
Bonjour à tous
J'ai confectionné un script de maintenance où un peu de bash et de zenity se mêle. Seulement voilà, dans la fonction suivante je n'arrive pas à revenir à mon menu principal même si j'appelle la fonction
############ Nautilus en SuperUser
Nautilus () {
gksudo nautilus
menu_principal
}
Quand je ferme Nautilus... bah plus rien, je dois relancer mon fichier .sh
Est ce qu'il y a des codes retour pour la fermeture d'une fenêtre que je pourrais utiliser ?
Merci de votre aide.
Dernière modification par tdc63 (Le 19/09/2014, à 07:51)
Hors ligne
#2 Le 18/09/2014, à 14:49
- bishop.sad.clown
Re : [RESOLU] Comment revenir à mon menu principal ?
l'ordre dans lesquel les fonctions sont appelés/déclarés est important... peut-on voir le script dans son intégralité ? ( au besoin "floutte" les infos sensibles )
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#3 Le 18/09/2014, à 16:03
- tdc63
Re : [RESOLU] Comment revenir à mon menu principal ?
Merci de t’intéresser à mon problème.
Voici le script en entier sauf quelques lignes que j'ai effacées ou remplacées par des ??????
#!/bin/bash
############ Lancement SuperUtilisateur
# Détection gksudo
chercher () {
trouver=$(which $1)
return $?
}
if chercher gksudo; then
session=gksudo
fi
# Vérifier l'utilisateur (user/root)
if [ ! "$SUDO_USER" ]; then
# Démarrer le mode root
$session -k -m "<b> Veuillez entrer votre mot de passe </b>" "$0"
exit 0
fi
############ menu
menu_principal () {
choix=$(zenity --list \
--title "Maintenance L I N U X" \
--text "<b> QUE VOULEZ-VOUS FAIRE ? </b> " \
--height "800" \
--width "600" \
--column=" " \
--print-column="1" \
" - - - - GERER UN PC - - - - " "a - Mettre à jour le PC" "b - Vérifier l'espace occupé d'un répertoire" "c - Supprimer un UTILISATEUR" "d - Nautilus en SuperUser" " " " - - - - RECONFIGURER UN PC - - - - " "e - Copier les Home via Disque USB" "g - Copier la config IMPRIMANTES via Disque USB" " " " - - - - GERER CUPS - - - - " "h - Afficher l'état de toutes les imprimantes " "i - Annuler toutes les tâches d'impression " "j - Nettoyer cups " \ ) || exit 0
read $choix
case $choix in
a*)maj_LINUX;;
b*)espace_REP;;
c*)del_USER;;
d*)Nautilus;;
e*)cp_HOME;;
g*)cp_imprimantes;;
h*)status_printer;;
i*)supp_printer_jobs;;
j*)clean_cups;;
*)exit 0;;
esac
}
######################################- - - - GERER UN PC - - - -#################################################
############ mise à jour linux
maj_LINUX () {
?????????????????????????????????????????????????
menu_principal
}
############ espace occupé
espace_REP () {
# laius
REP=$(zenity --file-selection \
--title "Sélectionner un répertoire" \
--filename "/" \
--directory)
# fonction
sudo du -h --max-depth=1 /$REP | zenity --text-info --title "Espace occupé" --width=800 --height=500
menu_principal
}
############ Supp_USER
del_USER () {
# laius
zenity --info \
--title "i n f o r m a t i o n" \
--text "
<b> Cet outil supprime TOUTES les données d'un utilisateur </b>" \
# fonction
retour=0
while [ $retour -eq 0 ]; do
ls --hide=sic --hide=lost+found /home/ > /tmp/user.txt
UTILISATEUR=$(zenity --list --radiolist \
--title "A T T E N T I O N" \
--text "Sélectionner un Utilisateur" \
--height "400" \
--width "500" \
--column="" \
--column="U T I L I S A T E U R S" $(awk '{print "FALSE "$1}' /tmp/user.txt))
if [ $? -eq 0 ]; then
sudo deluser --remove-home $UTILISATEUR | zenity --text-info --title "Suppression en cours..." --width=800 --height=500 #Suppression du /home
zenity --info --title "Message" --text "L'utilisateur $UTILISATEUR à bien été supprimé" --height "150" --width "300"
menu_principal
else # si supression impossible affiche une erreur
zenity --error --title "Erreur" --text "Impossible de supprimer $UTILISATEUR " --height "150" --width "300"
menu_principal
fi
if [ -d "/partage" ]; then
sudo rm -vrf /partage/$UTILISATEUR | zenity --text-info --title "Suppression en cours..." --width=800 --height=500 #Suppression dans /partage
else
zenity --info --title "Message" --text "Le dossier /partage n'existe pas" --height "150" --width "300"
fi
done
}
############ Nautilus en SuperUser
Nautilus () {
gksudo nautilus
}
#############################################- - - - RECONFIGURER UN PC - - - -###################################################################################
############ cp_home
cp_HOME () {
# laius
zenity --info \
--title "i n f o r m a t i o n" \
--text "<b>
* sélectionner uniquement le disque contenant les home
(ex : /media/53980bbe-5b75-4e88-9b4c-09c88ef0e5f8 )
* ce script recopie les données de l'utilisateur choisi
et conserve les droits et permissions
* l'ancien profil est conservé puis renommé en
zz-ok--prenom.nom </b>" \
# source home = disque usb
SOURCE_HOME=$(zenity --file-selection \
--title "ne sélectionner que le disque contenant les home" \
--filename "/media" \
--directory)
# fonction
retour=0
while [ $retour -eq 0 ]; do
ls --hide=lost+found --hide=sic /$SOURCE_HOME/ > /tmp/home.txt
UTILISATEUR=$(zenity --list --radiolist \
--title "a t t e n t i o n" \
--text "sélectionner un utilisateur" \
--height "400" \
--width "500" \
--column="" \
--column="u t i l i s a t e u r s" $(awk '{print "false "$1}' /tmp/home.txt))
if [ $? -eq 0 ]; then
(sudo cp -ar $SOURCE_HOME/$UTILISATEUR /home/ ) | zenity --progress --title "Copie" --text "Veuillez patienter, copie en cours..." --percentage=0
sudo mv $SOURCE_HOME/$UTILISATEUR $SOURCE_HOME/zz-ok--$UTILISATEUR
else menu_principal
fi
done
}
############ cp_imprimantes
cp_imprimantes () {
# laius
zenity --info \
--title "i n f o r m a t i o n" \
--text "<b>
* sélectionner uniquement le dossier contenant
printers.conf /etc/cups/ </b>" \
# source imprimantes
SOURCE_PRINT=$(zenity --file-selection \
--title "sélectionner etc/cups/" \
--filename "/media" \
--directory)
menu_principal
# fonction
sudo cp -afr $SOURCE_PRINT/ /etc
sudo service cups restart
menu_principal
}
########################################- - - - GERER CUPS - - - -#################################################
############ etat des imprimantes
status_printer () {
# laius
zenity --info \
--title "i n f o r m a t i o n" \
--text " Commande lpc status all
Information sur les imprimantes installées " \
if [ $? -eq 0 ]; then
lpc status all | zenity --text-info --title "Etat des Imprimantes" --width=800 --height=500
else menu_principal
fi
menu_principal
}
############ suppression des travaux d'impression
supp_printer_jobs () {
# laius
zenity --info \
--title "i n f o r m a t i o n" \
--text " Commande lprm -
Supprime les travaux d'impressions bloqués dans le spooler. " \
if [ $? -eq 0 ]; then
sudo lprm -
else menu_principal
fi
menu_principal
}
############ nettoyage de CUPS
clean_cups () {
# laius
zenity --info \
--title "i n f o r m a t i o n" \
--text "
* Suppression des fichiers de log dans les répertoires
/var/spool/cups/ et /var/spool/cups/tmp/ " \
if [ $? -eq 0 ]; then
sudo service cups stop
sleep 2
sudo rm -vf /var/spool/cups/* | zenity --text-info --title "Suppression des anciens jobs... " --width=800 --height=500
sleep 2
sudo rm -vf /var/spool/cups/tmp/* | zenity --text-info --title "Suppression des temporaires " --width=800 --height=500
sleep 2
sudo service cups restart
else menu_principal
fi
menu_principal
}
############ fonctions
menu_principal
maj_LINUX
espace_REP
del_USER
Nautilus
cp_HOME
cp_imprimantes
status_printer
supp_printer_jobs
clean_cups
exit 0
Hors ligne
#4 Le 18/09/2014, à 17:13
- bishop.sad.clown
Re : [RESOLU] Comment revenir à mon menu principal ?
Alors en fait, le menu principal est bien rappelé mais il y a une latence de plusieurs secondes entre la fermeture de nautilus et la réapparition du menu principal...
Par contre si j'ai bien compris le script, Il me semble qu'il y a une "coquille" à la ligne 29 :
read $choix
qui ne sert à rien puisque "$choix" est déjà déclaré à la ligne 21:
choix=$(zenity --list \
le script attend une valeur à lire ( read ) pour l'assigner à "$choix" du coup, quand je lance le script en CLI je dois re-valider par <entrée> ( et ca génère une erreur → ./test.sh: ligne 29 : read: « - » : identifiant non valable ) sinon la fonction "Nautilus" n'est pas lancée... j'ai commenté cette ligne et ici ça roule...
Coquille ? où j'ai zappé un truc ?
Dernière modification par bishop.sad.clown (Le 18/09/2014, à 17:14)
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#5 Le 19/09/2014, à 07:04
- tdc63
Re : [RESOLU] Comment revenir à mon menu principal ?
Bjr
Effectivement, pour le "read" c'est une erreur de ma part. Je n'avais pas tester le script en console mais en graphique il n'y avait pas de problème. Je l'ai enlevé et ça tourne aussi bien.
En ce qui concerne Nautilus, chez moi, impossible de le faire revenir au menu. Après une bonne minute d'attente rien...
Pour tester, j'ai rajouter une fonction qui elle fait bien ce que je lui demande et sans aucun temps de latence :
############ Nautilus en SuperUser
Nautilus () {
gksudo nautilus
menu_principal
}
############ Gestion processus en SuperUser
Systeme_monitor () {
gksudo gnome-system-monitor
menu_principal
}
Comme dirait Desproges : " Étonnant ! Non ? "
Hors ligne
#6 Le 19/09/2014, à 07:25
- tdc63
Re : [RESOLU] Comment revenir à mon menu principal ?
Un petit UP
En lançant le script et en même temps en console un "gksudo gnome-system-monitor" je me suis aperçu que nautilus ne se ferme pas... il reste en tâche de fond ce qui m’empêche de retrouver mon menu.
Encore une fois... " Étonnant ! Non ? "
Hors ligne
#7 Le 19/09/2014, à 07:44
- pingouinux
Re : [RESOLU] Comment revenir à mon menu principal ?
Bonjour,
À tout hasard, tu peux essayer de mettre en tête de ton script
nautilus -q
Hors ligne
#8 Le 19/09/2014, à 07:50
- tdc63
Re : [RESOLU] Comment revenir à mon menu principal ?
Merci les gars pour votre aide mais je crois que je viens de trouver la solution :
J'ai tout simplement remplacé le fameux "gksudo" par un simple "sudo"
############ Nautilus en SuperUser
Nautilus () {
sudo nautilus
menu_principal
}
############ Gestion processus en SuperUser
Systeme_monitor () {
gksudo gnome-system-monitor
menu_principal
}
Le plus troublant est que le gnome-system-monitor tourne parfaitement !!!
Merci à vous...
Hors ligne
#9 Le 19/09/2014, à 07:55
- pingouinux
Re : [RESOLU] Comment revenir à mon menu principal ?
C'est gksudo qu'il faut utiliser pour nautilus, comme pour toutes les commandes graphiques.
Hors ligne
#10 Le 19/09/2014, à 07:59
- jplemoine
Re : [RESOLU] Comment revenir à mon menu principal ?
Solution qui n'en ai pas une et que je déconseille....
Tu vas bloquer ton système car
- certains fichiers cachés vont prendre root comme propriétaire (si ce n'est pas déjà fait)
- Si tu mets des fichiers dans la corbeille, tu vas bloquer la corbeille puisque ton utilisateur n'aura pas les droits sur ces fichiers (qui appartiennent à root).
EDIT : grillé par pingouinux qui dit, d'une manière différente, la même chose.
Dernière modification par jplemoine (Le 19/09/2014, à 08:01)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#11 Le 19/09/2014, à 08:26
- tiramiseb
Re : [RESOLU] Comment revenir à mon menu principal ?
Salut,
Même avis sur sudo vs gksudo : ne jamais utiliser sudo avec un logiciel graphique !
Ensuite, concernant Nautilus, non c'est pas étonnant qu'il reste en fonctionnement : il se met à gérer le bureau quand on le lance normalement et il ne s'arrête pas quand on ferme une fenêtre. Le fonctionnement que tu souhaites (fermeture de Nautilus à la fermeture d'une fenêtre) nécessite l'argument "--no-desktop" et éventuellement "--no-default-window". Ce qui ferait :
gksudo nautilus --no-default-window --no-desktop
Tout cela est détaillé dans la page de manuel de Nautilus.
Enfin, je n'ai pas parcouru tout ton script mais il me semble inutilement lourd. Simple exemple, tu as écrit :
chercher () { trouver=$(which $1) return $? } if chercher gksudo; then session=gksudo fi
Quelle est la différence avec :
if which gksudo; then
session=gksudo
fi
... voire, encore mieux :
which gksudo && session=gksudo
Ou alors, approche différente mais résultat similaire dans le cas précis de ton script :
session=$(which gksudo)
Ensuite, si tu définis "session=gksudo", pourquoi utilises-tu ensuite directement "gksudo" plutôt que "$session" ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#12 Le 19/09/2014, à 10:21
- tdc63
Re : [RESOLU] Comment revenir à mon menu principal ?
Pfiou... Beaucoup d'info d'un seul coup à traiter pour mon petit cerveau !
Pour la fonction " chercher() " j'ai juste repris un script sur le net. Comme ça tournait pas mal je ne suis pas allé plus loin... Désolé
je vais me remettre dessus afin d'alléger tout ça et de corriger mes erreurs.
Merci
Hors ligne