Saya mencoba mendapatkan shutdown / reboot yang anggun di ArchLinux dengan GNOME Shell. Sekarang, ketika saya meminta shut-down, itu segera dimatikan tanpa memberi waktu buka program untuk menutup / menyimpan file terbuka. Akibatnya, setiap kali saya memulai ulang Chrome (misalnya) itu memberi tahu saya bahwa sesi tidak ditutup dengan benar, dll. Dengan membaca di web saya mengetahui bahwa systemd saat mematikan proses, pertama-tama mengirim SIGTERM
diikuti oleh SIGKILL
jika proses tidak menutup dalam batas waktu tertentu. Namun saya perhatikan bahwa pada sistem saya SIGKILL
dikirim segera setelah SIGTERM
dan saya kira ini adalah penyebab dari penghentian program tidak anggun.
Saya telah menemukan beberapa dokumentasi yang (jika saya membacanya dengan benar) menyatakan bahwa batas waktu sebelum pengiriman SIGKILL
dapat diatur oleh TimeoutStopSec=
opsi. Selain itu pengiriman SIGKILL
juga dapat dinonaktifkan dengan SendSIGKILL=
opsi. Tetapi saya tidak dapat menemukan tempat untuk mengkonfigurasi opsi-opsi itu ... apakah ada file konfigurasi shutdown / reboot systemd di mana saya dapat mengatur opsi-opsi itu?
EDIT:
Saya melakukan beberapa tes dan saya menemukan dua hal menarik:
- Jika saya menutup krom secara manual seperti ini
killall -SIGTERM chrome
, tidak akan mengeluh bahwa belum ditutup dengan benar saat berikutnya saya memulai lagi. Jika saya menutupnya seperti ini sebagai gantinyakillall -SIGKILL chrome
, itu akan mengeluh. Ini memberitahu saya bahwa chrome menangani SIGTERM dengan benar. - Melihat output prosedur shutdown saya, cetakan systemd
Sending SIGTERM...
segera diikuti olehSending SIGKILL...
Menurut komentar di bawah ini, systemd hanya menangani prosesnya saja. Jadi dalam kasus saya GDM. Ini memberitahu saya bahwa masalahnya mungkin:
- baik GDM tidak menutup proses turunannya (mis. Chrome) dengan benar (yaitu dengan mengirimkan SIGTERM kepada mereka)
- atau systemd mengirimkan pesan SIGKILL kepada GDM lebih awal tanpa memberinya waktu untuk menutup anak-anaknya dengan benar.
Apakah ada cara untuk memeriksa / mengkonfigurasi bagaimana sebenarnya GDM menutup anak-anaknya?
sumber
systemd's
kontrol -systemd
adalahpid 1
- tetapi eksekutif Chrome dari skrip wrapper dalam sebuah proses subkulit dan memanggil anak sesudahnya. Namun, ia akan melakukan apa yang diperlukan untuk mematikannyazygotes
selama sistem Anda dikonfigurasi dengan benar. Apakah Anda menggunakan salah satu solusi temp-space untuk chrome yang akan Anda rekomendasikan di Arch wiki?gnome-session
.Jawaban:
Untuk mematikan desktop dengan anggun, Anda mungkin perlu menaikkan
TimeoutStopSec=
untuk GDM, atau manajer tampilan apa pun yang Anda gunakan.sumber
Ini bekerja untuk saya di Arch Linux saya dengan Gnome 3.12. Ternyata itu mungkin terkait dengan konfigurasi di
/etc/gdm/PostSession/Default
.Jalankan
sudo pacman -S wmctrl
untuk menginstal wmctrl untuk manajemen windows.Buat file yang dapat dieksekusi untuk menutup semua jendela. Misalnya, saya memasukkannya
/home/[your_username]/bin/close-all-windows
dengan konten ini:Ubah
/etc/gdm/PostSession/Default
dan tambahkan konten ini sebelumexit 0
:Semoga ini berhasil.
sumber
script wmctrl sorpass bekerja dengan baik untuk saya (pada CentOS 7 saya baru saja menjalankan 'yum install wmctrl' terlebih dahulu). Namun saya menemukan bahwa / etc / gdm / PostSession / Default hanya berjalan pada saat logout, bukan shutdown. Oleh karena itu alih-alih menggunakan / etc / gdm / PostSession / Default Saya sekarang memanggil skrip wmctrl sorpass dari skrip python Seamus Phelan yang dapat ditemukan di dua situs ini:
Kombinasi skrip ini berfungsi baik untuk menutup Firefox, Chrome, dll. Secara otomatis dan bersih ketika saya logout atau mematikan mesin desktop CentOS 7 saya. Perhatikan bahwa dengan CentOS 7 Anda harus menjalankan 'yum install gnome-python2-gnome' agar skrip python ini berfungsi.
sumber