如何在窗口管理器内导出环境变量?

如何在窗口管理器内导出环境变量?

我可以

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 退出(例如,如果您使用xinitwhich compiz` ccp 启动 X。通常会有某种会话管理器作为控制实体。在重要的会话上尝试此操作之前,您应该先在不重要的会话上进行实验!

要明确的是,您只想替换执行启动的 DE 部分,而不是整个 DE。

答案2

通量盒可以本地执行此操作:添加命令对话框进入菜单或将按键绑定到菜单。将打开一个文本框,您可以输入命令。其中包括export FOO=BAR::

fluxbox 的 CommandDialog 实际运行

http://fluxbox.org/help/man-fluxbox-keys.php并搜索命令对话框

答案3

据我所知这是不可能的。

X 会话的环境变量以与终端环境变量相同的方式和从相同的位置读取,因此您唯一的选择是编辑~/.xsessionrc文件并重新启动 X。

通常注销并重新登录就会产生这种效果,您不一定需要重新启动整个电脑。

这个 AskUbuntu 答案了解更多详情。

相关内容