我设计在Java中的小软件。 我不知道术语/定义,我在做什么,但我从Java提示命令到终端。 事情是这样的:
Process process = Runtime.getRuntime().exec("command");
我在Linux之前已经这样做了,我用gksudo
为所需的root密码的命令。
是否有任何gksudo
在OS X? 任何图形弹出询问root密码?
我设计在Java中的小软件。 我不知道术语/定义,我在做什么,但我从Java提示命令到终端。 事情是这样的:
Process process = Runtime.getRuntime().exec("command");
我在Linux之前已经这样做了,我用gksudo
为所需的root密码的命令。
是否有任何gksudo
在OS X? 任何图形弹出询问root密码?
您可以更矿石较少的管理与一个AppleScript shell脚本编写您自己:
#!/bin/sh
osascript -e "do shell script \"$*\" with administrator privileges"
cocoasudo
看起来更美观悦目,但是这已经部署。
这也看起来很有希望: cocoasudo
它采用OSX本地授权服务API:
对于基于Cocoa的Mac OS X程序,不存在通过授权服务API提供analagous能力须藤。 该API的使用允许你以提示请求升级权限的能力,用户的用户名和密码。
...
对于这种情况,我写了一个小工具,我已经被称为cocoasudo。 在很多使用cocoasudo你使用sudo以同样的方式。 然而,而不是提示用户输入他们在终端窗口的密码,他们会得到通过授权服务API一个对话框提示。
我发现,如果你正在运行的调用其他命令的shell脚本cocoasudo不起作用。 你将不得不使用cocoasudo在所有子命令也这将弹出一个提示为每个调用。
该osascript解决方案似乎更好地工作,但我需要调整它与涉及包含空格的路径,命令工作。
#!/bin/sh
export bar=""
for i in "$@"; do export bar="$bar '${i}'";done
osascript -e "do shell script \"$bar\" with administrator privileges"
使遵循,在这个例子中,我去创建一个文件夹在/ var /锁并设置权限为777:
String[] command = {
"osascript",
"-e",
"do shell script \"mkdir -p /var/lock && chmod 777 /var/lock\" with administrator privileges" };
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null)
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
在Linux上也许可以与gksudo做,但我没有测试它,我去测试,在这里发表后的结果。
gksudo
是的GTK +版本sudo
。
您可以使用此克隆,特别是对于它的OS X.
继ZJR的答案 ,我做了这个到Automator的,所以你可以使用它作为一个服务或什么:
on run {input, parameters}
do shell script "sudo open \"" & (POSIX path of input as string) & "\"" with administrator privileges
return input
end run
或者,也许你只是觉得他的回答是过时的,还是要一个AppleScript,只是写在脚本编辑器这个单行:
do shell script "[[your command]]" with administrator privileges
然后你就可以做成一个应用程序 ,并把它作为一个服务或什么的。
每个人都应该使用,而不是看须藤和/或图形界面给它的本地OS X授权服务。
参考:
简介授权服务编程指南(苹果)
授权服务任务(苹果)
[我知道这是一个迟到的回答...]
似乎有很多在这些答案错误的信息。 为了节省其他人一段时间,我发表我自己的调查结果:
首先,像问题的海报,我也有我需要从一个Java应用程序中提升权限的情况。
我已经分手这件事成两个脚本。 第一个脚本是由Java的一些命令行参数来执行。 第二个脚本执行需要root权限的所有步骤。 这个想法当然是使用cocoasudo在第一个脚本以root权限执行第二脚本。
我已经通过广泛的日志记录确认为单独的文件,该脚本的确做什么,我打算。 手动启动时(当然,普通用户权限)在命令行中,他们工作得很好。
当从Java应用程序启动,我得到了cocoasudo提示,但没有任何反应。 甚至会出现从第二个脚本输出不是第一个记录。
当我改变了第一个脚本使用osascript,再次确认无误后尽可能的脚本去,我甚至不得到提示,当它从内运行的Java。
这是所有的OS X山狮。 至于苹果是否建立防止脚本时的一些安全卫士正在以root权限从Java内部执行。
由于cocoasudo本身的实际运行,我倾向于认为,解决办法是类似的代码cocoasudo的东西,但在执行使用可可API调用所需的行动所有的休息。 那么这可能是代码签名也是如此。
如果您使用的是终端,那么就使用“ sudo
”,而不是,这会为用户在终端本身提示输入密码(与gksudo
我相信使用图形弹出)。 须藤适用于Linux和OS X.