Gnome 3.22 utilise wayland par défaut. Gnome sur wayland ne lit pas ~/.profile
(ou ~/.bash_profile
ou /etc/profile
). Voir https://bugzilla.gnome.org/show_bug.cgi?id=736660 .
J'ai mes fichiers d'initialisation configurés comme suit:
.bash_profile
ne fait que source.profile
et.bashrc
.profile
ne définit que les variables d'environnement commePATH
etLC_MESSAGES
.bashrc
définit certains paramètres et alias spécifiques à bash et des variables d'environnement pour des applications telles queless
etgrep
.
L'effet (avant Wayland) était le suivant:
- lorsque je me connecte graphiquement a
.profile
été lu et les variables d'environnement commePATH
etLC_MESSAGES
ont été définies. lorsque j'ouvre bash à l'intérieur d'un émulateur de terminal, j'ai.bashrc
été lu. - lorsque je me connecte sous un terminal virtuel, puis a
.bash_profile
été lu qui à son tour lit.profile
et.bashrc
. - lorsque je me connecte en utilisant ssh, le comportement est similaire au terminal virtuel.
Dans tous les cas .profile
et .bashrc
ont été lus et mon environnement a été mis en place.
Alors maintenant, gnome 3.22 utilise wayland et wayland ne lit pas .profile
. Comment puis-je configurer mes fichiers d'initialisation pour que je retrouve les effets décrits ci-dessus?
Notez que je n'insiste pas pour que certains fichiers (comme .profile
) soient lus. Ce que je veux, c'est que mon environnement soit configuré de manière sensée. Cela signifie que je souhaite conserver des paramètres spécifiques à bash dans les fichiers d'initialisation bash et d'autres paramètres dans d'autres fichiers d'initialisation. Je voudrais également ne pas copier les paramètres sur différents fichiers.
J'utilise arch linux. Les réponses à toutes les distributions sont les bienvenues. Lorsque vous proposez une solution de contournement, veuillez également décrire les effets secondaires ainsi que les avantages et les inconvénients.
mise à jour de novembre 2017: pour autant que je sache, les développeurs de gnome ont reconnu que les gens s'attendent à ce que leurs fichiers de configuration du shell de connexion ( .profile
et .bash_profile
en cas de bash) proviennent de la connexion. indépendamment du texte ou de la connexion graphique. donc mon cas d'utilisation décrit ci-dessus fonctionne à nouveau.
les développeurs de gnome veulent toujours s'éloigner du démarrage d'un shell de connexion. il semble que la direction qu'ils vont est d'utiliser environnementd à partir de systemd:
https://in.waw.pl/~zbyszek/blog/environmentd.html
il semble que cela prendra un certain temps avant que toutes les méthodes de connexion soient adaptées à environmentd.
C'est la solution de contournement que j'utilise pour exactement le même problème:
Étape 1
Créez un script qui source
~/.profile
et rendez ce script exécutable. Appelons ça/path/to/startup.sh
. Cela pourrait ressembler à ceci:Étape 2
Créez une application de bureau pour exécuter le script. Pour ce faire, vous devez créer un
.desktop
fichier et le placer~/.local/share/applications
(ou/usr/share/applications
si vous souhaitez qu'il fonctionne pour tous les utilisateurs). Appelons ça~/.local/share/applications/startup.desktop
. Cela pourrait ressembler à ceci:Pour plus d'informations sur les
.desktop
fichiers, voir ici .Étape 3
Se déconnecter. Reconnectez-vous. Vous devriez maintenant pouvoir rechercher votre application dans le menu des applications.
Étape 4
Définissez cette application comme application de démarrage. Pour ce faire, j'ai utilisé l'outil Gnome Tweak et ajouté mon application à la liste dans l'onglet Applications de démarrage.
Et c'est tout! Vous devriez maintenant avoir votre ancienne fonctionnalité à chaque fois que vous vous connectez. Elle préserve également la structure du fichier, donc, lorsque le bogue de Wayland est corrigé, tout ce dont vous avez besoin pour le faire, supprimez l'application de la liste des applications de démarrage, supprimez les deux fichiers et tout est revenu à la normale.
Modification ultérieure
Comme @Guss le fait remarquer dans les commentaires, cette solution de contournement n'exportera pas les variables d'environnement car elle
startup.sh
est exécutée dans son propre shell. Nous avons donc besoin d'une autre solution de contournement pour ceux-ci.En lisant la documentation GNOME, vous pouvez voir qu'il existe quelques alternatives. Le seul que j'ai pu travailler était de créer un fichier
/usr/share/gdm/env.d/
et, dans ce fichier, de placer les variables à exporter. Cependant, cela signifie que les variables seront exportées pour tous les utilisateurs, donc ce que j'ai fini par faire est le suivant:Disons que nous avons deux utilisateurs, John et Sally . Pour chacun d'eux créer un fichier dans
/usr/share/gdm/env.d/
, appelons-lesstartup_john.env
etstartup_sally.env
. Dans ces fichiers, placez les variables d'environnement à exporter au démarrage d'une nouvelle session GNOME.À ce stade, le problème est que les deux fichiers seront chargés pour les deux utilisateurs. Afin de résoudre ce problème, nous définissons l'autorisation sur chaque fichier de sorte que seul son propriétaire puisse lire son contenu.
Ce n'est pas la solution la plus élégante, je suis d'accord, mais, pour autant que j'aie testé, elle semble faire le travail.
la source
startup.sh
s'exécute dans son propre shell et n'exportera pas les variables d'environnement dans un contexte d'exécution parent. À titre d'exemple, essayez d' exécuter ce code dans votre shell:echo "a is $a"; (export a="B"); echo "a is $a"
. Selon @Tudor, la sortie du deuxième écho seraa is B
, ce qui - vous verrez quand vous exécuterez le code - n'est pas ce qui se passe.