Table des matières
L'idée de base :
Concrètement, j'avais besoin d'un petit script qui me permette de lancer les logiciels que je veux, avec les sauvegardes correspondantes, pour enfin charger les connections qui vont bien. Le tout en graphique et en pas trop compliqué.Le script lance ensuite un terminal et chaque application sera lancée dans l'un de ses onglet.
Pré-requis
- Le script est fait pour fonctionner sous gnome. Il faudra l'adapter aux autres interfaces... Sinon en installant gnome-terminal ça devrait marcher- Vous aurez besoin de Zenity, un petit programme qui permet d'insérer des boites de dialogues dans un script bash
Vous trouverez un petit récapitulatif ici
- Tout les fichiers de sauvegardes d'un même logiciel devront être dans un même dossier (un dossier par soft)
- Évitez les espaces dans le chemin et les noms de fichier
Attention, ici, jack est DEJA lancé au moment de l'execution du script... mais rien n'empêche de le lancer via ce dernier.
Le script
#!/bin/sh #le chemin vers le dossier des sauvegardes the_path=/home/user/Musique #Liste des softwares softwares_list=$(zenity --width=400 --height=300 --list --text "TOOLS #!" --checklist --column "Pick" --column "among those :" FALSE "Hydrogen" FALSE "SooperLooper" FALSE "Seq24" FALSE "Phasex" FALSE "Yoshimi" FALSE "Jack-Rack" --separator=" "); #Options pour chaque soft #SOOPERLOOPER case $softwares_list in *SooperLooper*) sooper_file=$(zenity --width=500 --height=150 --entry --text "Wanna load a loop session?" `ls $the_path/Sooperlooper/*.slsess` ); sooper_launcher=(--tab -e "sooperlooper --load-session=$(printf %q "$sooper_file")") ; slgui_launcher=(--tab -e "slgui") ; ;; esac #PHASEX case $softwares_list in *Phasex*) phasex_synth=$(zenity --width=500 --height=150 --entry --text "[Phasex] Wanna load a sound?" `ls /home/tch/.phasex/user-patches/*.phx` ); phasex_launcher=(--tab -e "phasex -m 11 $(printf %q "$phasex_synth")") ; ;; esac #YOSHIMI case $softwares_list in *Yoshimi*) yoshimi_synth=$(zenity --width=500 --height=150 --entry --text "[Yoshimi] Wanna load a sound?" `ls $the_path/Yoshimi/*.xiz` ); yoshimi_launcher=(--tab -e "yoshimi -K -L $(printf %q "$yoshimi_synth")") ; ;; esac #HYDROGEN case $softwares_list in *Hydrogen*) h2_song=$(zenity --width=500 --height=150 --entry --text "[H2] Wanna load a drum track?" `ls $the_path/Hydrogen/*.h2song` ); h2_launcher=(--tab -e "hydrogen -s $(printf %q "$h2_song")") ; ;; esac #SEQ24 case $softwares_list in *Seq24*) seq24_song=$(zenity --width=500 --height=150 --entry --text "[SEQ24] Wanna load a song?" `ls $the_path/Seq24/*`); seq24_launcher=(--tab -e "seq24 --file $(printf %q "$seq24_song")") ; ;; esac #JACK-RACK case $softwares_list in *Jack-Rack*) fx_rack=$(zenity --width=500 --height=150 --entry --text "[Jack-Rack] Wanna load a song?" `ls $the_path/JackRack/*`); jackrack_launcher=(--tab -e "jack-rack $(printf %q "$fx_rack")"); ;; esac #Choix de la baie de brassage patchbay=$(zenity --width=500 --height=150 --entry --text "[QjackCTL] What connections would fit?" `ls $the_path/QJackCTL/*.xml`); #THE LAUNCHER gnome-terminal --tab -e "a2j" "${sooper_launcher[@]}" "${slgui_launcher[@]}" "${phasex_launcher[@]}" "${yoshimi_launcher[@]}" "${h2_launcher[@]}" "${seq24_launcher[@]}" "${jackrack_launcher[@]}" & #On attend avant de lancer qjackCTL sleep 10; qjackctl -a "${patchbay}"
Utilisation
Une fois les valeurs (chemin, logiciels etc...) adaptés pour votre config, il suffit de vous placer dans le répertoire où se trouve le script et de faire :
sh nomduscript
Explication
softwares_list=$(zenity --width=400 --height=300 --list --text "TOOLS #!" --checklist --column "Pick" --column "among those :" FALSE "Hydrogen");
On définit la liste des softwares à la main dans une boite case à cocher.
Il suffit de mettre FALSE/TRUE (suivant si vous voulez que le logiciel soit choisi par défaut ou non) puis le nom du logiciel entre guillemets.
#HYDROGEN 35 . case $softwares_list in *Hydrogen*) 36 . h2_song=$(zenity --width=500 --height=150 --entry --text "[H2] Wanna load a drum track?" `ls $the_path/Hydrogen/*.h2song` ); 37 . h2_launcher=(--tab -e "hydrogen -s $(printf %q "$h2_song")") ; 38 . ;; 39 . esac
Voila le gros morceau en gros voila ce qu'il se passe :
Si jamais il trouve "Hydrogen" dans la variable $softwares_list renvoyée par la fenêtre précédente.
On crée une autre variable h2_song pour accueillir le morceau à charger dans Hydrogen. Pour ce faire, on utilise une menu déroulant fournit par zenity.
Vous l'aurez remarqué, les valeurs du menu déroulant ne sont pas listées à la main, mais générée automatiquement par l’exécution d'un ls dans le répertoire où se trouve les morceaux d'hydrogen.
Enfin en crée la variable h2_launcher avec la commande pour lancer le soft dans le terminal
--tab : crée un nouvel onglet
-e : indique qu'il faut exécuter une commande
Il est possible de lancer le logiciel avec n'importe quelle option. Ici je n'utilise que "-s" qui indique le morceau à charger.
le printf %q permet de s'assurer que la variable arrive bien interprétée... mais j'en sais pas plus
gnome-terminal --tab -e "a2j" "${h2_launcher[@]}" &
Ensuite on lance le terminal avec tout ses onglets. Ici, j'ai mis "a2j" en dur, parce que je le lance tout le temps, donc il n'est pas dans la liste des options. J'aurais aussi pu le mettre dans la liste des logiciels avec un TRUE devant.
La syntaxe pour appeler la variable de lancement est importante : "${h2_launcher@}"
Mettez bien les guillemets et le @.
Le & à la fin du launcher permet de lancer une autre commande après.
sleep 10; qjackctl -a "${patchbay}"
On dis d'attendre 10 secondes (le temps que tout se lance) puis on lance qjackCTL avec la baie de brassage active qu'on aura choisi au préalable. Les connections sont ainsi restaurées...
Améliorations
Ce code pourrait sans doutes être grandement simplifié... Et on peut imaginer quelques options, comme par exemple ne lister que les XML des baies de brassages contenant les noms des logiciels qu'on aurait choisi...
N'hésitez pas à améliorer le code présent ici ou à poster des versions alternatives!
[+]