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?
Antwort
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.).
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? –
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. –
Der Inhalt der Quelldateien heißt 'Quellcode' (kurz:' code'). –
- 1. Wie Webanforderung in einem eigenen Thread ausführen?
- 2. Prozedur in einem Trigger ausführen
- 3. Wie RollBack nach einem Fehler ausführen?
- 4. Ausführen von ModelControllerClient in einem Stapel
- 5. Mehrere Status in einem Unterverzeichnis ausführen
- 6. Mehrere Funktionen in einem Laravel-Controller ausführen?
- 7. Ausführen eines Python-Skripts in einem Makefile
- 8. Ausführen einer Aktivität in einem bestimmten Intervall
- 9. Gespeicherte Prozedur in einem Auslöser ausführen
- 10. Code in einem anderen Benutzerkontext ausführen
- 11. Wie Bash-Befehle in einem Python-Skript ausführen
- 12. Wie pman auf einem Remote-Knoten in Erlang ausführen?
- 13. Wie kann ich Lektor in einem Docker-Container ausführen?
- 14. Wie grep in einem Shell-Skript ausführen, aber $ 0 auszuschließen
- 15. Wie kann ich .htaccess Dateien in einem Unterordner nicht ausführen?
- 16. Wie können Sie eine Elif-Funktion in einem Graphen ausführen?
- 17. Phalcon PhP - wie Abfrage in einem Controller mit Parametern ausführen
- 18. Ausführen einer Unterabfrage in einem Mysql-Statement
- 19. Befehl in einem anderen Verzeichnis ausführen
- 20. Ausführen von NSRunLoop in einem Cocoa-Befehlszeilenprogramm
- 21. Einen Socket-Stream in einem Thread ausführen
- 22. JS in einem Bootstrap-Popover ausführen
- 23. Execlp in einem anderen Terminal ausführen
- 24. Ausführen von Regex in einem Stream
- 25. Docker in einem Docker-Container ausführen?
- 26. Mehrere Installer/EXE in einem Installer ausführen?
- 27. Ausführen eines Java-Programms in einem JPanel
- 28. Mehrere Laravel-Tabellenmigrationsabfragen in einem ausführen?
- 29. Ausführen einer Methode mit Parametern in einem Thread in C#
- 30. Ausführen mehrerer Befehle in einem ExecuteScalar in Oracle
Mögliche Duplikat [laufen Teil des Codes als Root] (http://stackoverflow.com/questions/42779843/run-part-of-code-as-root) –