当 gnome-sessions 重新启动时,为所有 tmux shell 设置环境变量

当 gnome-sessions 重新启动时,为所有 tmux shell 设置环境变量

解决这个问题,每次重新启动 gnome 时,我都需要DBUS_SESSION_BUS_ADDRESS为所有 shell设置环境变量,而不需要重新启动 tmux(这种情况很常见)。tmux我怎样才能最好地解决这个问题?

还有另一种方法可以更干净地解决这个问题吗?

答案1

在这种特定情况下,不要让 Gnome 运行dbus-launch来创建随机 D-Bus 地址,而是dbus-daemon在 X 会话启动早期显式启动并给它一个固定地址,例如unix:path=~/.dbus-$HOSTNAME-$DISPLAY.

鉴于中的信息错误报告,您甚至可以摆脱unset DBUS_SESSION_BUS_ADDRESS并让应用程序从根窗口属性中找出总线地址。

在一般情况下,您的评估是正确的:您所拥有的只是不可靠的方法,例如ptrace(可能会导致程序崩溃,或者由于 Apparmor 或 SELinux 等安全框架而无法工作)或注入 shell 命令(仅在窗格中有效)当前处于 shell 提示符下)。在每个 shell 提示符下运行命令(使用 zshpreexec或 bash PROMPT_COMMAND)至少不会有破坏东西的风险。

另一个解决方案是一个LD_PRELOAD拦截getenv调用的库。这也让人感觉有点矫枉过正。

最好的选择是让应用程序通过创建间接级别来完成工作:安排环境变量的值保持有效,并让应用程序以情境感知的方式解释它。让应用程序在根窗口属性中查找 D-Bus 总线地址就是这种方法的一个示例。

相关内容