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 21/10/2006, à 19:26

loubrix

script pour arrêter Esd et lancer une appli...

Bonjour,
un peu lassé de faire des 'killall esd' pour toutes les applis qui supportent que Alsa en direct (Wengo, jeux, ...etc), et d'en prendre plein les oreilles quand je relance Esd en oubliant l'option -nobeeps, j'avais commencé à faire plein de scripts de lancement qui kill esd avant de lancer l'appli, et comme je suis une super-bille en script, ça donnait:

#! /bin/sh

killall esd && /usr/local/bin/tmw &

on rigole pas !!!:P
le problème c'est que si Esd est déjà killé parce qu'on avait déjà lancé l'application, ça bloque; et en plus, Esd ne repart pas après qu'on ait fermé l'appli en question.

ce que je voudrais savoir, c'est comment peut-on faire un script qui:
-vérifie si Esd tourne, et l'arrête si c'est le cas
-lance l'application
-est capable de surveiller la fermeture de l'application pour relancer Esd après.

et parti comme ça, je me demandais si ça serait très dur de faire un petit daemon conçu pour surveiller le démarrage de ces applications (qu'on aurait mis dans un fichier de conf), pour arrêter et redémarrer le serveur de sons (que ce soit Esd, Artsd, Jackd, ou autre) au bon moment, simplifiant au max la vie de l'utilisateur.

d'avance merci pour vos avis éclairés:)


Asus X50VL - Ubuntu 12.04 AMD64
HP G62 - Ubuntu 12.10 AMD64
Fujitsu-Siemens Amilo EL - Lubuntu 12.04 i686
Manjaro, une rolling pour débutants

Hors ligne

#2 Le 23/10/2006, à 23:00

snapshot

Re : script pour arrêter Esd et lancer une appli...

c'est normal que ça bloque si esd était déjà killé : le && lance la deuxième commande que si la première a réussi.
Pour lancer de façon inconditionnelle, il faut remplacer && par ; ou le mettre sur une autre ligne !

Pour faire ce que tu veux, il y a la méthode fine et délicate (on vérifie la présence d'esd) ou la méthode bourrin, non moins efficace (on kill, et on ignore l'erreur).

Pour la méthode bourrin, c'est :

#!/bin/sh

killall esd 2>/dev/null
/usr/local/bin/tmw
esd -nobeeps &

Je ne suis on ne peut plus d'accord avec toi : c'est c.... ces problèmes d'ESD et de port son unique ! et les beeps d'esd quand ils démarrent sont... no comment ! big_smile bref, plutot que de faire un daemon comme tu le proposes pour régler ces problèmes récurents, la fonction DMIX d'Alsa semble plus prometeuse... Mais je n'ai pas essayé !

Dernière modification par snapshot (Le 23/10/2006, à 23:01)


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#3 Le 24/10/2006, à 00:38

loubrix

Re : script pour arrêter Esd et lancer une appli...

merci pour cette astuce big_smile
le fait que tu aies mis "esd -nobeeps &" sur la ligne après "/usr/local/bin/tmw", ça va lancer esd quand tmw rendra la main, c'est bien ça?

il y a la méthode fine et délicate (on vérifie la présence d'esd)

et pour la méthode délicate, c'est comment?
j'ai voulu me plonger dans "man bash", mais je trouve rien qui correspond pour tester si un éxécutable est utilisé, pas plus que dans le tuto du wiki.

la fonction DMIX d'Alsa semble plus prometeuse...

oui mais ma carte son aime pas trop, par contre ton lien parle de esddsp, et c'est une autre solution.
il faut dire que j'aime bien le système du serveur de sons, car ça permet d'avoir une lecture de sons multiples même avec une vieille carte peu performante; le seul truc est qu'il faut en améliorer la compatibilité.


Asus X50VL - Ubuntu 12.04 AMD64
HP G62 - Ubuntu 12.10 AMD64
Fujitsu-Siemens Amilo EL - Lubuntu 12.04 i686
Manjaro, une rolling pour débutants

Hors ligne

#4 Le 24/10/2006, à 01:30

Ban

Re : script pour arrêter Esd et lancer une appli...

Salut ! j'ai pas pu résister, je me suis amusé à coder un petit script :

#!/bin/sh

ESD="esd -terminate -nobeeps -as 1 -spawnfd 19"

if [ "$(ps x | grep -m1 esd)" ]; then
	killall esd
	$@
	$ESD &
else
	$@
	$ESD &
fi

pour lancer un jeu est qu'ESD se tue avant et reparte après, il suffit de faire :

nomduscript nomdujeu [optionsdujeu]

Si ESD tourne, le script le tue, lace la comande spécifié, puis relance ESD, et si ESD ne tourne pas, le script lance la commande, puis lance ESD.

Voilà !
++ !

PS : si tu veux que je t'explique le script, va-y, demande wink Perso, j'aime pas ne pas comprendre, alors peut-être ?
Sinon, tu peux jeter un oeil sur les man wink

Dernière modification par Ban (Le 24/10/2006, à 01:36)


La littérature est un luxe, la fiction une nécessité. - Chesterton

Hors ligne

#5 Le 24/10/2006, à 09:56

snapshot

Re : script pour arrêter Esd et lancer une appli...

merci à ban pour avoir donné la "méthode fine et délicate" smile

Je me permet d'ajouter une petite amélioration :

if [ "$(ps x | grep -m1 esd | grep -v grep)" ]; then

car sinon, "ps x | grep -m1 esd" s'auto-detectera car esd se trouve dans sa ligne de commande. En ajoutant "grep -v grep" on se débarrase de cette ligne parasite !

@ban: ça sert à quoi "-spawnfd 19" ??? je ne le vois pas dans la page man !

PS: moi aussi j'adore le shell ! c'est le meilleur jeu sous linux lol


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#6 Le 24/10/2006, à 15:00

Ban

Re : script pour arrêter Esd et lancer une appli...

snapshot a écrit :

merci à ban pour avoir donné la "méthode fine et délicate" smile

Je me permet d'ajouter une petite amélioration :

if [ "$(ps x | grep -m1 esd | grep -v grep)" ]; then

car sinon, "ps x | grep -m1 esd" s'auto-detectera car esd se trouve dans sa ligne de commande. En ajoutant "grep -v grep" on se débarrase de cette ligne parasite !

@ban: ça sert à quoi "-spawnfd 19" ??? je ne le vois pas dans la page man !

PS: moi aussi j'adore le shell ! c'est le meilleur jeu sous linux lol

Bah, de rien, je me suis amusé tongue

Par contre, je m'en veux à mort, là... j'avais bien appliqué la méthode de virer grep, mais après de nombreuses améliorations (:rolleyes:)($@ par ex), je me suis dit (bêtement) : mais ça sert à quoi d'avoir 2 pipes ??? J'en vire un. big_smile
Bon, j'ai eu tord, c'est certain hmm

Bah, je sais pas à quoi sert le "-spawnfd 19", j'ai simplement copié la ligne qui lance ESD chez moi... cf ps x | grep -m1 esd | grep -v grep neutral

...Kenavo !


=================

Par contre, pour ce qui est de l'utilisation du script, je me demande si le else est bien fait... Faut-il relancer ESD s'il n'est pas lancé lors du démarrage du jeu ??

Et revoilà donc le script, avec l'aimable rectification de snapshot smile :

#!/bin/sh

ESD="esd -terminate -nobeeps -as 1 -spawnfd 19"

if [ "$(ps x | grep -m1 esd | grep -v grep)" ]; then
    killall esd
    $@
    $ESD &
else
    $@
    $ESD &
fi

voilà smile

Dernière modification par Ban (Le 24/10/2006, à 15:05)


La littérature est un luxe, la fiction une nécessité. - Chesterton

Hors ligne

#7 Le 25/10/2006, à 01:26

loubrix

Re : script pour arrêter Esd et lancer une appli...

OK, donc on se sert tout simplement de ps pour détecter la présence de esd...
j'ai fouiné un peu de mon côté, et j'avais pensé le faire comme ça:

#!/bin/sh

ESD="esd -nobeeps"

if [ -S /tmp/.esd-1000/socket ]; then
            killall esd
            $@ &&
            $ESD &
   else
            $@ &&
            $ESD &
fi

donc la je me suis servi de la fonction test du shell, sur le socket d'esd (présent uniquement quand il tourne); qu'en pensez vous?

si tu veux que je t'explique le script, va-y, demande wink Perso, j'aime pas ne pas comprendre, alors peut-être ?
Sinon, tu peux jeter un oeil sur les man

c'est ce que j'ai fait... wink
je trouvais pas "$@" mais j'ais supposé que cette variable représentait la commande qui vient après le script; par contre j'ai ajouté "&&" pour être sûr qu'esd se relance seulement une fois que $@ est terminé: j'ai bon ou pas?

Bah, je sais pas à quoi sert le "-spawnfd 19",

pas trouvé non plus; en rapport avec nice peut-être...

Par contre, pour ce qui est de l'utilisation du script, je me demande si le else est bien fait... Faut-il relancer ESD s'il n'est pas lancé lors du démarrage du jeu ??

surtout que avec les options de esd (-terminate -as 1), il sera toujours arrêté; d'ailleurs je les ai enlevé lol
merci pour tout Ban et Snapshot


Asus X50VL - Ubuntu 12.04 AMD64
HP G62 - Ubuntu 12.10 AMD64
Fujitsu-Siemens Amilo EL - Lubuntu 12.04 i686
Manjaro, une rolling pour débutants

Hors ligne

#8 Le 25/10/2006, à 02:03

Ban

Re : script pour arrêter Esd et lancer une appli...

Salut !

Vite fait car je me lève tôt (je devrais déjà dormir roll) :

$@ représente tous les arguments de la commande excepté la commande elle-même.
par ex, si tu lance

script doom3 -jesaispasquoi

, $@ contiendra "doom3 -jesaispasquoi".

Le && n'est assuremment pas utile, car le script agis exactement comme la ligne de commande : chaque instruction est executée et finalisée avant de passer à la suivante. (sauf si & est spécifié)
De plus "&&" veut dire "si le programme s'est terminé correctement"(code de retours 0), c'est à dire que s'il plante, la suite ne serai pas executée. Pr contre, vu qu'il n'y a rien sur la même, ligne, ça ne sert à rien wink
Par opposition, "||" veut dire "si le programme a eu une erreur"(code de retour non 0).


Pour le socket, je ne sais pas... Ça me semble moins sur, mais bon ^^
Pour le -terminate, ben j'ai pas regardé les options en fait big_smile J'ai simplement copié ^^ Donc... hmm


Enfin, voilàvoilà... Bonne nuit !


La littérature est un luxe, la fiction une nécessité. - Chesterton

Hors ligne