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 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 ? " hmm

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)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

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" ?

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é sad

je vais me remettre dessus afin d'alléger tout ça et de corriger mes erreurs.

Merci

Hors ligne