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 09/04/2013, à 22:32

la-dread

Variables d'envirronnement dans .bashrc et scripts

Bonjour à tous,

après quelques recherches je n'ai pas trouvé d'explications claires sur mon problème :
J'ai compilé un logiciel maison qui utilise des bibliothèques dynamiques.
Pour que le programme puisse aller chercher ces bibliothèques j'ai ajouté le chemin vers ces dernières dans mon .bashrc via :

# Ajout du chemin de mes librairies partagées à la variable d'environnement
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:mon/chemin
# Export de la variable d'environnement
export $LD_LIBRARY_PATH

Ensuite je lance le logiciel via un terminal et tout va bien.
Pour partager ce logiciel avec des personnes qu'un terminal rebute encore, j'ai voulu créer un lanceur sur le bureau pour ce programme via

gnome-desktop-item-edit ~/Desktop/ --create-new

En indiquant comme commande pour le lanceur

chemin/vers/mon/programme/monProgramme

Le lanceur se créé et quand je double clique dessus, le logiciel se lance mais rencontre des problèmes dus aux librairies dynamiques.
Après avoir cherché de mon côté, je me suis rendu compte que la variable d'environnement définie dans mon .bashrc n'était pas prise en compte lors de l'ouverture d'une application par un lanceur.
Par curiosité j'ai créé un script qui fait un

env | grep -e LD_LIBRARY

et je me suis rendu compte que lorsque on exécute le script en double cliquant dessus, puis sur "lancer dans un terminal", la variable LD_LIBRARY_PATH n'est pas définie.
D'où ma question : comment faire pour lancer un script en double cliquant dessus (ou en créant un lanceur) tout en conservant les variables d'environnement que j'ai défini dans mon bashrc ?

Merci pour vos réponses.

Dernière modification par la-dread (Le 09/04/2013, à 22:34)

Hors ligne

#2 Le 10/04/2013, à 08:46

tiramiseb

Re : Variables d'envirronnement dans .bashrc et scripts

Salut,

Le fichier .bashrc, comme son nom l'indique, est un fichier de configuration du shell Bash.
Quand tu exécutes une commande à partir d'un lanceur, ça ne passe pas par Bash (que ce soit dans un terminal ou non).

Je te propose d'ajouter un fichier que tu appelleras comme tu veux (mais qui doit finir par ".conf") dans /etc/ld.so.conf.d/ dans lequel tu mets simplement le chemin vers tes bibliothèques.
Par exemple, "/etc/ld.so.conf.d/mesbibliotheques.conf" pourrait contenir :

/opt/mes/bibliotheques

Ensuite tu exécutes la commande :

ldconfig

De cette manière, tes bibliothèques seront prises en compte dans tout le système, et donc dans ton environnement graphique.

Dernière modification par tiramiseb (Le 10/04/2013, à 08:46)

Hors ligne

#3 Le 10/04/2013, à 17:36

la-dread

Re : Variables d'envirronnement dans .bashrc et scripts

Salut,

D'abord merci pour ta réponse. Je ne connaissait pas encore l'utilité de ld.so.conf.

Quand tu exécutes une commande à partir d'un lanceur, ça ne passe pas par Bash (que ce soit dans un terminal ou non).

Saurais-tu m'expliquer ce qui se passe lorsqu'on exécute une commande à partir d'un lanceur ?

J'ai effectué les modifications en conséquence et ça a marché (quasiment).
J'ai ajouté les chemins vers les librairies dans un nouveau fichier dans /etc/ld.so.conf.d/ et en faisant un ldconfig.
J'ai recréé un lanceur vers mon programme, et c'est à partir d'ici qu'intervient le "quasiment résolu" :

  • Si j'indique à la création du lanceur qu'il sera du type "application dans un terminal" tout se passe bien, le soft marche comme sur des roulettes. Le problème (qui n'en est pas très important) c'est qu'en faisant ainsi, au lancement du programme, un terminal vide et inutilisable s'ouvre. Pour avoir quelque chose de plus propre j'aurais aimé qu'il n'y en ait pas.

  • Si j'indique par contre qu'il sera simplement du type "application" je rencontre les mêmes problèmes qu'auparavant.

As tu une idée d'où provient cette différence ?

Merci encore.

Dernière modification par la-dread (Le 10/04/2013, à 17:38)

Hors ligne

#4 Le 10/04/2013, à 17:44

tiramiseb

Re : Variables d'envirronnement dans .bashrc et scripts

Saurais-tu m'expliquer ce qui se passe lorsqu'on exécute une commande à partir d'un lanceur ?

Eh bien... la commande est exécutée, directement, pardi.
Si tu demandes d'exécuter dans un terminal, alors ça exécute le terminal en lui disant de lancer la commande.

Alors que quand tu ouvres un terminal manuellement, ça exécute le terminal en lui disant de lancer ton shell par défaut (en l'occurrence, Bash) ; et là, la configuration du shell est chargée... par le shell.

As tu une idée d'où provient cette différence ?

Alors là, aucune idée... Je ne vois pas pourquoi ça fait ça... au pif, tu as essayé de te déconnecter/reconnecter entretemps ?

Hors ligne

#5 Le 10/04/2013, à 21:21

la-dread

Re : Variables d'envirronnement dans .bashrc et scripts

Oui, j'ai essayé de déconnecter/reconnecter, de redémarrer l'ordinateur, mais sans améliorations.
Je vais continuer à chercher des infos.

tiramiseb a écrit :

Eh bien... la commande est exécutée, directement, pardi.

En effet, c'est plus que logique...
Par contre lorsqu'on crée un lanceur de type "application" vers un script que se passe t-il ?
Est ce qu'il y a un démarrage implicite d'un shell ?

J'explique ce que j'ai compris pour dire pourquoi j'ai cette question.
Un lanceur exécute une commande directement, donc grosso modo, ça dit au processeur ou se trouve la première instruction du programme en mémoire, et le processeur exécute les instructions une à une.
Les commandes sont en fait des programmes comme les autres si je ne me trompe pas, donc mine de rien on doit pouvoir faire un lanceur sur ls ou autre (bien qu'on ne voie pas les résultats).
Mais si je fais un lanceur sur un script, qui contient par exemple

echo "$SHELL" > log-shell.txt

il faut bien que ce soit exécuté dans un shell sinon la redirection ne marche pas et les variables d'environnement n'existent pas.
C'est ce qui me fait penser qu'il y a un appel à un shell.

Je ne suis pas du tout expert dans tous ce qui est shell, donc qu'en penses-tu ?

Hors ligne

#6 Le 10/04/2013, à 21:39

tiramiseb

Re : Variables d'envirronnement dans .bashrc et scripts

Par contre lorsqu'on crée un lanceur de type "application" vers un script que se passe t-il ?
Est ce qu'il y a un démarrage implicite d'un shell ?

Oui. Le shell à lancer est déterminé par le shebang : la première ligne du script, qui doit avoir la forme suivante :

#!/chemin/vers/l/executable/du/script

http://fr.wikipedia.org/wiki/Shebang

Un script en Bash commencera donc par :

#!/bin/bash

Un script en Python commencera par :

#!/usr/bin/env python

etc

Hors ligne