Wie starten Sie Linux aus einem C++ - Programm?
Ich habe einen Qt 4-GUI, wo ich brauche, um eine option in einem drop-down-Menü, das ermöglicht dem Benutzer zu wählen, den computer neu zu starten. Ich weiß, das mag redunant mit der Fähigkeit, den computer neu starten, auf andere Weise, aber die Wahl muss dort bleiben. Ich habe versucht, mit system() aufrufen, um die folgenden:
- eine suid-root-shell-Skript
- eine nicht-suid-shell-Skript
- ein suid-binary-Programm
und alle von Ihnen nur dazu führen,
Neustart: muss superuser
gedruckt werden. Mit system() aufrufen, reboot direkt nicht die gleiche Sache. Ich bin nicht besonders befestigt mit system() zu tun, aber es schien, dass die meisten direkten Wahl.
Wie kann ich das system Neustarten über die GUI?
InformationsquelleAutor der Frage Dave K | 2010-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
reboot
Funktion ist beschrieben in der Linux Programmer ' s Manual. Unter glibcdie Sie übergeben können, dieRB_AUTOBOOT
makro-Konstante, führen Sie den Neustart aus.Beachten Sie, dass, wenn
reboot
wird nicht vorangestellt, das durch einen Aufrufsync
können Daten verloren gehen.Mit glibc in Linux:
InformationsquelleAutor der Antwort Vilhelm Gray
In Linux:
InformationsquelleAutor der Antwort Mehdi
Haben Sie versucht, läuft ein shell-Skript, mit gksudo? So etwas wie
Mit etwas Glück, sollten die pull-up-modalen Dialog, um Benutzer-Anmeldedaten.
InformationsquelleAutor der Antwort Joseph Salisbury
suid-ing shell-Skripte ist nur gefährlich ist, wie schon erwähnt (das ist der Grund, warum das nicht funktioniert).
Ich vermute, dass das suid-ing der binären nicht funktioniert, da system erzeugt seine Teilprozess mit der Benutzer die tatsächlichen uid und nicht die suid-eins, wieder aus Gründen der Sicherheit (es würde Sie ersetzen alle binäre für ein Wesen genannt werden und als root starten).
Könnte man eine Kopie der Neustart in einem geschützten Ort, so dass nur Benutzer, die Sie möchten, über die Berechtigung zum ausführen kann, und dann mit suid-root.
Abwechselnd geben Sie sudoer Privileg zum ausführen EINFACH den Befehl, den Sie über Pflege-und system aus, um so etwas wie
"ksh -c 'sudo reboot'"
InformationsquelleAutor der Antwort Mark B
Binär versuche zu nennen,
vor dem system () - Aufruf.
InformationsquelleAutor der Antwort el.pescado
wie würden Sie das system neu starten über die Befehlszeile auf Ihrem system?
im Grunde tun
InformationsquelleAutor der Antwort frankster
Sollte dies tun, es auf fast jedem linux-system.
Dann einfach kompilieren mit
gcc reboot.c -o reboot
und tunchmod a+s reboot
auf die binäre. Rufen Sie dann neu starten, da alle Benutzer und das system sollte neu starten reibungslos. Die Art und Weise Sie tun dies durch Ihre GUI variiert, wie in, wenn Sie Ihre Desktop-Umgebung KDE zum Beispiel, es ist ganz anders als das gleiche zu tun, unter Fluxbox.InformationsquelleAutor der Antwort oxagast