#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 ! 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
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 Perso, j'aime pas ne pas comprendre, alors peut-être ?
Sinon, tu peux jeter un oeil sur les man
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"
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
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...
merci à ban pour avoir donné la "méthode fine et délicate"
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
Bah, de rien, je me suis amusé
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.
Bon, j'ai eu tord, c'est certain
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
...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 :
#!/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à
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...
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é
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 ) :
$@ 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
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 J'ai simplement copié ^^ Donc...
Enfin, voilàvoilà... Bonne nuit !
La littérature est un luxe, la fiction une nécessité. - Chesterton
Hors ligne