Bagaimana desktop Linux melakukan tindakan sistem?

8

Desktop Linux dapat melakukan beberapa tindakan yang jika tidak tersedia bagi pengguna ketika login dari terminal. Tindakan seperti mematikan sistem, dan mengubah waktu sistem hanya dapat diakses oleh pengguna sudo setelah memasukkan kata sandi. Bagaimana cara kerjanya? Apakah ada daemon root yang berjalan yang mengambil perintah dari pengguna login. Tolong arahkan saya ke jawaban yang tepat.

Saya menjalankan Ubuntu 13.10.

cnvzmxcvmcx
sumber
1
Tidak ada yang namanya "desktop Linux". Lingkungan desktop apa yang Anda gunakan?
Mat
Saya menggunakan Ubuntu 13.10 Unity (ubuntu-desktop). Saya kira idenya sama untuk semua distro, maka saya bertanya di sini alih-alih askubuntu.
cnvzmxcvmcx
Ini bukan masalah distro, ini masalah lingkungan desktop mana yang Anda gunakan - KDE mungkin tidak melakukannya dengan cara yang sama seperti yang dilakukan Gnome, maupun Unity. (Mereka semua mungkin menggunakan teknik yang sama.)
Mat
Mungkin jawaban / komentar pada " cara kerja di bawah tenda (alias GUI)" di sini -> unix.stackexchange.com/questions/101074/… , yang dijelaskan pada contoh mount(ing) mungkin dapat sedikit membantu dalam memahami. Saya, secara pribadi, sangat mengunyah mereka saat ini
eh
@MAT AFAIK mereka semua sudah distandarisasi pada D-Bus sekarang.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

6

Saat ini di Ubuntu, shutdown yang sebenarnya dilakukan oleh console-kit-daemon, daemon ConsoleKit , yang berjalan dengan hak akses root. Daemon ConsoleKit menerima permintaan penutupan dari aplikasi panel desktop melalui D-Bus . Kebijakan yang memungkinkan proses tidakrivil berbicara untuk proses istimewa ditangani oleh polkit (sebelumnya PolicyKit). Anda dapat meniru permintaan ConsoleKit melalui dbus-sendjika Anda mau. Secara khusus, untuk memberi tahu ConsoleKit untuk melakukan shutdown yang dapat Anda lakukan:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \
/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

Di Ubuntu, ConsoleKit menggantikan Hardware Abstraction Layer (HAL), sebuah subsistem yang bertujuan untuk memungkinkan aplikasi desktop menemukan dan menggunakan perangkat keras sistem host melalui API portabel dan abstrak, terlepas dari jenis perangkat keras yang mendasarinya. HAL saat ini sudah usang di sebagian besar distribusi Linux. dbus-sendDoa yang setara dengan menggunakan HAL adalah:

dbus-send --print-reply --system --dest=org.freedesktop.Hal \ 
/org/freedesktop/Hal/devices/computer/org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

Saat ini, ConsoleKit tidak dipelihara secara aktif. Fokus dari proyek freedesktop.org telah bergeser ke arah manajemen kursi / pengguna / sesi built-in dari sistem systemd init yang disebut systemd-logind . Bagaimana ini akan mempengaruhi distribusi yang mengadopsi sistem init mereka sendiri, seperti pemula di Ubuntu, masih harus dilihat.

Thomas Nyman
sumber