ArchLinuxで正常なシャットダウン/再起動を実行するためにGNOME Shellを使用しようとしています。閉じるように要求すると、開いているファイルを適切に閉じたり保存したりできるオープンプログラム時間を提供せずにすぐに閉じます。そのため、たとえば、Chromeを再起動するたびにセッションが正しく閉じられなかったというメッセージが表示されます。オンラインで読んだことによれば、systemdがプロセスを終了したときに最初にプロセスを送信し、指定されたタイムアウト内にプロセスが終了しSIGTERM
ないSIGKILL
場合、プロセスは終了します。しかし、私のシステムではその内容がSIGKILL
すぐに送信されたことを確認しましたがSIGTERM
、これがまさにプログラムが異常終了した理由のようです。
私は少し見つけました。文書(正しく読んだ場合)送信前のタイムアウトはSIGKILL
optionsで設定できることがわかりますTimeoutStopSec=
。SIGKILL
オプションで転送を無効にすることもできますSendSIGKILL=
。ただし、これらのオプションを構成する場所が見つかりません。これらのオプションを設定できるシャットダウン/再起動設定ファイルはありますか?
編集する:
いくつかのテストを行った結果、2つの興味深い点が見つかりました。
- このように手動でChromeを閉じると、
killall -SIGTERM chrome
次回の再起動時に正しく閉じられないと文句を言いません。このように閉じるとkillall -SIGKILL chrome
文句が出ます。これは、ChromeがSIGTERMを正しく処理していることを示しています。 - 終了プロセスの出力を見ると、systemdは
Sending SIGTERM...
すぐに印刷してからSending SIGKILL...
以下の説明によると、systemdはプロセスのみを処理します。私が知っている限り、GDMです。これは、問題が次のようになる可能性があることを示しています。
- GDMはサブプロセス(Chromeなど)を正しく終了しません(SIGTERM転送など)。
- あるいは、systemdは子を正しく終了するのに十分な時間を与えずにGDMにSIGKILLメッセージを送信します。
GDMが実際にサブアイテムを閉じる方法を確認/設定する方法はありますか?
答え1
デスクトップを正常にシャットダウンするには、TimeoutStopSec=
GDMまたは使用している他のディスプレイマネージャを増やす必要があります。
答え2
これはArch LinuxとGnome 3.12で私に効果的です。後で私はこれが内部構成に関連している可能性があることを知りました/etc/gdm/PostSession/Default
。
sudo pacman -S wmctrl
Windows管理のためにsetup wmctrlを実行します。すべてのウィンドウを閉じる実行可能ファイルを作成します。たとえば、
/home/[your_username]/bin/close-all-windows
次のように入れました。#!/bin/sh wmctrl -l | while read -r line do wmctrl -c `echo "$line" | sed 's/.* [0-9]* [your_hostname] //'` done
/etc/gdm/PostSession/Default
次の古いコンテンツを編集して追加してくださいexit 0
。echo " Closing selected windows programs gracefully" export DISPLAY=:0 su [your_username] -c /home/[your_username]/bin/close-all-windows
これがうまくいくことを願っています。
答え3
Sorpassのwmctrlスクリプトは私にはうまくいきます(CentOS 7では最初に 'yum install wmctrl'を実行するだけです)。ただし、/etc/gdm/PostSession/Default は終了時ではなくログアウト時にのみ実行されるようです。したがって、/etc/gdm/PostSession/Defaultを使用する代わりに、次の2つのサイトで見つけることができるSeamus PhelanのPythonスクリプトからsorpassのwmctrlスクリプトを呼び出します。
- http://www.linuxquestions.org/questions/linux-desktop-74/gnome-run-script-on-logout-724453/#post3560301
- 管理者権限がない場合は、GNOMEログアウト中にスクリプトをどのように実行しますか?
このスクリプトの組み合わせは、CentOS 7デスクトップコンピュータのログアウトまたはシャットダウン時にFirefox、Chromeなどを自動的に完全にシャットダウンするのに適しています。 CentOS 7でこのPythonスクリプトが正しく機能するには、「yum install gnome-python2-gnome」を実行する必要があります。