2017-02-18 1 views
0

Ich möchte eine GUI mit Root-Berechtigungen ausführen. Wenn der Benutzer das Skript ausführt, sollte ein Popup-Fenster geöffnet werden, in dem das root-Passwort und später die GUI gefragt wird. Ich weiß, dass es durch pkexec getan werden kann. Aber ich weiß nicht, wie man pkexec in vala script implementiert. Kurz, ich möchte meine App über sudo-Berechtigungen ausführen. Kann jemand eine Lösung dafür vorschlagen?Wie pkexec in einem Vala-Skript ausführen?

+0

Mögliche Duplikat [laufen Teil des Codes als Root] (http://stackoverflow.com/questions/42779843/run-part-of-code-as-root) –

Antwort

0

Nehmen Sie einfach den Beispielcode von GLib.Process.spawn_async und ändern Sie es, um Ihre my_elevated_app auszuführen.

main.vala (der Code für die ausführbare Datei, die als normaler Benutzer ausgeführt werden soll):

public static int main (string[] args) { 
    stdout.printf ("I am running as a normal user\n"); 
    MainLoop loop = new MainLoop(); 
    try { 
     string[] spawn_args = {"pkexec", "elevated_app", "arg1", "arg2"}; 
     string[] spawn_env = Environ.get(); 
     Pid child_pid; 

     Process.spawn_async ("/", 
      spawn_args, 
      spawn_env, 
      SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD, 
      null, 
      out child_pid); 

     ChildWatch.add (child_pid, (pid, status) => { 
      // Triggered when the child indicated by child_pid exits 
      Process.close_pid (pid); 
      loop.quit(); 
     }); 

     loop.run(); 
    } catch (SpawnError e) { 
     stdout.printf ("Error: %s\n", e.message); 
    } 
    return 0; 
} 

elevated_main.vala (Der Code für die ausführbare Datei, die als Wurzel laufen soll):

public static int main (string[] args) { 
    stdout.printf ("I am running as root\n"); 
    return 0; 
} 

Kompilieren der zwei ausführbare Dateien wie üblich:

valac -o my_app main.vala 
valac -o my_elevated_app elevated_main.vala 

Beachten Sie, dass mit den obigen Code müssen Sie die erhöhte ausführbare Datei zuerst installieren zu /usr/local/bin/ oder /usr/bin/ oder ein anderes Verzeichnis in PATH), zum Beispiel:

sudo install -m 755 my_elevated_app /usr/local/bin 

Natürlich können Sie den Code in dem lokalen Arbeitsverzeichnis ändern könnten laufen, aber laufen etwas als root gefährlich ist, sollten Sie Stellen Sie immer sicher, dass Sie die richtige ausführbare Datei ausführen. Manche Entwickler gehen sogar so weit, nur einen bestimmten Dateinamen zuzulassen (wie /usr/bin/my_elevated_app).

Wenn Sie nun ./my_app ausführen, sollten Sie von mit einer GUI aufgefordert werden, Ihr Kennwort einzugeben, und nach erfolgreicher Authentifizierung sollte der my_elevated_app-Prozess gestartet werden.

Wenn alles funktioniert wie erwartet Sie diese Ausgabe sehen sollte:

$ ./my_app 
I am running as a normal user 
I am running as root 

Beide oben genannten Anwendungen sind Konsolenanwendungen, aber das Gleiche sollte für GUI arbeiten apps als auch (nur Ihre Fenster mit Gtk erstellen, wie üblich, usw.).

+0

Dank für answering.Apparently ist mein elevated_gui_app die App was bekomme ich nach dem Ausführen von zwei Vala-Skripte (main.vala und main1.vala). Also, wie diese Skripte (oder App nach dem Kompilieren und Ausführen der beiden Skripte) im obigen Beispielcode aufrufen? –

+0

Ich habe meine Antwort geklärt. Bitte verwenden Sie nicht den Begriff 'script' im Kontext von vala,' .vala' Dateien heißen 'source files' und das Ergebnis nach dem Kompilieren wird' application' (kurz 'app' genannt). Nun, um 100% technisch korrekt zu sein, sollten wir es "ausführbar" nennen. –

+0

Der Inhalt der Quelldateien heißt 'Quellcode' (kurz:' code'). –

Verwandte Themen