Gnome 3.22 verwendet standardmäßig Wayland. Gnome auf Wayland liest nicht ~/.profile
(oder ~/.bash_profile
oder /etc/profile
). Siehe https://bugzilla.gnome.org/show_bug.cgi?id=736660 .
Ich habe meine Initialisierungsdateien wie folgt eingerichtet:
.bash_profile
tut nichts anderes als quelle.profile
und.bashrc
.profile
Setzt nur Umgebungsvariablen wiePATH
undLC_MESSAGES
.bashrc
Legt einige bash-spezifische Einstellungen sowie Aliase und Umgebungsvariablen für Anwendungen wieless
und festgrep
.
Der Effekt (vor Wayland) war folgender:
- beim einloggen wurde grafisch
.profile
gelesen und umgebungsvariablen wiePATH
undLC_MESSAGES
gesetzt. wenn ich bash in einem terminalemulator öffne wurde dann.bashrc
gelesen. - wenn ich mich unter einem virtuellen terminal anmelde
.bash_profile
wurde dann gelesen was wiederum liest.profile
und.bashrc
. - Wenn ich mich mit ssh anmelde, ähnelt das Verhalten dem des virtuellen Terminals.
In allen Fällen .profile
und .bashrc
wurden gelesen und meine Umgebung eingerichtet.
Also benutzt Gnome 3.22 Wayland und Wayland liest nicht .profile
. Wie kann ich meine Initialisierungsdateien so einrichten, dass ich wieder die oben beschriebenen Auswirkungen habe?
Beachten Sie, dass ich nicht darauf bestehe, dass bestimmte Dateien (wie .profile
) gelesen werden. Ich möchte, dass meine Umgebung auf vernünftige Weise eingerichtet wird. Das heißt, ich möchte die bash-spezifischen Einstellungen für die bash-Initialisierungsdateien und andere Einstellungen für andere Initialisierungsdateien beibehalten. Auch möchte ich die Einstellungen nicht über verschiedene Dateien kopieren.
Ich benutze Arch Linux. Antworten für alle Distributionen sind willkommen. Wenn Sie eine Problemumgehung vorschlagen, beschreiben Sie bitte auch die Nebenwirkungen sowie die Vor- und Nachteile.
Update November 2017: Soweit ich weiß, haben die Gnome-Entwickler bestätigt, dass die Benutzer erwarten, dass ihre Login-Shell-Konfigurationsdateien ( .profile
und .bash_profile
im Falle von Bash) nach dem Login bezogen werden. unabhängig von Text oder grafischer Anmeldung. Mein oben beschriebener Anwendungsfall funktioniert also wieder.
Trotzdem möchten die Gnome-Entwickler nicht mehr eine Login-Shell starten. Es scheint, dass die Richtung, in die sie gehen, darin besteht, environmentd von systemd zu verwenden:
https://in.waw.pl/~zbyszek/blog/environmentd.html
Es scheint, dass es eine Weile dauern wird, bis alle Anmeldemethoden an environmentd angepasst sind.
quelle
Dies ist die Problemumgehung, die ich für genau das gleiche Problem verwende:
Schritt 1
Erstellen Sie ein Skript, das als Quelle dient,
~/.profile
und machen Sie dieses Skript ausführbar. Nennen wir es/path/to/startup.sh
. Es könnte ungefähr so aussehen:Schritt 2
Erstellen Sie eine Desktop-Anwendung, um das Skript auszuführen. Dazu müssen Sie eine
.desktop
Datei erstellen und in diese einfügen~/.local/share/applications
(oder/usr/share/applications
wenn Sie möchten, dass sie für alle Benutzer funktioniert). Nennen wir es~/.local/share/applications/startup.desktop
. Es könnte ungefähr so aussehen:Weitere Informationen zu
.desktop
Dateien finden Sie hier .Schritt 3
Ausloggen. Melden Sie sich erneut an. Sie sollten nun in der Lage sein, im Anwendungsmenü nach Ihrer Anwendung zu suchen.
Schritt 4
Legen Sie diese Anwendung als Startanwendung fest. Dazu habe ich das Gnome Tweak Tool verwendet und meine Anwendung der Liste auf der Registerkarte Startup Applications hinzugefügt.
Und das ist es! Sie sollten jetzt Ihre alte Funktionalität wieder haben, wenn Sie sich anmelden. Sie behält auch die Dateistruktur bei. Wenn der Fehler in Wayland behoben ist, müssen Sie die Anwendung nur aus der Liste der Startanwendungen entfernen und die beiden Dateien löschen und alles ist wieder normal.
Später bearbeiten
Wie @Guss in den Kommentaren ausführt, werden bei dieser Problemumgehung keine Umgebungsvariablen exportiert, da
startup.sh
sie in einer eigenen Shell ausgeführt werden. Wir brauchen also eine andere Lösung für diese Probleme.Aus der GNOME-Dokumentation können Sie ersehen, dass es einige Alternativen gibt. Das einzige, was ich zur Arbeit bringen konnte, war, eine Datei zu erstellen
/usr/share/gdm/env.d/
und in dieser Datei die zu exportierenden Variablen abzulegen. Dies bedeutet jedoch, dass die Variablen für alle Benutzer exportiert werden. Am Ende habe ich Folgendes getan:Nehmen wir an, wir haben zwei Benutzer, John und Sally . Für jede von ihnen erstellen Sie eine Datei in
/usr/share/gdm/env.d/
, nennen wir siestartup_john.env
undstartup_sally.env
. Platzieren Sie in diesen Dateien die Umgebungsvariablen, die exportiert werden sollen, wenn Sie eine neue GNOME-Sitzung starten.Zu diesem Zeitpunkt besteht das Problem darin, dass beide Dateien für beide Benutzer geladen werden. Um dieses Problem zu lösen, setzen wir die Berechtigung für jede Datei so, dass nur der Eigentümer den Inhalt lesen kann.
Ich bin damit einverstanden, dass dies nicht die eleganteste Lösung ist, aber soweit ich es getestet habe, scheint es die Arbeit zu erledigen.
quelle
startup.sh
Programm in einer eigenen Shell ausgeführt wird und keine Umgebungsvariablen in einen übergeordneten Ausführungskontext exportiert. Als Beispiel versuchen , diesen Code in der Shell ausgeführt wird :echo "a is $a"; (export a="B"); echo "a is $a"
. Laut @Tudor wird die Ausgabe des zweiten Echos seina is B
, was - wie Sie sehen werden, wenn Sie den Code ausführen - nicht der Fall ist.