1

我正在编写一个 Java 应用程序,其中(除其他外)我将安装一个外部设备,进行一些复制,然后卸载它。

//I am mounting several devices in created dirs named sdb, sdc... according to the partitions
String[] command = {"gksu", "mount", "/dev/sd" + letter + "1", "mounter/sd" + letter};
Runtime.getRuntime().exec(command);

这在终端和我的程序中都可以正常工作。

为了更快地卸载,我考虑过使用umount -agksu umount -a在终端中不起作用,因此在 Java 程序中不起作用。sudo umount -a确实在终端中工作,但不在应用程序中。同时,我通过一个接一个地卸载设备来让它工作,但如果我能umount -a以某种方式开始工作会更干净。

如果您理解为什么 gksu 不能与 umount 或 sudo 与 Runtime.exec() 一起使用,我会接受您的解释。

谢谢

4

1 回答 1

1

我觉得问题是 sudo 不像 gksu 那样要求我输入密码。但我不知道如何给它一个密码。

很可能是这种情况。这里有几种不同的可能情况,我认为每种情况都有自己的解决方案:

  1. 运行程序的用户(在桌面应用程序的情况下)已经拥有运行您需要的命令的权限。- 提示用户输入密码并使用 -s 标志通过标准输入将其传递给 sudo。查看 sudo 手册页了解更多信息。这很简单,并确保您的应用程序没有比运行它的用户更大的访问权限。

  2. 如果您的应用程序需要以与用户不同的权限运行,或者如果它在服务器上运行,那么应用程序应该以它自己的系统用户身份运行。然后,您可以使用visudo使该系统用户能够仅运行您需要的命令而无需密码。编辑 sudoers 文件时要非常谨慎。我建议将其添加为单独的文件,并在实际的 sudoers 中链接到它,以便以后更容易撤消。

于 2014-04-29T16:29:45.570 回答