2011-07-12 17 views
1

我有一個java應用程序,它有一個計時器,執行一個單獨的應用程序,需要提升特權。我一直在做這樣的:java gksudo持續高程

String command = "gksudo /home/bob/sensor"; 
Process child = Runtime.getRuntime().exec(command); 

的問題是,每一個計時器揭開序幕時,它要求的密碼,所以我把它每兩秒鐘。有沒有辦法只請求一次密碼,然後保持提升,以便只要Java應用程序正在運行它不會再問?

我嘗試使用gconf-editor更改apps/gksu/save-to-keyring選項,但這並沒有改變任何內容,我認爲它可能是核選項。

回答

0

我不認爲這實際上是可能的,因爲gksudo不允許你傳遞密碼。但是susudo確實允許(見How to pass the password to su/sudo/ssh without overriding the TTY?)。您可以使用gksudo -p來使用圖形認證窗口並檢索密碼。然後下次你不需要gksudo,因爲無論如何你都不想要密碼。

可能看起來像這樣

String sessionPassword = null; 
String command = "/my/elevated/app"; 

void executeStuff() { 
    // Get the password in case it does not exist yet 
    if(sessionPassword == null) 
     sessionPassword = exec("gksudo -p -m 'Please enter you password once.'"); 

    // Construct the command 
    String elevatedCommand = "echo '"+ sessionPassword +"' | sudo -S " + command; 

    // Launch elevated 
    Process child = Runtime.getRuntime().exec(elevatedCommand); 
} 

我懷疑安全專家恨我建議這個(存儲的口令),所以請謹慎使用。