Подтвердить что ты не робот

Есть ли графическая "sudo" для Mac OS X?

Я разрабатываю небольшое программное обеспечение на Java. Я не знаю термин/определение для того, что я делаю, но я предлагаю команды от Java к терминалу. Что-то вроде этого:

Process process = Runtime.getRuntime().exec("command");

Я сделал это раньше в Linux, и я использовал gksudo для команд, требующих пароль root.

Есть ли в OS X gksudo? Любое графическое всплывающее окно с запросом пароля root?

4b9b3361

Ответ 1

Вы можете больше руд управлять записью самостоятельно с помощью AppleScript:

#!/bin/sh
osascript -e "do shell script \"$*\" with administrator privileges"

cocoasudo выглядит эстетически более приятным, но это уже развернуто.

Ответ 2

Это также выглядит многообещающим: cocoasudo

enter image description here

Он использует собственный API служб авторизации OSX:

В приложениях на базе Mac OS X Cocoa существуют анологичные возможности sudo, предоставляемые через API служб авторизации. Использование API позволяет запрашивать у пользователя свое имя пользователя и пароль, запрашивая возможность повышения привилегий.

...

В этом случае Ive написал небольшую утилиту, которую Ive дублировал cocoasudo. Используйте cocoasudo во многом так же, как вы используете sudo. Однако вместо того, чтобы пользователи запрашивали пароль в окне терминала, они получают диалоговое приглашение через API служб авторизации.

Ответ 3

Я обнаружил, что cocoasudo не работает, если вы используете оболочку script, которая вызывает другие команды. Вам нужно будет использовать 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"

Ответ 4

сделайте следующее: в этом примере я создаю папку /var/lock и устанавливаю ваши права на 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, но я не тестирую его, после того, как я начну тестировать и опубликую здесь результаты.

Ответ 5

gksudo - это версия GTK + sudo.

Вы можете использовать этот клон для него, особенно для OS X.

Ответ 6

Следуя Ответу ZJR, я сделал это в автоматизаторе, поэтому вы можете использовать его как Сервис или что-то еще:

on run {input, parameters}
    do shell script "sudo open \"" & (POSIX path of input as string) & "\"" with administrator privileges

    return input
end run

Или, может быть, вы просто думаете, что его ответ устарел и все еще хочет AppleScript, просто напишите эту единственную строку в Script Editor:

do shell script "[[your command]]" with administrator privileges

Что вы можете затем сделать в приложении и использовать его как Сервис или что-то еще.

Ответ 8

В этих ответах, похоже, много неправильной информации. Чтобы спасти других людей некоторое время, я публикую свои собственные выводы:

Прежде всего, как и плакат с вопросом, у меня также есть ситуация, когда мне нужно поднять полномочия из приложения Java.

Я разделил это на два сценария. Первый script выполняется из Java с некоторым параметром командной строки. Второй script выполняет все действия, требующие прав root. Идея, конечно же, должна использовать cocoasudo в первом script для выполнения второго script с привилегиями root.

Я подтвердил через обширное ведение журнала в отдельные файлы, которые скрипты действительно делают то, что я намеревался. И они отлично работают при запуске вручную (с обычными пользовательскими привилегиями, конечно) из командной строки.

При запуске из приложения Java я получаю подсказку cocoasudo, но ничего не происходит. Даже первый выход из второго script не отображается.

Когда я меняю первый script на использование osascript, снова с подтверждением того, что все верно, насколько это возможно, script, я даже не получаю приглашение, когда он запускается из Java.

Это все на OS X Mountain Lion. Как будто Apple строит несколько безопасных охранников, которые предотвращают выполнение сценариев с правами root из Java.

Так как сам cocoasudo действительно работает, я склонен думать, что решение состоит в том, чтобы закодировать что-то похожее на cocoasudo, но выполняя все остальные необходимые действия, используя вызовы API Cocoa. Это также может быть закодировано в коде.

Ответ 9

Если вы используете терминал, просто используйте вместо него "sudo", в котором будет запрашиваться пароль пользователя в самом терминале (в отличие от gksudo, который, я считаю, использует графическое всплывающее окно). Sudo работает как с Linux, так и с ОС X.