Ich möchte euch eine Möglichkeit zeigen unter Linux den Computer ohne Root-Rechte herunterzufahren. Diese Lösung müsste mit jeder Distribution funktionieren.
Naja, irgendwie muss man als Benutzer in der grafischen Oberfläche ja herunterfahren können. Das ist halt der Grund, warum dort nicht nach dem Passwort gefragt wird.
nobody ist ein Benutzerkonto wie jedes andere. Ein spezielles "Gast"-Konto wie unter Windows gibt es nicht, nobody ist nur eine Konvention für Dienste, die keine Rechte benötigen, und hat per se nicht weniger Rechte als ein "normales" Konto.
Im Allgemeinen ist HAL auch nicht der Weg zum Herunterfahren, sondern nur der allerletzte Ausweg. Grundsätzlich muss das nicht funktionieren, denn eigentlich ist die systemweite Sitzungsverwaltung imho heute Sache von ConsoleKit. Zudem umgeht es sämtliche Sitzungsverwaltung der laufenden Desktop-Umgebung, so dass unter Umständen bei der nächsten Anmeldung die Sitzung nicht korrekt wiederhergestellt werden kann.
Man sollte also vorher immer mindestens die Sitzungsverwaltungsdienste von Gnome (org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown) und KDE (org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout) versuchen.
Es ist völlig unnötig, hier die Umgebungsvariable zu prüfen. Es ist einfacher und zuverlässiger, der Reihe nach alle möglichen Dienste zu probieren, denn eine Sitzungsverwaltung läuft in der Regel nur, wenn eine vollwertige Desktop-Sitzung gestartet wurde.
Davon abgesehen ist DESKTOP_SESSION keine zuverlässige Quelle, weil diese Variable vom Display-Manager gesetzt wird. Wenn, dann sollte man auf die Existenz von "$KDE_FULL_SESSION=true" bzw. "$GNOME_DESKTOP_SESSION_ID" prüfen.
Im Übrigen funktioniert der "logout"-Aufruf für KDE so auch nicht, weil die Methode drei Parameter entgegen nimmt, welche bestimmen, wie das System heruntergefahren werden soll.
Das liegt daran, dass meine Vorredner mein Beitrag missverstanden haben. Die Methode heißt natürlich nicht immer "Shutdown"
Ich hab mir jetzt mal die Dokumentation angesehen, das folgende Beispiel sollte funktionieren, auch wenn ich es nicht unter KDE getestet habe.
Das Zusammenfassen des doppelten Codes über das Dictionary finde ich nicht wirklich praktikabel und sinnvoll. Ich denke es erhöht nicht die lesbarkeit des Codes.
Ich denke doch, dass es sinnvoll ist. Jede Wette, dass Du beim Verfassen dieses Beispiels die einzelnen Abschnitt kopiert, wieder eingefügt und anschließend geändert hast