Kiedy próbuję zamknąć komputer z wiersza polecenia lub terminala, muszę mieć uprawnienia roota:
amy@amy:~$ shutdown now
shutdown: Need to be root
i
amy@amy:~$ halt
halt: Need to be root
ale podczas zamykania za pomocą graficznego interfejsu użytkownika, tj. przycisku zamykania lub przycisku zamykania sprzętu, nie jestem proszony o podanie hasła. Co powoduje to zamknięcie interfejsu graficznego i dlaczego nie potrzebuje hasła ani uprawnień roota?
Używam Ubuntu 11.04 Natty.
Odpowiedzi:
Sprzętowy przycisk zasilania wyzwala zdarzenie ACPI, które
acpid
(demon ACPI) zauważa i reaguje; w takim przypadku zamykając system, chociaż możesz zrobić to, co chcesz. Demon ACPI działa jako root, więc ma uprawnienia do zamknięcia systemu. Środowiska pulpitu (np.gdm
Dla Gnome) zwykle działają również jako root, więc podejrzewam, że działają w ten sam sposób - nie masz uprawnień do zamykania systemu, ale możesz powiedzieć,gdm
że chcesz go zamknąć i może to zrobić na w Twoim imieniuźródło
acpid
zrobić coś innego niż już, musisz być rootem, aby mieć już uprawnienia do robienia niepewnych rzeczy. Możliwe jest również użycie systemów MAC, takich jak SELinux, do ochronyacpid
, ograniczając czynności, które wolno im robić, nawet gdy działają jako root.acpid
jest konfigurowalny, może uruchamiać różne skrypty w zależności od zdarzeń sprzętowych, które widzi (na przykład mamacpid
zablokowany komputer po naciśnięciu przycisku zasilania)Odpowiedź Michaela poprawnie omawia funkcję systemu podczas korzystania ze sprzętowego przełącznika zasilania, ale większość środowisk komputerowych faktycznie używa
dbus
tego celu, a nie robi to samodzielnie. Na przykład GNOME używadbus
„s”org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
po kliknięciu przycisku zamykania. Kiedy jest wysyłany,dbus
sprawdza niektóre, czy użytkownik wysyłający wiadomość jest upoważniony do zamknięcia, a jeśli tak, to wyłącza system.Możesz to naśladować za pomocą
dbus-send
. Na przykład, aby zamknąć system za pomocądbus
, użyj czegoś takiego:źródło