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/01/2013, à 00:48

metalux

[Résolu]Voyager, aide pour changement dynamique des bureaux

Merci à tous ceux qui voudront bien m'apporter de l'aide concernant le problème évoqué ici dont voici un extrait

Déjà si l'un de vous pourrais m'orienter pour le bug du terminal. Je récupère le PID de l'application avec

pidranger=$((ps -x | grep 'ranger') |  sed 's/^ //' | cut -d " " -f1)

Pas de souci, ça fonctionne sans terminal mais quand un terminal est ouvert avant, plus moyen de trouver le PID. J'ai cru comprendre que c'était un problème de processus père/fils, aussi si quelqu'un à une idée de comment récupérer proprement le PID du processus fils.

A ceux qui m'apporteront leur aide, je n'aurai pas beaucoup le temps, ne le prenez pas mal si je mets du temps à répondre.
@rodofr
Encore merci pour m'avoir fais découvrir Xfce. Cet environnement permet plein de chose et c'est un formidable terrain d'apprentissage pour le bash. Donc pas grave si tu trouves que ce que j'essaye de faire ne sert à rien, en attendant ça me permet de progresser en script même si j'ai beaucoup de difficulté (pas tous l'esprit aussi vif que toi Didier-T smile ).

Dernière modification par metalux (Le 13/01/2013, à 14:30)

Hors ligne

#2 Le 02/01/2013, à 05:44

pingouinux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Bonjour,
Peut-être ceci

 pidranger=$(ps x | grep 'ranger'|sed 's/^ //' | cut -d " " -f1)

ou

pidranger=$(ps x | awk '/ranger/{print $1}')

:

Hors ligne

#3 Le 02/01/2013, à 06:47

Didier-T

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

ou même ceci

pidranger=$(ps cx | awk '/ranger/{print $1}')

l'option c limite les informations transmises par ps au nom de l'application lancé, donc plus de donnée parasite lié aux ligne de commande.

Hors ligne

#4 Le 02/01/2013, à 06:53

pingouinux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

On a aussi :

pidranger=$(pgrep ranger)

Hors ligne

#5 Le 02/01/2013, à 06:55

Didier-T

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

pingouinux a écrit :

On a aussi :

pidranger=$(pgrep ranger)

jolie, je connaissais pas big_smile
J'adopte cool

Dernière modification par Didier-T (Le 02/01/2013, à 06:57)

Hors ligne

#6 Le 02/01/2013, à 08:18

serged

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Didier-T a écrit :
pingouinux a écrit :

On a aussi :

pidranger=$(pgrep ranger)

jolie, je connaissais pas big_smile
J'adopte cool

pgrep est quand plus pratique (et plus joli) qu'un ps|grep ! à utiliser sans modération !


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#7 Le 03/01/2013, à 20:17

metalux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Merci pour vos réponse, en fait elles m'ont surtout permises de voir que mon problème ne vient apparemment pas de là. J'avais essayé un peu de tout dont l'usage de pgrep et j'avais retenu ps -x | grep tout simplement car le retour est détaillé et me permet de filtrer sur un mot du retour et pas forcément sur le nom de l'application. Je n'étais pas complètement à côté de la plaque et pgrep est effectivement le plus approprié (voire pidof).
Donc retour à zéro, nouveau problème big_smile
Je vais reprendre dans les jours prochains sur une autre base en récupérant les infos avec xwininfo. Suite à la remarque de ljere sur le topic dédié à Voyager 12.10, j'ai décidé de répartir l'ouverture de ranger,Moc et terminal sur 3 bureaux différents tout en gardant la possibilité de les garder ouverts en même temps. voici l'ébauche 2 scripts, j'ai commenté le 1er mais le 2ème est identique:

#!/bin/bash
# License GPL
# by rodofr Live Voyager
# Modified by metalux for dynamic change wallpapers
# Display the action selector
bureau=~/.scripts/Wall/wall3

#######Teste si Ranger est ouvert et le ferme si c'est le cas
xwininfo -name 'Voyager File Manager'
if [ $? -eq 0 ];then
	wmctrl -c 'Voyager File Manager'
	
	
else
########sinon bascule sur le bureau 3 et l'ouvre	
	wmctrl -s2
	wall="xfconf-query -c xfce4-desktop -p \"/backdrop/screen0/monitor0/image-path\" -s \"/usr/share/xfce4/backdrops/Wall-003.jpeg\""
		sed -i 's/^xfconf/#xfconf/' $bureau
		sed -i "/^#xfconf/a $wall" $bureau
		$bureau
		xfce4-terminal --title="Voyager File Manager" --maximize --hide-menubar --hide-borders -x "ranger"
