comandos sudo con JAVA / shellscripts

Estoy tratando de hacer un programa de apagado simple en JAVA y no puedo creer que no haya podido encontrar una respuesta a esto en ningún otro lado.

Primero intenté usar sudo en mi programa java:

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class themain{
public static void main(String[] args){
    Process ls=null;
    BufferedReader input=null;
    String line=null;
    String[] cmd = {"sudo shutdown -h +20"};


        try {

               ls= Runtime.getRuntime().exec(cmd);
               input = new BufferedReader(new InputStreamReader(ls.getInputStream()));

            } catch (IOException e1) {
                e1.printStackTrace();  
                System.exit(1);
            }


           try {
                   while( (line=input.readLine())!=null)
                    System.out.println(line);

            } catch (IOException e1) {
                e1.printStackTrace();  
                System.exit(0);
            }        
}

} 

Luego intenté ejecutar un script de shell con este código:

 sudo shutdown -h +20

El nuevo programa de Java ahora se veía así:

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class themain{
public static void main(String[] args){
    Process ls=null;
    BufferedReader input=null;
    String line=null;
    String[] cmd = {"sh shutdown.sh"};


        try {

               ls= Runtime.getRuntime().exec(cmd);
               input = new BufferedReader(new InputStreamReader(ls.getInputStream()));

            } catch (IOException e1) {
                e1.printStackTrace();  
                System.exit(1);
            }


           try {
                   while( (line=input.readLine())!=null)
                    System.out.println(line);

            } catch (IOException e1) {
                e1.printStackTrace();  
                System.exit(0);
            }        
}

}

Esto, por supuesto, tampoco funcionó ... ¿Hay alguna forma de invocar una contraseña de solicitud de contraseña gráfica? Y quiero que este programa funcione en todas las computadoras, así que no quiero estropear mi archivo individual de sudoers ...

Un saludo y gracias

Respuesta 1

Tenga en cuenta este hilo , y en particular:

La contraseña para 'sudo' debe presentarse a través del teclado o debe presentarse a través de un proceso definido por la variable de entorno SUDO_ASKPASS utilizando "sudo -A". Al invocar su script a través de Java, su script no tendrá acceso al teclado, por lo que debe configurar la variable de entorno para que apunte a un programa que devuelva la contraseña terminada con un "\ n". En lugar de usar 'sudo' directamente, puede usar 'gksudo' que abrirá un diálogo que le solicitará al usuario la contraseña. Esta es mi solución preferida.

Respuesta: 2

He estado tratando de resolver este problema sobre el acceso a mi DB de clouddant desde los servicios de IBM-bluemix. He configurado mi URL en Android Studio de esta manera: URL url = nueva URL ("https: // XXXX-XXXX-XXXX-XXXX-XXXX -...

Estoy tratando de configurar una aplicación de demostración GCM. http://developer.android.com/guide/google/gcm/demo.html Estoy atascado tratando de crear un archivo war: en una ventana de shell, vaya al directorio gcm-demo-server. ...

Mi programa Java produce muchos datos, con los cuales construyo ResultObject individual. Debido a que solo ciertos ResultsObjects serán de interés, rellenar un ObservableHashMap <> con mis resultados. ...

Posible duplicado: cómo usar Pipe Symbol en Java Hola, quería ejecutar algún comando de Linux a través de mi aplicación Java. Cuando ejecuto el siguiente comando, ni arroja la excepción ni da el ...