Ketika saya mencoba mematikan komputer dari baris perintah atau terminal saya harus memiliki hak akses root:
amy@amy:~$ shutdown now
shutdown: Need to be root
dan
amy@amy:~$ halt
halt: Need to be root
tetapi ketika mematikan menggunakan antarmuka pengguna grafis, yaitu tombol shutdown, atau tombol shutdown perangkat keras, saya tidak diminta kata sandi untuk melakukannya. Apa yang dimatikan untuk antarmuka grafis, dan mengapa itu tidak memerlukan kata sandi atau hak akses root?
Saya menggunakan Ubuntu 11,04 Natty.
Jawaban:
Tombol daya perangkat keras memicu peristiwa ACPI yang
acpid
(daemon ACPI) perhatikan dan bereaksi; dalam hal ini dengan mematikan sistem, meskipun Anda bisa membuatnya melakukan apa pun yang Anda inginkan. Daemon ACPI berjalan sebagai root, sehingga memiliki izin untuk mematikan sistem. Lingkungan desktop (misalnyagdm
untuk Gnome) biasanya berjalan sebagai root juga, jadi saya curiga mereka bekerja dengan cara yang sama - Anda tidak memiliki izin untuk mematikan sistem, tetapi Anda dapat memberi tahugdm
Anda ingin mematikannya dan dapat melakukannya pada nama andasumber
acpid
melakukan sesuatu yang berbeda dari yang sudah ada, Anda harus menjadi root, jadi Anda sudah memiliki izin untuk melakukan hal-hal yang tidak aman. Dimungkinkan juga untuk menggunakan sistem MAC seperti SELinux untuk melindungiacpid
, membatasi hal-hal yang boleh mereka lakukan, bahkan ketika mereka berjalan sebagai root.acpid
dapat dikonfigurasi, dapat menjalankan skrip yang berbeda tergantung pada peristiwa perangkat keras yang dilihatnya (misalnya, saya telahacpid
mengunci komputer saya ketika saya menekan tombol power)Jawaban Michael dengan benar membahas fungsi sistem ketika menggunakan saklar daya perangkat keras, tetapi sebagian besar lingkungan desktop benar-benar digunakan
dbus
untuk tujuan ini daripada melakukannya sendiri. Sebagai contoh, GNOME menggunakandbus
'sorg.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
ketika tombol shutdown diklik. Ketika ini dikirim,dbus
apakah beberapa pengecekan untuk menentukan apakah pengguna yang mengirim pesan berwenang untuk melakukan shutdown, dan jika ya, ia mematikan sistem.Anda dapat meniru ini dengan menggunakan
dbus-send
. Misalnya, untuk mematikan sistem Anda menggunakandbus
, gunakan sesuatu seperti ini:sumber