#######Le script est alors en pause et le code qui suit se déroule que si on ferme ranger.
		sed -i '/^xfconf/d' $bureau
		sed -i 's/^#xfconf/xfconf/' $bureau
		$bureau
	
fi
exit 0
#!/bin/bash
# License GPL
# by rodofr Live Voyager
# Modified by metalux for dynamic change wallpapers
# Display the action selector
bureau=~/.scripts/Wall/wall2
xwininfo -name 'Voyager Terminal'
if [ $? -eq 0 ];then
	wmctrl -c 'Voyager Terminal'
	
	
else
	
	wmctrl -s1
	wall="xfconf-query -c xfce4-desktop -p \"/backdrop/screen0/monitor0/image-path\" -s \"/usr/share/xfce4/backdrops/Wall-008.jpeg\""
	sed -i 's/^xfconf/#xfconf/' $bureau
	sed -i "/^#xfconf/a $wall" $bureau
	$bureau
	xfce4-terminal --title="Voyager Terminal" --geometry 1920x25 --hide-menubar --hide-borders
	sed -i '/^xfconf/d' $bureau
		sed -i 's/^#xfconf/xfconf/' $bureau
		$bureau
	
fi

Pas de souci, tout fonctionne correctement,SAUF, si l'un des 2 scripts est déjà lancé. Dans ce cas, le code devant se déroulé uniquement après la fermeture semble ne pas se faire ou se faire avant même la fermeture de l'application. Une idée???

Hors ligne

#8 Le 03/01/2013, à 21:09

pingouinux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Bonsoir,
Ton problème se produit-il quand tu lances script1 puis script2, ou script1 puis de nouveau script1 ?

Remarque :
Tu peux remplacer

xwininfo -name 'Voyager File Manager'
if [ $? -eq 0 ];then
	wmctrl -c 'Voyager File Manager'
else
   ………

par

if xwininfo -name 'Voyager File Manager'; then
        wmctrl -c 'Voyager File Manager'
else
   ………

Hors ligne

#9 Le 03/01/2013, à 22:00

metalux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Ton problème se produit-il quand tu lances script1 puis script2, ou script1 puis de nouveau script1 ?

Script 1 lance ranger avec son fond d'écran dédié, puis à nouveau script 1, ranger se ferme et le fond d'écran du bureau3 est bien restauré. Comportement souhaité.
Script 1 lance ranger avec son fond d'écran dédié, puis script2, le bureau bascule sur bureau2 et le terminal s'ouvre mais le fond d'écran reste celui du bureau 2 au lieu du fond d'écran associé au terminal. J'ai ajouté un sleep 20 juste avant la fin du code comme cela

xfce4-terminal --title="Voyager Terminal" --geometry 1920x25 --hide-menubar --hide-borders
	sleep 20
	sed -i '/^xfconf/d' $bureau
		sed -i 's/^#xfconf/xfconf/' $bureau
		$bureau
	
fi

J'ai pu vérifié les changements dans le script wall3 déterminé par la variable bureau au début du script, et maintenant je suis sûr que le script ne se met pas en pause après le lancement de l'application si l'autre script est déjà en cours d'exécution.Le fond d'écran souhaité s'affiche bien dans ce cas pendant 20 secondes avant de changer.
C'est le même problème que lorsque je laissais ranger et terminal sur le même bureau. Comme je tuais un avant de lancer l'autre, il n'y avais qu'un terminal d'ouvert et çà fonctionnait. Si je lançais un terminal avant, le code continuait jusqu'à la fin, alors que je croyais que je récupérais mal le Pid.
Pour la remarque, je note et t'en suis reconnaissant, d'ailleurs j'utilise déjà des enseignements que tu m'a transmis sur un autre topic.

Hors ligne

#10 Le 04/01/2013, à 08:12

metalux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

J'ai trouvé ça, peut-être que je peux mettre mon code de fin dans une fonction et utiliser la commande trap pour l'appeler à la fermeture de la fenêtre. L'un de vous connaît cette commande et comment l'utiliser?
J'ai fais un man trap mais rien, je suppose que ça se trouve dans le man bash. Y-a-t-il moyen de lancer man bash et de se rendre directement à un endroit donné du manuel en filtrant sur un mot comme trap dans ce cas?

