我正在用Java設計一個小軟件。我不知道我在做什麼這個術語/定義,但是我正在向Java終端提示Java命令。事情是這樣的:Mac OS X中是否有任何圖形「sudo」?
Process process = Runtime.getRuntime().exec("command");
我已經在Linux下這樣做之前,我用gksudo
爲所需的root密碼的命令。
在OS X中是否有任何gksudo
?任何圖形彈出窗口詢問root密碼?
我正在用Java設計一個小軟件。我不知道我在做什麼這個術語/定義,但是我正在向Java終端提示Java命令。事情是這樣的:Mac OS X中是否有任何圖形「sudo」?
Process process = Runtime.getRuntime().exec("command");
我已經在Linux下這樣做之前,我用gksudo
爲所需的root密碼的命令。
在OS X中是否有任何gksudo
?任何圖形彈出窗口詢問root密碼?
如果您使用的是終端,那麼只需使用「sudo
」,它將在終端本身提示輸入用戶密碼(與我相信使用圖形彈出框的gksudo
相反)。 Sudo適用於Linux和OS X.
它應該是圖形... =) – Johannes 2009-10-04 19:54:12
什麼小丑downvoted這個?當我回答這個問題時,「圖形」這個詞在問題中沒有出現。它仍然是一個有效的答案,即使它不是*完全是*原始海報問的問題 – 2013-06-09 04:11:34
這個問題顯然要求sudo的圖形版本(第4個字)。 – 2017-08-05 13:05:44
gksudo
是GTK +版本sudo
。
可以使用this clone它特別適用於OS X.
這也看起來很有希望:cocoasudo
它採用OSX本地授權服務API:
對於Mac OS X基於可可的應用程序,通過授權服務API提供的sudo功能非常強大。使用API可以提示用戶輸入用戶名和密碼,請求提升權限。
...
對於這種情況,我寫了一個小工具,我已經被稱爲cocoasudo。以和使用sudo相同的方式使用cocoasudo。但是,不是在終端窗口中提示用戶輸入密碼,而是通過授權服務API獲取對話提示。
不知何故,這對我無效:我試過'./cocoasudo systemsetup'並得到了圖形提示,但是輸入我的密碼,'systemsetup'仍然認爲我不是'sudo'ing,因爲它抱怨:'你需要管理員訪問來運行這個工具...退出!' – 2014-10-24 10:26:13
如果您正在運行調用其他命令的shell腳本,我發現cocoasudo不起作用。你將不得不在所有子命令中使用cocoasudo,這將會彈出每個調用的提示。
osascript解決方案似乎工作得更好,但我需要調整它以使用涉及包含空格的路徑的命令。
#!/bin/sh
export bar=""
for i in "[email protected]"; do export bar="$bar '${i}'";done
osascript -e "do shell script \"$bar\" with administrator privileges"
太棒了。唯一的缺點是對話框顯示「osascript想要進行更改」,這可能會讓用戶感到困惑,因爲她可能不知道osascript是什麼。 – gregschlom 2011-11-10 15:54:46
做出如下,在這個例子中,我去創建一個文件夾在/ 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做這個,但我沒有測試它,我去測試後在這裏發佈結果。
這正是我正在尋找的東西,在這個問題上花了幾個小時......謝謝你。 – antonio081014 2013-03-22 23:30:01
感謝您的解決方案,是否可以從「osascript想要進行更改」的消息中替換「osascript」? – Arash 2014-11-06 23:50:26
還有一種創建類似於根憑據的會話的方法,因此每次都不會詢問用戶名和密碼嗎? – Arash 2014-11-06 23:59:03
這些答案似乎有很多錯誤的信息。爲了節省其他人的一些時間,我張貼我自己的發現:
首先,就像問題的海報一樣,我也有這種情況,我需要從Java應用程序中提升權限。
我把它分成兩個腳本。第一個腳本是使用一些命令行參數從Java執行的。第二個腳本執行所有需要root權限的步驟。這個想法當然是在第一個腳本中使用cocoasudo來以root權限執行第二個腳本。
我已經通過廣泛的日誌記錄確認了單獨的文件,腳本確實按照我的意圖進行了操作。而且它們在從命令行手動啓動(當然具有普通用戶權限)時工作良好。
從Java應用程序啓動時,我得到了cocoasudo提示符,但沒有任何反應。即使第二個腳本的第一個日誌記錄輸出也不會出現。
當我將第一個腳本更改爲使用osascript時,再次確認腳本一切都正確無誤後,我甚至不會在Java中運行時發出提示。
這是所有OS X Mountain Lion上的。就好像Apple構建了一些安全衛士一樣,這些安全衛士阻止腳本在Java內部以root權限執行。因爲cocoasudo本身實際運行,所以我傾向於認爲解決方案是編寫類似於cocoasudo的東西,但是使用Cocoa API調用執行所有其他所需操作。這也可以進行代碼簽名。
繼ZJR's answer,我做了這個到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
,然後可以make into an app並把它作爲一個服務或什麼的。
應該使用本地OS X授權服務,而不是查看sudo和/或其圖形界面。
編號:
[我知道這是一個遲到的回答...]
當我打開甲基苯丙胺,有人問我給我的密碼。或者當我安裝pkg時,在x中調用的彈出框是什麼? – Johannes 2009-10-05 21:29:01