gratifiant > linux.debian.user.french

Daniel Caillibaud (16/05/2018, 09h40)
Bonjour,

J'ai comme application au démarrage de ma session un script qui monte
localement un container chiffré (avec demande de passphrase en console), ça
fonctionne bien mais j'arrive pas à enchaîner une autre commande.

Autrement dit, en mettant dans applications au démarrage / monTrucPerso la
commande "commande1 && commande2" commande2 n'est jamais exécutéemême si
commande1 sort correctement.

Y'a un moyen de contourner ça ?

La commande est :
gnome-terminal --command=monScript && autreProgramme

(et ça marche pas en mettant le lancement de autreProgramme à la fin de
monScript, je suppose pour des pbs de display, pas creusé car ça me semble
un peu idiot sur le principe, monScript devant rester indépendant il
faudrait un monScriptPlusAutreProgramme juste pour enchaîner deux commandes)
Gaëtan Perrier (16/05/2018, 13h40)
Le mercredi 16 mai 2018 à 09:38 +0200, Daniel Caillibaud a écrit :
> La commande est :
> gnome-terminal --command=monScript && autreProgramme


Et en mettant

gnome-terminal --command="monScript && autreProgramme"

ou

gnome-terminal --command='monScript && autreProgramme'
Daniel Caillibaud (16/05/2018, 18h30)
Le 16/05/18 à 13:34, Gaëtan Perrier <gaetan.perrier> a écrit :

GP> Le mercredi 16 mai 2018 à 09:38 +0200, Daniel Caillibaud a écrit :
GP> >
GP> > La commande est :
GP> > gnome-terminal --command=monScript && autreProgramme
GP> >
GP>
GP> Et en mettant
GP>
GP> gnome-terminal --command="monScript && autreProgramme"

J'ai quand même testé, mais je vois pas vraiment comment ça aurait pu
marcher (autreProgramme n'est pas un script mais un logiciel ayant besoin
de son environnement graphique).

J'ai essayé avec --execute sans quoting, et sans succès?

Je suis avec cinnamon. Faut écrire deux services systemd pour un truc aussi
basique ?
Étienne Mollier (17/05/2018, 21h00)
Bonsoir,

Daniel Caillibaud, le 2018-05-06 :
> Autrement dit, en mettant dans applications au démarrage /
> monTrucPerso la commande "commande1 && commande2" commande2
> n'est jamais exécutée même si commande1 sort correctement.


Présenté comme ça, en temps normal, la "commande2" devrait être
exécutée dès l'instant où la "commande1" envoie un code de
retour nul.

Certains programme peuvent renvoyer des codes non nuls sans pour
autant être en erreur, pour signifier un résultat intéressant.
Typiquement "diff" renvoie 0 quand deux fichiers sont
identiques, et 1 quand ils sont différents ; pourtant il n'y a
pas eu d'erreurs particulières.

> Y'a un moyen de contourner ça ?


En utilisant le séparateur inconditionnel ";" au lieu d'utiliser
"&&", il y a un moyen, oui. Mais peut-être que vous vous voulez
tout de même exécuter commande2 sous certaines conditions,
dépendantes du bon déroulement de commande1. Vous aviez parlé
de login...

> La commande est :
> gnome-terminal --command=monScript && autreProgramme


Il faudrait vérifier le code de retour de la première commande.
En considérant que vous vouliez bien avoir la correspondance
suivante :

command1 := gnome-terminal --command=monScript
command2 := autreProgramme

Vous pouvez lancer la commande suivante au besoin, pour obtenir
ce code d'erreur :

gnome-terminal --command=monScript ; echo "exit code $?"

Est-ce que ça vous ouvre des pistes ?

À plus,
Jean Bernon (18/05/2018, 13h40)
Pas sûr de bien comprendre ce que tu veux faire. Mais si tu veux lancer deux applications au démarrage ou même deux scripts tu peux lesconfigurer dans ~/.config/autostart/.

----- Mail original -----
[..]
Daniel Caillibaud (18/05/2018, 19h00)
Le 17/05/18 à 20:58, Étienne Mollier <etienne.mollier>a écrit :
> Présenté comme ça, en temps normal, la "commande2" devraitêtre
> exécutée dès l'instant où la "commande1" envoie un code de
> retour nul.


Oui, mais quand c'est dans du `Exec` d'un ~/.config/autostart/truc.desktop
ça marche pas, en tout cas avec cinnamon.