Hors ligne

#11 Le 04/01/2013, à 08:49

pingouinux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Bonjour,
trap est une "shell builtin command" de bash. Pour voir directement son utilisation, sans passer par man bash :

help trap

Voici quelques exemples d'utilisation.

Ajouté :
Dans script1, par exemple, si tu fermes 'Voyager File Manager', tu sors du script sans rien faire d'autre. Est-ce volontaire ?

Dernière modification par pingouinux (Le 04/01/2013, à 08:53)

Hors ligne

#12 Le 04/01/2013, à 19:19

metalux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Pour script 1, oui c'est volontaire de ne rien mettre d'autre. Je suis obligé de laisser à la fin les commandes qui rétablissent le fond d'écran du bureau car autrement  la fermeture de la fenêtre par la croix ou alt+F4 n'a plus le même comportement que la fermeture par le script.Si le script est lancé une première fois, il exécute les commandes jusqu'à l'ouverture de ranger(renommé Voyager file manager pour l'occasion) et se met en pause. Quand on le lance une seconde fois, il détecte que ranger est ouvert et ferme celui-ci et alors le 1er lancement du script exécute les commandes de fin. Si un terminal est déjà ouvert, il n'attend pas la fermeture de la fenêtre pour continuer les commandes et c'est bien là le problème. C'est comme si j'avais ajouté & à la fin de la ligne d'ouverture de ranger.
Pour le manuel je faisais l'inverse, soit trap --help et je n'avais aucun détail. Maintenant à voir si je comprends bien car il n'y a pas de pages Fr hmm. A priori.
Edit: trap sert à exécuter des commandes en fonction de signal reçu par le script et non par une fenêtre choisie, donc je ne penses pas que ça me soit utile.
.

Dernière modification par metalux (Le 05/01/2013, à 07:58)

Hors ligne

#13 Le 06/01/2013, à 12:36

metalux

Re : [Résolu]Voyager, aide pour changement dynamique des bureaux

Finalement je me suis résigné à utiliser une boucle pour surveiller l'état de la fenêtre,ouverte ou fermée. Celle-ci ne sert que si il y a déjà un terminal d'ouvert, dans le cas contraire, le script est en pause tant que la fenêtre de Ranger n'est pas fermée. Je voulais éviter cette façon de faire car elle m'a été déconseillée par Didier-T, et qu'il est à priori préférable d'utiliser un autre langage pour ce type d'usage afin de limiter la consommation CPU.
Voici le script modifié et largement commenté:

#!/bin/bash
# License GPL
# by rodofr Live Voyager
# Modified by metalux for dynamic change wallpapers
# Display the action selector
bureau=~/.scripts/Wall/wall3

#######Teste si Ranger est ouvert et le ferme si c'est le cas

if xwininfo -name 'Voyager File Manager';then
	wmctrl -c 'Voyager File Manager'
else

########sinon bascule sur le bureau 3
	
	wmctrl -s2

########et modifie le script wall3 qui gère l'affichage du fond d'écran de sorte que celui-ci soit celui choisi lors de l'ouverture de ranger.
 
	wall="xfconf-query -c xfce4-desktop -p \"/backdrop/screen0/monitor0/image-path\" -s \"/usr/share/xfce4/backdrops/Wall-003.jpeg\""
	sed -i 's/^xfconf/#xfconf/' $bureau
	sed -i "/^#xfconf/a $wall" $bureau
	$bureau
		
########Lance ranger

	xfce4-terminal --title="Voyager File Manager" --maximize --hide-menubar --hide-borders -x "ranger"

#######1-Pas de terminal ouvert:Le script est alors en pause et le code qui suit se déroule que si on ferme ranger.###########
#######2-Un terminal ouvert: Le script continue et la boucle suivante attend la fermeture de la fenêtre pour continuer le script##########

	while xwininfo -name 'Voyager File Manager'
	do
		sleep 1
	done

########Rétabli le fond d'écran du bureau 3

	sed -i '/^xfconf/d' $bureau
	sed -i 's/^#xfconf/xfconf/' $bureau
	$bureau

########Sortie de la boucle if/then et fin du script
fi	
exit 0

Merci pour votre aide et surtout pour m'avoir ouvert les yeux que je faisais fausse route sur l'origine du bug.

Dernière modification par metalux (Le 13/01/2013, à 14:40)

Hors ligne