如何从 sudo 脚本获取 $DESKTOP_SESSION?

如何从 sudo 脚本获取 $DESKTOP_SESSION?

以下示例脚本在使用 sudo 执行时无法获取桌面环境 (DE)。如何使用使用 sudo 执行的 bash 脚本获取 DE?

#!/bin/bash
echo $DESKTOP_SESSION 
echo $XDG_SESSION_DESKTOP 
echo $XDG_CURRENT_DESKTOP 
echo $SESSION
echo $MDMSESSION 
echo $GDMSESSION

在 Xubuntu 和 Mate 上测试,返回的是空。

user:~$ sudo bash '/path/sample.sh' 






user:~$ bash '/path/sample.sh' 
mate
mate
MATE


mate
user:~$ 

答案1

您需要将-E选项传递给sudo

-E,--保留-环境

向安全策略表明用户希望保留其现有的环境变量。如果用户没有保留环境的权限,安全策略可能会返回错误。

- 参见man sudo(或在线的)。

并运行你的脚本

sudo -E '/path/sample.sh' 

答案2

顺便说一句,在 2021 年,你只想使用官方的$XDG_CURRENT_DESKTOP。请注意,这是一个冒号分隔列表(例如$PATH),因此不要假设它只包含单个值(即使在大多数 DE 中都是如此)。如果您更喜欢处理单个值,请使用$XDG_SESSION_DESKTOP

官方标准:

有关更多详细信息,包括用于解析和测试桌面环境的 bash 函数,请参阅https://unix.stackexchange.com/a/645761/4919

相关内容