> En utilisant le séparateur inconditionnel ";" au lieu d'utiliser
> "&&", il y a un moyen, oui. Mais peut-être que vous vous voulez
> tout de même exécuter commande2 sous certaines conditions,
> dépendantes du bon déroulement de commande1. Vous aviez parlé
> de login...


Oui, le 1er script monte un container chiffré si on saisi la bonne
passphrase, et ensuite si c'est passé je veux lancer autre chose qui va
lire un truc dans ce container déchiffré.

> Il faudrait vérifier le code de retour de la première commande.


> Est-ce que ça vous ouvre des pistes ?


Ça confirme que le && ne fonctionne pas dans un autostart.

En console si je lance ma commande complète ça fonctionne bien, la première
commande sort bien avec un $? valant 0

pour tester, se créer par ex
1) dans /home/bin/test.sh

#!/bin/bash
echo "$0 OK"
sleep 2

2) un .config/autostart/test.desktop avec

[Desktop Entry]
Type=Application
Exec=xterm -e /home/bin/test.sh && xterm -e /home/bin/test.sh
X-GNOME-Autostart-enabled=true
NoDisplay=false
Hidden=false
Name[fr_FR]=test autostart
Comment[fr_FR]=
X-GNOME-Autostart-Delay=0

idem avec

Exec=gnome-terminal --command=/home/bin/test.sh && gnome-terminal
--command=/home/bin/test.sh
Étienne Mollier (18/05/2018, 19h20)
Bonsoir,

On 05/18/2018 06:56 PM, Daniel Caillibaud wrote:
> Le 17/05/18 à 20:58, Étienne Mollier <etienne.mollier> a écrit :
> Oui, mais quand c'est dans du `Exec` d'un
> ~/.config/autostart/truc.desktop ça marche pas, en tout cas
> avec cinnamon.


Ah ok, en dehors du contexte d'un shell, il n'est possible de
spécifier que des commandes et leurs arguments. Mais il n'est
pas possible d'utiliser directement les commandes intégrées d'un
shell comme "&&" ou plus généralement "if", "while", etc.

Il devrait être possible de contourner ça en lançant ledit shell
manuellement :

Exec=sh -c "gnome-terminal --command=monScript && autreProgramme"

Est-ce qu'il y a du mieux comme ceci ?

À plus,
Daniel Caillibaud (29/05/2018, 16h50)
re,

Désolé pour le délai de réponse

Le 18/05/18 à 19:18, Étienne Mollier <etienne.mollier>a écrit :
> Ah ok, en dehors du contexte d'un shell, il n'est possible de
> spécifier que des commandes et leurs arguments. Mais il n'est
> pas possible d'utiliser directement les commandes intégrées d'un
> shell comme "&&" ou plus généralement "if", "while", etc.


Logique, j'aurais dû me douter que l'entrée "commande" des applications au
démarrage n'était pas lancée par un shell.

> Il devrait être possible de contourner ça en lançant leditshell
> manuellement :
> Exec=sh -c "gnome-terminal --command=monScript && autreProgramme"
> Est-ce qu'il y a du mieux comme ceci ?


J'y croyais, mais non, ça n'a pas voulu, j'avais dans mon fichier (dans ~/.config/autostart)

Exec=sh -c "gnome-terminal --command='sudo /path/to/script.sh' && /usr/bin/keepassxc /path/to/passlist.kdbx"

Le script est bien lancé en sudo, sort avec un code 0 mais ça lance pas
keepassxc :-(

J'ai finalement crée un 2e scrip, ça donne dans l'autostart

Exec=/path/to/scriptChained.sh

et dans ce script

if sudo /path/to/script.sh
then
nohup /usr/bin/keepassxc /path/to/passlist.kdbx > /dev/null &
else
echo "mount KO => keypass pas lancé :-/"
fi

et ça marche enfin?

Merci à tous ceux qui ont donné des pistes
Daniel Caillibaud (30/05/2018, 13h30)
Le 29/05/18 à 16:44, Daniel Caillibaud <ml> a écrit :
DC> J'ai finalement crée un 2e scrip, ça donne dans l'autostart
DC>
DC> Exec=/path/to/scriptChained.sh
DC>
DC> et dans ce script
DC>
DC> if sudo /path/to/script.sh
DC> then
DC> nohup /usr/bin/keepassxc /path/to/passlist.kdbx > /dev/null &
DC> else
DC> echo "mount KO => keypass pas lancé :-/"
DC> fi
DC>
DC> et ça marche enfin?

Ça a fonctionné quand je l'ai testé, mais pas ce matin :-/
Je lâche l'affaire? (et fait un clic de plus à chaque boot pour lancer
keepassxc manuellement après montage)
Discussions similaires