web-dev-qa-db-ja.com

コンソールにログインした直後にxserverを自動起動すると、.bash_logoutまたは.zlogoutが解析されません

私は一線を画した:

[[ -z $DISPLAY && $XDG_VTNR -le 4 ]] && exec startx

(Arch Wikiのすぐ外).xinitrcの最後で、コンソールにログインした直後にXserverを起動します。

セッションを終了するときはいつでも、bashまたはzshの使用に関係なく、.xinitrcで開始されたデーモンはログアウト時に強制終了されません。

.bash_logout/.zlogoutが解析されていないようで、基本的には次のように保持します。

kill -15 -1 &&

その問題とおそらく解決策を持っている他の誰か?

1
Mono

exec ビルトインは、指定されたプログラムによってシェルを置き換えます。その時点以降、シェルは.*logoutをロードするために存在しなくなります。

いずれにせよ、.xinitrcを実行するシェルはログインシェルではないため、.*logoutファイルは実行されませんが、そのシェルはstartxを実行する場所ではありません。これは、xinitによって実行されるstartxからロードされるファイルです。

グラフィカルセッションからログアウトした後に何かを実行したい場合は、シェルを実行し続け、startxの後に実行するものを指定する必要があります。 exec startx行が.profileまたはログインシェルによって実行される同様のファイルにあると仮定すると、Xセッションがアクティブである間、シェルを実行し続ける必要があり、次にexit(インタラクティブシェルによるGUIセッションに従わないでください)。

if [[ -z $DISPLAY && $XDG_VTNR -le 4 ]]; then
  if startx; then
    # We just exited an X session.
    exit
    # If your login Shell is bash, it runs ~/.logout at this point.
  else
    echo >&2 "The X session aborted with an error, dropping to a text Shell"
  fi
fi