Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

.bachrc non lu lors d'une connexion via gnome

20 réponses
Avatar
Francois Lafont
Bonjour à tous,

Je suis sous Ubuntu 10.04 et mon shell est le bash. Dans mon fichier
~/.profile, j'ai ceci :

#--------------
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
#--------------

Autrement dit, je pensais (à tort) que mon ~/.bashrc était
systématiquement «inclus» dans le ~/.profile. Or, ce n'est pas
exactement le cas :

1) Quand je me connecte au système via un terminal, l'inclusion est bien
effectuée car j'ai BASH_VERSION qui est effectivement non vide.

2) Mais quand je me connecte au système via l'interface graphique
(gnome), alors là j'ai pu constater que BASH_VERSION version était vide
et donc que l'inclusion du ~/.bahrc ne se faisait pas.

Je ne comprends pas trop le cas 2), alors que mon shell par défaut est
bien le bash comme en témoigne ceci :

#--------------
$ cat /etc/passwd | grep francois
francois:x:1000:1000:francois,,,:/home/francois:/bin/bash
#--------------

Avez-vous une explication ? Cela me gêne un peu car j'ai des modifs dans
~/.bashrc que j'aimerais bien laisser dans ce fichier et qui du coup ne
prennent pas effet dès que je me connecte via gnome.

Merci d'avance pour votre aide.


--
François Lafont

10 réponses

1 2
Avatar
Benoit Izac
Bonjour,

le 13/11/2010 à 23:54, Francois Lafont a écrit dans le message
<4cdf172b$0$2175$ :

J'ai oublié de répondre sur ce point ; le plus simple c'est de
modifier/créer ~/.xsession pour y mettre :

#!/bin/bash
. ~/.bashrc
exec gnome-session



Je viens de faire le test, j'ai mis le fichier en chmod 777, mais ça n'a
pas eu d'effet. J'ai mis la commande "echo Chargé >> ~/Bureau/out.txt"
en première ligne du fichier ~/.bashrc et ouvrant une session via gdm,
pas de fichier out.txt créé sur mon Bureau.



J'ai une machine avec gdm et je peux lire dans /etc/gdm/Xsession :

#!/bin/sh
[...]
command="$@"
[...]
if [ "x$command" = "xcustom" ] ; then
if [ -x "$HOME/.xsession" ]; then
command="$HOME/.xsession"
else
echo "$0: Cannot find ~/.xsession will try the default session"
command="default"
fi
fi
[...]
eval exec $command

Il faut donc que tu choisisses dans le menu de gdm la session custom (je
pense que ça doit être « personnalisée » en français) à la place de
gnome.

--
Benoit Izac
Avatar
Francois Lafont
Le 14/11/2010 02:15, Nicolas George a écrit :

« Shell par défaut », ça n'existe pas en vocabulaire Unix.



Ok, j'en prends bonne note.


J'ai du mal à comprendre comment des
programmes puissent être exécutés sans qu'il y ait un shell au départ
responsable de cette exécution.



Un programme peut toujours être invoqué par l'appel direct de la fonction
système de bas niveau.



J'avoue ne pas trop voir de quoi s'il s'agit mais ce n'est pas très grave.

Utiliser un shell n'est qu'une commodité, pour
pouvoir utiliser des notations un peu plus compactes et versatiles, comme le
développement de variables d'environnement.



Ok. Merci.


--
François Lafont
Avatar
Lucas Levrel
Le 13 novembre 2010, Nicolas George a écrit :

- .zshenv et /etc/zsh/zshenv sont sourcés systématiquement, et servent
normalement pour l'initialisation de l'environnement (PATH, umask, etc.) ;

- .zprofile et /etc/zsh/zprofile sont sourcés pour tous les shells de
login ;



Qu'est-ce qui a sa place dans zprofile et pas dans zshenv, par exemple ?

--
LL
Avatar
Lucas Levrel
Le 14 novembre 2010, Francois Lafont a écrit :

Le 14/11/2010 02:15, Nicolas George a écrit :
Un programme peut toujours être invoqué par l'appel direct de la fonction
système de bas niveau.



J'avoue ne pas trop voir de quoi s'il s'agit mais ce n'est pas très grave.



Je suppose que, par exemple, exec() en C permet d'exécuter un binaire sans
lancer de shell...

--
LL
Avatar
Nicolas George
Lucas Levrel , dans le message
, a écrit :
Qu'est-ce qui a sa place dans zprofile et pas dans zshenv, par exemple ?



Un rappel de tes rendez-vous du jour, une citation rigolote, le
récapitulatif des nouveaux mails, etc.
Avatar
Francois Lafont
Le 15/11/2010 12:19, Lucas Levrel a écrit :

Un programme peut toujours être invoqué par l'appel direct de la
fonction
système de bas niveau.



J'avoue ne pas trop voir de quoi s'il s'agit mais ce n'est pas très
grave.



Je suppose que, par exemple, exec() en C permet d'exécuter un binaire
sans lancer de shell...




Ok, mais ce programme (dont le code contient exec()), il faut bien qu'il
soit appelé par un shell genre :

# /bin/mon_programme_c

Non ?


--
François Lafont
Avatar
Nicolas George
Francois Lafont , dans le message
<4ce17150$0$1079$, a écrit :
Ok, mais ce programme (dont le code contient exec()), il faut bien qu'il
soit appelé par un shell genre :



Pourquoi ?
Avatar
Francois Lafont
Le 15/11/2010 18:47, Nicolas George a écrit :

Pourquoi ?



Bonne question. :-)
C'est parce que, lorsque je (moi l'utilisateur) lance un exécutable, je
ne vois que 2 manières de le faire :

- soit je clique sur un bouton d'une interface graphique
- soit je lance l'exécution via un shell

En fait, et c'est ce qui me perturbe, je voyais l'interface graphique
(gdm et Gnome) comme une "sur-couche" de mon shell de login (un peu
comme Windows 98 et le dos :-)), et donc le shell était dans mon esprit
le point de départ de toute exécution que je lance. En gros Gnome était
(dans mon esprit) un processus enfant de mon shell de login. Mais ce
n'est pas le cas comme tu me l'as dit et du coup j'ai du mal à
comprendre comment ça fonctionne. Mais ce n'est pas grave, j'essayerai
de regarder de la doc sur les étages du démarrage de Linux.


--
François Lafont
Avatar
Nicolas George
Francois Lafont , dans le message
<4ce1760d$0$868$, a écrit :
- soit je clique sur un bouton d'une interface graphique



Et l'interface graphique n'a pas _besoin_ d'invoquer un shell ici : elle
connaît le binaire sur lequel tu cliques. Si elle invoque un shell, c'est
par commodité, en particulier pour permettre à l'utilisateur de saisir une
ligne de commande avec des options.
Avatar
Francois Lafont
Le 15/11/2010 19:08, Nicolas George a écrit :

- soit je clique sur un bouton d'une interface graphique



Et l'interface graphique n'a pas _besoin_ d'invoquer un shell ici : elle
connaît le binaire sur lequel tu cliques. Si elle invoque un shell, c'est
par commodité, en particulier pour permettre à l'utilisateur de saisir une
ligne de commande avec des options.



Ok je vois ce que tu veux dire. Merci beaucoup pour tes explications.


--
François Lafont
1 2