Próbuję uzyskać płynne zamknięcie / ponowne uruchomienie w ArchLinux z GNOME Shell. Teraz, gdy proszę o zamknięcie, natychmiast się wyłącza, nie dając programom czasu na pełne wdzięczne zamykanie / zapisywanie otwartych plików. W rezultacie za każdym razem, gdy ponownie uruchamiam Chrome (na przykład), mówi mi, że sesja nie została poprawnie zamknięta itp. Czytając w Internecie dowiedziałem się, że system został zamknięty podczas zamykania procesów, najpierw wysyła znak „ SIGTERM
a”, SIGKILL
jeśli proces się nie zamyka z określonym limitem czasu. Zauważam jednak, że w moim systemie SIGKILL
jest wysyłany natychmiast po nim SIGTERM
i myślę, że jest to przyczyną nieoczekiwanego zakończenia programów.
Znalazłem dokumentację, która (jeśli poprawnie ją odczytam) określa ten limit czasu przed wysłaniemSIGKILL
można ustawić TimeoutStopSec=
opcjonalnie. Również wysyłanie SIGKILL
może być wyłączone przez SendSIGKILL=
opcję. Ale nie mogę znaleźć, gdzie skonfigurować te opcje ... czy istnieje plik konfiguracji systemu zamykania / ponownego uruchamiania systemu, w którym mogę ustawić te opcje?
EDYTOWAĆ:
Zrobiłem test i odkryłem dwie interesujące rzeczy:
- Jeśli ręcznie zamknę Chrome w ten sposób
killall -SIGTERM chrome
, nie będzie narzekać, że nie został poprawnie zamknięty przy następnym uruchomieniu. Jeśli zamiast tego zamknę to w ten sposóbkillall -SIGKILL chrome
, będzie narzekać. To mówi mi, że chrome poprawnie obsługuje SIGTERM. - Patrząc na wynik mojej procedury zamykania, wydruk systemowy
Sending SIGTERM...
natychmiast po nimSending SIGKILL...
Zgodnie z komentarzem poniżej systemd obsługuje tylko swoje procesy. Więc w moim przypadku GDM. To mówi mi, że problemem może być:
- albo GDM nie zamyka poprawnie swoich procesów potomnych (np. Chrome) (tj. wysyłając do nich SIGTERM)
- lub systemd wysyła do GDM komunikat SIGKILL na wczesny czas, nie dając mu czasu na prawidłowe zamknięcie swoich elementów potomnych.
Czy istnieje sposób sprawdzenia / skonfigurowania, w jaki sposób GDM zamyka swoje dzieci?
źródło
systemd's
kontrolą -systemd
jestpid 1
- ale Chrome wykonuje skrypt otoki w podpowłoce i wywołuje procesy potomne. Mimo to zrobi wszystko, co konieczne, aby go zabićzygotes
, o ile system jest odpowiednio skonfigurowany. Czy używasz jednego z tych tymczasowych rozwiązań dla Chrome, które znajdziesz w wiki Arch?gnome-session
.Odpowiedzi:
Aby z wdziękiem wyłączyć komputer, może być konieczne podniesienie poziomu
TimeoutStopSec=
GDM lub innego używanego menedżera wyświetlania.źródło
To działało dla mnie na moim Arch Linuxie z Gnome 3.12. Okazało się, że może to być związane z konfiguracją w
/etc/gdm/PostSession/Default
.Uruchom,
sudo pacman -S wmctrl
aby zainstalować wmctrl do zarządzania systemem Windows.Utwórz plik wykonywalny do zamknięcia wszystkich okien. Na przykład umieszczam go
/home/[your_username]/bin/close-all-windows
z następującymi treściami:Zmodyfikuj
/etc/gdm/PostSession/Default
i dodaj te treści przedexit 0
:Mam nadzieję, że to zadziała.
źródło
skrypt wmctrl sorpass działa dla mnie dobrze (na CentOS 7 musiałem najpierw uruchomić „yum install wmctrl”). Odkryłem jednak, że / etc / gdm / PostSession / Default wydaje się działać tylko przy wylogowaniu, a nie przy wyłączaniu. Dlatego zamiast używać / etc / gdm / PostSession / Default, teraz wywołuję skrypt sorpass wmctrl ze skryptu pythonowego Seamusa Phelana, który można znaleźć na tych dwóch stronach:
Ta kombinacja skryptów świetnie nadaje się do automatycznego i czystego zamykania przeglądarki Firefox, Chrome itp. Po wylogowaniu lub wyłączeniu komputera stacjonarnego CentOS 7. Zauważ, że w CentOS 7 musisz uruchomić 'yum install gnome-python2-gnome', aby skrypt działał.
źródło