les*_*ana 17 gnome environment-variables wayland profile
Gnome 3.22 默认使用 wayland。Wayland 上的 Gnome 不读取~/.profile(或~/.bash_profile或/etc/profile)。请参阅https://bugzilla.gnome.org/show_bug.cgi?id=736660。
我的初始化文件设置如下:
.bash_profile除了来源.profile和.bashrc.profile只设置环境变量,如PATH和LC_MESSAGES.bashrc为less和 等应用程序设置一些 bash 特定的设置和别名以及环境变量grep。效果(在wayland之前)如下:
.profile读取和环境变量,如PATH和LC_MESSAGES设定。当我在终端模拟器中打开 bash 时.bashrc被读取。.bash_profile被读取,然后读取.profile并.bashrc.在所有情况下.profile和.bashrc都已阅读并设置了我的环境。
所以现在gnome 3.22使用wayland而wayland不读取 .profile。如何设置我的初始化文件,以便再次获得上述效果?
请注意,我不坚持某些文件(例如 .profile读取)。我想要的是以合理的方式设置我的环境。这意味着我想将 bash 特定设置保留在 bash 初始化文件中,并将其他设置保留在其他初始化文件中。另外,我不想将设置复制到不同的文件中。
我用的是arch linux。欢迎所有发行版的答案。在建议解决方法时,请同时描述副作用和优缺点。
更新2017年11月:据我了解GNOME开发者都承认,人们期待他们的登录shell的配置文件(.profile并.bash_profile在bash的情况下)在登录后采购。无论是文本登录还是图形登录。所以我上面概述的用例再次起作用。
gnome 开发人员仍然希望摆脱启动登录 shell。他们的方向似乎是使用来自 systemd 的环境:
https://in.waw.pl/~zbyszek/blog/environmentd.html
似乎需要一段时间才能使所有登录方法适应环境。
Jac*_*nor 10
Systemd 版本 233(2017 年 3 月)添加了对在~/.config/environment.d/*.conf. 见该environment.d男子页,并导致对功能的讨论这个初步PR和这最后一个。
这是我用于完全相同问题的解决方法:
创建一个脚本以获取源代码~/.profile并使该脚本可执行。让我们称之为/path/to/startup.sh。它可能看起来像这样:
#!/bin/bash
. ~/.profile
Run Code Online (Sandbox Code Playgroud)
创建一个桌面应用程序来运行脚本。为此,您需要创建一个.desktop文件并将其放入~/.local/share/applications(或者/usr/share/applications如果您希望它适用于所有用户)。让我们称之为~/.local/share/applications/startup.desktop。它可能看起来像这样:
[Desktop Entry]
Name=Startup
Keywords=startup
Exec=/path/to/startup.sh
Type=Application
Run Code Online (Sandbox Code Playgroud)
有关.desktop文件的更多信息,请参见此处。
登出。重新登录。您现在应该可以在应用程序菜单中搜索您的应用程序。
将此应用程序设置为启动应用程序。为此,我使用了 Gnome Tweak Tool 并将我的应用程序添加到 Startup Applications 选项卡的列表中。
就是这样!现在,无论何时登录,您都应该恢复旧功能。它还完整地保留了文件结构,因此,当 Wayland 中的错误得到修复时,您只需将应用程序从启动应用程序列表中删除,删除这两个文件一切都恢复正常。
正如@Guss 在评论中指出的那样,此解决方法不会导出环境变量,因为startup.sh它在自己的 shell 中运行。所以我们需要另一种解决方法。
从GNOME 文档中您可以看到有一些替代方案。我唯一可以开始工作的是在其中创建一个文件,/usr/share/gdm/env.d/然后在该文件中放置要导出的变量。但是,这意味着将为所有用户导出变量,所以我最终做的是:
假设我们有两个用户,john和sally。对于他们中的每个人,在 中创建一个文件/usr/share/gdm/env.d/,让我们称他们为startup_john.env和startup_sally.env。在这些文件中放置要在启动新 GNOME 会话时导出的环境变量。
$ cat startup_john.env
VAR=1
$ cat startup_sally.env
VAR=2
Run Code Online (Sandbox Code Playgroud)
此时的问题是两个文件都将为两个用户加载。为了解决这个问题,我们对每个文件设置了权限,以便只有其所有者可以读取其内容。
$ ls -l startup_john.env
-rw-r-----. 1 john john 4 Dec 27 15:17 startup_john.env
$ ls -l startup_sally.env
-rw-r-----. 1 sally sally 4 Dec 27 15:16 startup_sally.env
Run Code Online (Sandbox Code Playgroud)
不是最优雅的解决方案,我同意,但是,据我测试,它似乎完成了工作。