ArchLinux'ta zarif kapatma


21

GNOME Shell ile ArchLinux'da zarif bir kapatma / yeniden başlatma yapmaya çalışıyorum. Şimdi, kapatma istediğimde, açık programları incelikle kapatmak / kaydetmek için açık programlara zaman vermeden derhal kapanıyor. Sonuç olarak, Chrome'u her başlattığımda (örneğin) bana oturumun doğru kapatılmadığını söylüyor. Vb. Web'de okuyarak, işlemleri kapatırken systemd'in okuduğunu , işlemin kapanmaması durumunda önce SIGTERMbunu gönderdiğini öğrendim. SIGKILLbelirli bir zaman aşımı ile. Ancak sistemimde SIGKILLderhal gönderildiğini farkettim SIGTERMve bunun zarif olmayan programların sonlandırılmasının nedeni olduğunu tahmin ediyorum.

(Doğru okursam) göndermeden önce zaman aşımı seçeneğinin ayarlanabileceğini belirten bazı belgeler buldum . Ayrıca gönderme seçeneği ile de devre dışı bırakılabilir . Ama bu seçenekleri nerede yapılandıracağımı bulamıyorum ... bu seçenekleri ayarlayabileceğim bir sistemd kapatma / yeniden başlatma yapılandırma dosyası var mı?SIGKILLTimeoutStopSec=SIGKILLSendSIGKILL=

DÜZENLE:

Bazı testler yaptım ve iki ilginç şey keşfettim:

  1. Kromu manuel olarak bu şekilde kapatırsam killall -SIGTERM chrome, tekrar başlattığımda doğru şekilde kapanmadığından şikayet etmez. Bunun yerine böyle kapatırsam killall -SIGKILL chrome, şikayet edecek. Bu, kromun SIGTERM'i doğru kullandığını söylüyor.
  2. Kapatma prosedürümün çıktısına bakıldığında, sistem Sending SIGTERM...hemen ardından tarafından yazdırılıyorSending SIGKILL...

Aşağıdaki açıklamaya göre, systemd yalnızca işlemlerini gerçekleştiriyor. Yani benim durumumda GDM. Bu bana sorunun olabileceğini söylüyor:

  1. ya GDM kendi alt işlemlerini kapatmıyor (örn. Chrome) doğru şekilde (yani SIGTERM göndererek)
  2. veya systemd, çocuklarına doğru şekilde kapanması için zaman vermemesine erken GDM'ye bir SIGKILL mesajı gönderiyor.

GDM'nin çocuklarını nasıl kapattığını kontrol etmenin / yapılandırmanın bir yolu var mı?


1
Systemd sadece doğrudan kontrolünde olan süreçleri gösterir. Krom gibi şeyler bu süreçlerden biri değil. Systemd, ekran yöneticinize sinyal verir (xdm, gdm, kdm, her neyse), o zaman çocuklarına sinyal vermek için ekran yöneticisine kalkarsınız; Hiçbir şey krom sinyali vermiyorsa, xorg sunucusu kapatıldığında ölür ve ekranı kaybolur.
Patrick

@Patrick: Teşekkürler, sanırım öyle. Bu yüzden buna göre '/etc/systemd/system/display-manager.service' bölümündeki '[Servis]' bölümüne 'TimeoutStopSec = 90s' eklemeyi denedim: freedesktop.org/software/systemd/man/systemd.service. html fakat hiçbir şey değişmiyor ... :(
lviggiani

Krom gerektiğini altında systemd'skontrolü - systemdolduğunu pid 1- ancak daha sonra bir alt kabuk ve çağırır çocuk süreçlerindeki sarıcı komut dosyası üzerinden Krom yöneticilerin. Yine de, zygotessisteminiz uygun şekilde yapılandırıldığı sürece, öldürmek için gerekenleri yapar . Arch wiki'de önerilen bulan krom için geçici çözümlerden birini kullanıyor musunuz?
mikeserv

1
Benzer bir problemi Arch on KDE ve Firefox ile de yaşıyorum. Nedenini bulmak için uğraşmadım.
StrongBad

2
GDM sinyal süreçleri değildir. GDM, esasen Xorg ve PAM'ı birbirine bağlamanın aptal bir yoludur. asıl suçlu gnome-session.
strugee

Yanıtlar:


2

Masaüstünüzü zarif bir şekilde kapatmak TimeoutStopSec=için GDM için veya başka bir ekran yöneticisi kullanıyorsanız, yükseltmeniz gerekebilir .


Bana göre GDM hiçbir zaman müşterilerin kapatılıp kapatılamayacağını bilmiyorsa ilk etapta kapatılmasını söylememeliydi.
esrarengizFizikçi

2

Bu benim için Arch Linux'ta Gnome 3.12 ile çalıştı. Bu config içinde belki olabileceği ortaya çıktı /etc/gdm/PostSession/Default.

  1. sudo pacman -S wmctrlWindows yönetimi için wmctrl'yi kurmak için çalıştırın .

  2. Tüm pencereleri kapatmak için çalıştırılabilir bir dosya oluşturun. Örneğin, /home/[your_username]/bin/close-all-windowsşu içeriklere koydum :

    #!/bin/sh
    wmctrl -l | while read -r line
    do
        wmctrl -c `echo "$line" | sed 's/.*  [0-9]* [your_hostname] //'`
    done
    
  3. /etc/gdm/PostSession/DefaultÖnce bu içerikleri değiştirin ve ekleyin exit 0:

    echo " Closing selected windows programs gracefully"
    export DISPLAY=:0
    su [your_username] -c /home/[your_username]/bin/close-all-windows
    

Umarım bunlar işe yarayacak.


Plazma 5 için, bu betiği .config / plasma-workspace / shutdown / dizinine koymak
AF7

-1

sorpass'ın wmctrl betiği benim için iyi çalışıyor (CentOS 7'de önce 'yum install wmctrl' komutunu çalıştırmak zorunda kaldım). Ancak, / etc / gdm / PostSession / Default öğesinin kapanmadan değil, yalnızca oturumu kapattığını göründüğünü gördüm. Bu nedenle, / etc / gdm / PostSession / Default kullanmak yerine şimdi sorpass'ın wmctrl komut dosyasını Seamus Phelan'ın python komut dosyasından şu iki sitede bulabilirim:

Bu komut dizileri birleşimi, CentOS 7 masaüstü bilgisayarımdan çıkarken veya kapattığımda Firefox, Chrome vb. Öğeleri otomatik olarak ve temiz bir şekilde kapatmak için harika çalışıyor. CentOS 7 ile bu python betiğinin çalışması için 'yum install gnome-python2-gnome' komutunu çalıştırmanız gerektiğini unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.