Права корневого пользователя в программе на Java (MacOS)
Доброго времени суток!
Проблема такова. Нужна программа, которая выключает компьютер. Ну что-то типа таймера.
Runtime.getRuntime().exec("shutdown -h now");
Тут происходит вызов выключения компьютера. Но программа просто-напросто не выключает компьютер из-за отсутствия прав суперюзера. В терминале нужно вводить пароль суперпользователя. Но как это реализовать в программе, я не понимаю. Я новичок, поэтому заранее прошу прощения у всех, но как можно программе, не запрашивая у пользователя никаких данных, подтверждений, предоставить право на выключение компьютера? Заранее спасибо!
Дополнение 1
Нашёл, что из терминала выключить компьютер можно вот так вот:
echo -e "mypass\n" | sudo -S shutdown -h now
Из терминала всё прекрасно сработало. Однако в программе это почему-то нет.
Runtime.getRuntime().exec("echo -e \"mypass\\n\" | sudo -S shutdown -h now");
Подскажите, пожалуйста, почему по-прежнему ничего не происходит? И как это можно исправить?
Дополнение 2
Проблему удалось частично решить следующим образом:
ProcessBuilder b = new ProcessBuilder("bash","-c","echo -e \"mypass\\n\" | sudo -S shutdown -h now");
b.start();
Всё замечательно работает из самой программы, хоть и работаеат она для частного случая. Общего решения, без привязки к конкретному паролю и без запросов пароля у пользователя, найти так и не удалось.
Дополнение 3
Проблему удалось решить с помощью AppleScript. Данная команда в терминале выключает компьютер без ввода пароля:
osascript -e 'tell application "System Events" to shut down'
То есть в коде программы это будет выглядеть следующим образом:
String script = "tell application \"System Events\" to shut down";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("AppleScript");
engine.eval(script);
Всем большое спасибо за помощь.