我可以
export VAR="value"
并在终端内使用 $VAR 直到我关闭它。
有没有办法在窗口管理器/图形环境中获得这种行为?导出一个环境变量供其中的所有应用程序使用,直到关闭它?
注意:我不是在问如何通过会话保留环境变量,我知道 .profile、.bash_rc、.bash_login 和其他方法。我只是想在图形环境中使用环境变量,而无需重新启动它
答案1
没有你的 WM/DE 的明确支持(我不知道有哪个支持,正如 akira 指出的那样在另一个答案中fluxbox 支持这样做。如果您使用 fluxbox,请使用该答案)您可以做几件事。
从终端启动你的程序
您可以不使用图形启动器,而是启动一个终端,在其 shell 中导出您的环境,然后使用它来启动其他应用程序。
export VAR="whatever"
nameOfGUIProgramExpectingVAR &
differentProgram &
然后终端就变成了一种永久运行框。这还有一个好处,就是可以有几个不同的启动点,每个启动点都有不同的环境来运行它们启动的程序。
通过上述方法替换你的 GUI 启动器
这可能不适用于所有桌面环境。例如,如果运行 Ubuntu 和 Unity,您可以设置环境变量并替换正在运行的启动器。我预计 gnome-panel 或 KDE 也可以这样做,但 YMMV。
export PATH=$PATH:/my/custom/path
compiz --replace ccp &
disown %1
这会在终端中的 shell 及其启动的所有程序的路径中添加一个新条目。然后,它使用“--replace”运行 compiz(Unity 的窗口管理器),这会导致旧窗口管理器退出,新窗口管理器取而代之。此disown
行使其与终端脱钩,这样就可以关闭终端而不会影响窗口管理器。现在,Unity 启动的所有程序都将具有新的 PATH。
注意:执行此操作时,您的窗口可能会发生变动,但它们仍将保持运行。所有已运行的程序仍将使用旧环境,但新程序将获得新环境。
注意:有些程序会尝试成为单例(例如 {Open,Libre}Office、firefox),如果现有实例已经存在,则运行时不会启动自己的新实例。这些程序还将继续使用旧环境,直到完全退出并重新启动。
注意:如果您的 X 会话的控制程序是窗口管理器,这可能会导致 X 退出(例如,如果您使用xinit
which compiz` ccp 启动 X。通常会有某种会话管理器作为控制实体。在重要的会话上尝试此操作之前,您应该先在不重要的会话上进行实验!
要明确的是,您只想替换执行启动的 DE 部分,而不是整个 DE。
答案2
通量盒可以本地执行此操作:添加命令对话框进入菜单或将按键绑定到菜单。将打开一个文本框,您可以输入命令。其中包括export FOO=BAR
::
答案3
据我所知这是不可能的。
X 会话的环境变量以与终端环境变量相同的方式和从相同的位置读取,因此您唯一的选择是编辑~/.xsessionrc
文件并重新启动 X。
通常注销并重新登录就会产生这种效果,您不一定需要重新启动整个电脑。
看这个 AskUbuntu 答案了解更多详情。