Comment redémarrer Linux à partir d'un programme C ++?
J'ai un Qt 4 GUI où je dois avoir une option dans un menu déroulant qui permet à l'utilisateur de choisir de redémarrer l'ordinateur. Je me rends compte, cela peut sembler redunant avec la possibilité de redémarrer l'ordinateur par d'autres moyens, mais le choix doit y rester. J'ai essayé d'utiliser system() pour appeler le suivant:
- suid-root shell script
- un non-suid script shell
- suid-root binaire programme
et tous juste cause
redémarrage: doit être super-utilisateur
à être imprimé. À l'aide de system() pour appeler redémarrer directement fait la même chose. Je ne suis pas particulièrement attaché à l'aide de system() pour ce faire, mais il semblait être le choix le plus direct.
Comment puis-je redémarrer le système à partir de l'interface graphique?
source d'informationauteur Dave K
Vous devez vous connecter pour publier un commentaire.
La
reboot
fonction est décrite dans le Manuel du Programmeur Linux. En vertu de glibcvous pouvez passer à laRB_AUTOBOOT
macro constante pour effectuer le redémarrage de l'ordinateur.Noter que si
reboot
n'est pas précédé par un appel àsync
les données peuvent être perdues.À l'aide de glibc dans Linux:
Dans Linux:
Avez-vous essayé de lancer un script shell, à l'aide de gksudo? Quelque chose comme
Avec un peu de chance, ça devrait tirer vers le haut une modale de dialogue pour obtenir des identifiants de l'utilisateur.
suid-ing de scripts shell est juste dangereux comme déjà mentionné (c'est pourquoi cela ne fonctionne pas).
Je soupçonne que suid-ment le binaire ne fonctionne pas car le système génère ses sous-processus avec l'utilisateur uid réel et pas le suid, encore pour des raisons de sécurité (il vous permet de remplacer n'importe quel binaire pour celui qui est appelé et exécuté en tant que root).
Pourrais-tu mettre une copie de redémarrer dans un endroit protégé de manière à ce que seuls les utilisateurs que vous souhaitez avoir l'autorisation de pouvez l'exécuter, puis suid-root.
Alternativement leur donner sudoer privilège pour exécuter la commande que vous aimez et le système à quelque chose comme
"ksh -c 'sudo reboot'"
En binaire essayer d'appeler
avant l'appel system ().
comment voulez-vous redémarrer le système à partir de la ligne de commande sur votre système?
fond ne
Cela devrait le faire sur presque n'importe quel système linux.
Puis il suffit de compiler avec
gcc reboot.c -o reboot
et nechmod a+s reboot
sur le binaire. Appelez ensuite de redémarrer car n'importe quel utilisateur, et le système doit redémarrer en douceur. La façon dont vous pouvez le faire via votre interface varie, comme si votre Environnement de Bureau KDE a été par exemple, il est tout à fait différent que de faire la même chose sous Fluxbox.