Saya telah membenturkan kepala saya terhadap ini selama beberapa waktu sekarang. Ini terkait dengan pertanyaan ini . Saya ingin mencari tahu apa yang terjadi ketika saya memilih untuk mematikan kotak Linux saya dari GUI. Ini sepertinya tidak terdokumentasi dengan baik.
Idealnya, saya mengharapkan jawaban DE- dan OS-agnostik. Kecuali itu, saya tertarik pada kasus spesifik Mandriva 2010.1 dan Debian 6.x (Squeeze) dan 7.0 (Wheezy) semuanya menjalankan Gnome. (Jika Anda memperhatikan dengan seksama, ya itu Gnome 2 dan Gnome 3)
Pada dasarnya, saya ingin tahu perintah / skrip / urutan skrip yang dimulai ketika saya menekan "Shut Down" atau "Restart" sehingga saya dapat mengubah perilaku mereka. Beberapa posting forum yang saya lihat menyarankan peretasan/etc/polkit-1/*
tetapi struktur direktori ini hanya kerangka pada kotak Debian (Squeeze) saya, misalnya.
Adakah yang bisa membantu?
EDIT
Apa yang saya coba sejauh ini
- Mengganti
shutdown
executable dengan skrip saya sendiri. Ini tidak berfungsi: ketika saya menekanshutdown
keluar log Gnome tanpa menjalankan skrip saya. - Sudah mencoba mengedit menu Gnome 2. Tanpa sukacita: opsi "Shutdown", "Log out" dan "Lock Screen" tidak muncul di editor menu.
- Dilihat
/usr/share/menu
, tidak ada yang membantu di sana.
Kemungkinan jalan keluar untuk solusi
strace
ing opsi GUI (apakah ini mungkin?)- Melihat ke
shutdown
kode sumber - Melihat
gnome-session
kode sumber
Memperbarui
Sesuai komentar saya pada jawaban di bawah ini, saya telah melihat polkit
tindakan di bawah /usr/share/polkit-1/actions/
dan menemukan (dalam file org.freedesktop.consolekit.policy
) tindakan yang disebut org.freedesktop.consolekit.system.stop-multiple-users
melempar pesan
System policy prevents stopping the system when other users are logged in
Saya berpikir (karena org.freedesktop.*
konvensi penamaan) bahwa ini adalah semacam sinyal yang dikirim ke DM melalui D-BUS. Selain itu, pesan ini muncul ketika mencoba untuk mematikan secara grafis ketika pengguna lain masuk, sehingga mekanisme yang memicu itu harus dipicu mekanisme yang sama ketika "Matikan" atau "Matikan" dipilih dari GUI.
Adakah yang bisa mengkonfirmasi / membantah? Apakah ada kemungkinan mencegat sinyal ini atau memodifikasinya?
/etc/init.d/rc.local
untuk memanggil skrip saat dihentikan .Jawaban:
Itu tergantung pada Display Manager Anda! (yaitu KDM, GDM)
Harap diingat bahwa DM Anda berjalan sebagai root! (perlu root privilege untuk menjalankan proses sesi Anda sebagai pengguna yang Anda masuki)
Ketika Anda mengklik shutdown di KDE atau GNOME, DE Anda mengirimkan sinyal ke DM Anda untuk mematikan atau memulai kembali setelah sesi berakhir. Kemudian, DE Anda memberi tahu setiap program untuk mengakhiri dan setelah semua proses lainnya dihentikan (atau berakhir waktu habis), proses terakhir DE Anda - proses sesi - berakhir.
Proses sesi adalah proses pertama yang dimulai dalam sesi X11. Ketika terbunuh atau berakhir, sesi berakhir. Pernahkah Anda melihat xterm itu ketika menjalankan X tanpa DE? Itu adalah proses sesi. Proses ini disebut
kdeinit
dalam KDE dangnome-session
di GNOME.Setelah sesi diakhiri, kontrol dikembalikan ke DM Anda (yang telah menunggu proses X berakhir), dan memeriksa apa yang DE katakan kepadanya untuk dilakukan. Jika diperintahkan untuk mematikan atau memulai ulang, itu akan melakukannya. Dalam kasus lain, itu hanya akan memulai layar login baru di X.
Ini juga terkait dengan masalah yang mungkin Anda miliki di masa lalu, dengan beberapa DE tidak dapat mematikan atau memulai kembali, hanya untuk logout, ketika digunakan dalam kombinasi dengan beberapa DM lainnya.
Bagaimanapun, ini tidak begitu buruk didokumentasikan. GDM memiliki halaman manual dari sebuah perintah yang memungkinkan Anda untuk mengatakannya untuk mematikan seperti yang saya katakan sebelumnya (
gdm-control
). KDM juga memiliki dokumentasi yang sangat baik dan memiliki utilitas yang mirip (sedikit lebih kompleks)kdmctl
.Shutdown dan restart dimungkinkan tanpa PolicyKit, tetapi PolicyKit melayani banyak keperluan yang dibutuhkan pada sistem saat ini seperti memasang disk tanpa menjadi root, menangguhkan atau hibernasi komputer. Dan keduanya tidak didokumentasikan dengan buruk!
Lihat ini jika Anda ingin tahu lebih banyak tentang apa itu PolicyKit dan bagaimana cara kerjanya: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
sumber
gdm-control
tidak membantu. Dokumentasi yang Anda berikan di PolicyKit tampaknya lebih menjanjikan. Saya akan menggali dan melihat apakah saya bisa menerapkan aturan khusus. Akan dilanjutkan ...polkit
tindakan yang disebutorg.freedesktop.consolekit.system.stop-multiple-users
di/usr/share/polkit-1/actions
Ini diatur untuk mencabut permintaan untuk pengguna yang tidak aktif danauth_admin_keep
untuk pengguna aktif. Pertanyaannya adalah, apa yang mendefinisikan tindakan ini? Apa tepatnya yang dijalankannya?