Java 当超级用户
如果我在Ubuntu中运行Java 当超级用户,java,linux,ubuntu,Java,Linux,Ubuntu,如果我在Ubuntu中运行echo$XDG\u CURRENT\u DESKTOP和sudo echo$XDG\u CURRENT\u DESKTOP,在这两种情况下我都会得到Unity。如果我在Java中编写System.getenv(“XDG\u CURRENT\u DESKTOP”),当我在没有超级用户权限的情况下运行程序时,它返回Unity,但当我使用sudo运行程序时,它返回null。这是怎么回事 public class GetEnv { public static
echo$XDG\u CURRENT\u DESKTOP
和sudo echo$XDG\u CURRENT\u DESKTOP
,在这两种情况下我都会得到Unity
。如果我在Java中编写System.getenv(“XDG\u CURRENT\u DESKTOP”)
,当我在没有超级用户权限的情况下运行程序时,它返回Unity
,但当我使用sudo
运行程序时,它返回null
。这是怎么回事
public class GetEnv {
public static void main(String[] args) {
System.out.println(System.getenv("XDG_CURRENT_DESKTOP"));
}
}
这是输出:
$ echo $XDG_CURRENT_DESKTOP
$ Unity
$ sudo echo $XDG_CURRENT_DESKTOP
$ Unity
$ javac GetEnv.java
$ java GetEnv
$ Unity
$ sudo java GetEnv
$ null
因为你的
sudo
是错误的
sudo echo $XDG_CURRENT_DESKTOP
将扩展到
sudo echo Unity
在以root用户身份执行之前
如果要保留运行sudo
的用户的设置,则需要定义应保留在sudo配置中的环境变量
Defaults:suboptimal env_keep += "XGD_CURRENT_DESKTOP", !requiretty
suboptimal your_host=NOPASSWD: /user/bin/java
然后您可以按如下方式运行命令:
sudo java GetEnv
它应该向您显示呼叫用户的设置。在您的情况下,
Unity
环境变量的另一个问题是没有将它们复制到超级用户的环境中(因此它们的值将为null
):
使用-E
标志执行此操作
sudo -E <command>
sudo-E
这很好,但我确信我的用户不会使用-E
参数运行程序。有没有办法从Java中解决这个问题?顺便说一下,这是一个设置程序。