簡體   English   中英

JavaFX java.io.IOException "uptime": error=13, permission denied - 以普通用戶身份運行程序

[英]JavaFX java.io.IOException "uptime": error=13, permission denied - Running program as regular user

我正在編寫一個工作程序,代碼的某些部分使用ProcessProcessBuilder來運行一些系統命令。

我正在 Linux Mint 機器上開發它,但該程序將在 Ubuntu 20.04 GNOME 中運行。

當我將 maven 項目構建為 javafx:jlink 時(因為我將其構建為 .deb 包)並運行創建的bin/app腳本。 我在控制台中收到此錯誤。

java.io.IOException: Cannot run program "uptime": error=13, Permission denied

我已經搜索了其他線程,他們都說了同樣的話,我必須使用chmod u+x /usr/bin/uptime授予運行程序權限的用戶對該可執行文件的權限。 它不起作用。

最初這部分代碼使用Process ,切換到ProcessBuilder並且仍然沒有做任何事情。 我什至使/usr/bin/uptime的用戶所有者成為了用戶所有者,但我仍然收到該錯誤。

這是我目前正在使用的:

// Set Uptime
try{
    Process p = new ProcessBuilder().command("uptime","-p").start();
    InputStream in = p.getInputStream();
    uptime = new String(in.readAllBytes());
    p.destroy();
}catch (IOException err){
    System.out.println(err.getMessage());
    err.printStackTrace();
}

我能想到的唯一區別是,在我的 Linux Mint 機器中,我的用戶是管理員,而作為測試機器,用戶是普通用戶。

我禁用 AppArmor 認為它會導致問題,檢查journalctl -xe以查看是否出現任何奇怪的情況,甚至檢查/var/log/syslog但也沒有錯誤。

如果我以該用戶身份打開常規終端,我可以完美地運行這些命令。 很難確定這給我帶來了麻煩。 有什么想法嗎?

如此處所示,指定redirectErrorStream(true)以查看有關錯誤的更多信息。 例如,在我的平台上,

Process p = new ProcessBuilder().command("uptime", "-p")
    .redirectErrorStream(true).start();
InputStream in = p.getInputStream();
System.out.println(new String(in.readAllBytes()));

告訴我這個:

uptime: illegal option -- p
usage: uptime

刪除不受支持的選項會產生預期的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM