macos - gui - ¿Hay algún "sudo" gráfico para Mac OS X?
ssh client mac (9)
Estoy diseñando un pequeño software en Java. No conozco el término / definición de lo que estoy haciendo, pero estoy solicitando comandos de Java al terminal. Algo como esto:
Process process = Runtime.getRuntime().exec("command");
He hecho esto antes en Linux y utilicé gksudo
para los comandos que requerían la contraseña de root.
¿Hay algún gksudo
en OS X? ¿Alguna ventana gráfica que pide una contraseña de root?
Descubrí que el cocoasudo no funciona si está ejecutando un script de shell que llama a otros comandos. Tendría que usar cocoasudo en todos los subcomandos, lo que mostraría un aviso para cada llamada.
La solución osascript parece funcionar mejor, pero necesitaba modificarla para que funcionara con comandos que incluyan rutas que contienen espacios.
#!/bin/sh
export bar=""
for i in "$@"; do export bar="$bar ''${i}''";done
osascript -e "do shell script /"$bar/" with administrator privileges"
Esto también parece prometedor: cocoasudo
Utiliza la API de servicios de autorización nativa de OSX:
Para las aplicaciones basadas en Mac OS X Cocoa, existe una capacidad análoga de sudo proporcionada a través de la API de Servicios de Autorización. El uso de la API le permite solicitar al usuario su nombre de usuario y contraseña solicitando la capacidad de escalar privilegios.
...
Para ese caso, he escrito una pequeña utilidad que he llamado cocoasudo. Usa el cocoasudo de la misma manera que usarías el sudo. Sin embargo, en lugar de que a los usuarios se les solicite su contraseña en una ventana de Terminal, obtendrán un mensaje de diálogo a través de la API de Servicios de Autorización.
Parece que hay mucha información incorrecta en estas respuestas. Para ahorrar tiempo a otras personas, publico mis propios hallazgos:
En primer lugar, al igual que el póster de la pregunta, también tengo la situación de que necesito elevar los permisos desde una aplicación Java .
He dividido esto en dos guiones. El primer script se ejecuta desde Java con algún parámetro de línea de comando. El segundo script realiza todos los pasos que necesitan privilegios de root. La idea es, por supuesto, utilizar cocoasudo en el primer script para realizar el segundo script con privilegios de root.
He confirmado a través de un registro extenso en archivos separados que los scripts efectivamente hacen lo que pretendía. Y funcionan bien cuando se inician manualmente (con privilegios de usuario normales, por supuesto) desde la línea de comandos.
Cuando se inicia desde la aplicación Java, recibo el indicador de cocoasudo, pero no sucede nada. Ni siquiera aparece la primera salida de registro del segundo script.
Cuando cambio la primera secuencia de comandos para usar osascript, nuevamente con la confirmación de que todo es correcto en lo que respecta a la secuencia de comandos, ni siquiera aparece un aviso cuando se ejecuta desde Java.
Esto es todo en OS X Mountain Lion. Como si Apple incorporara algunos guardias seguros que impiden que los scripts se ejecuten con privilegios de root desde Java.
Como el cocoasudo en realidad se ejecuta, me inclino a pensar que la solución es codificar algo similar al cocoasudo, pero realizar el resto de las acciones necesarias mediante las llamadas a la API de Cocoa. Esto también puede ser firmado en código.
Puede más o menos lograr escribir su propio script de shell de AppleScript:
#!/bin/sh
osascript -e "do shell script /"$*/" with administrator privileges"
cocoasudo
parece estéticamente más agradable, pero esto ya está desplegado.
Si está utilizando un terminal, entonces use " sudo
" en su lugar, que solicitará la contraseña del usuario en el propio terminal (a diferencia de gksudo
que creo que utiliza una ventana emergente gráfica). Sudo funciona tanto en Linux como en OS X.
Siguiendo la respuesta de ZJR , he convertido esto en automator, para que pueda usarlo como un Servicio o lo que sea:
on run {input, parameters}
do shell script "sudo open /"" & (POSIX path of input as string) & "/"" with administrator privileges
return input
end run
O tal vez solo piense que su respuesta está desactualizada y aún desea un AppleScript, simplemente escriba esta línea en el Editor de secuencias de comandos:
do shell script "[[your command]]" with administrator privileges
Que luego puedes convertir en una aplicación y usarla como un Servicio o lo que sea.
Uno debe usar los servicios de autorización nativos de OS X en lugar de mirar sudo y / o una interfaz gráfica.
Árbitro:
[Sé que es una respuesta tardía ...]
haga lo siguiente, en este ejemplo, crearé una carpeta / var / lock y estableceré sus permisos en 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();
}
en Linux tal vez puedas hacer esto con gksudo pero no lo pruebo, después de probar y publicar aquí los resultados.
gksudo
es la versión GTK + de sudo
.
Puedes usar este clon especialmente para OS X.