tty1
とtty2
で同じユーザーでログインし、tty1
でXサーバーセッションを開始すると-tty2
からログアウトするとすぐに、Xサーバーセッションtty1
でクラッシュします。
これは既知のバグのようです:
バグレポートで読むことができるように、問題はclear_console
の~/.bash_logout
の呼び出しにあります。その行を削除すると、すべて正常に機能します。
私の質問:
何の変化もありませんでした。 (明らかに、Xサーバーがクラッシュしなくなったことは別として。)ログアウトすると、その行を削除しても、コンソールはクリアされます。では、そもそもclear_console
への呼び出しは何ですか?
私が https://unix.stackexchange.com/a/233855/5132 で言ったように、そして実際に間接的に参照されたメーリングリストの議論で☺…
Greg Wooledgeや他の人たちが発見したように、ログオフとその後のログオンの間に仮想端末をクリアしたくないというのは、潮流に逆らって非常に泳いでいます。 1970年代以降、ログオフ後に残る特権ユーザーまたはボスからの機密出力の存在は、Unices(および実際には他のタイムシェアリングリモートアクセスオペレーティングシステム)のセキュリティ問題であり、すべてを元に戻すには多大な労力が必要です。この問題を回避するために人々が投入したもの。あなたが観察したように、彼らはこれを行ういくつかの重複するメカニズムを導入しました。
clear_console
コマンドがあります。 (これは、カーネル仮想端末#1で実行されているグラフィカルプログラムではうまく機能せず、仮想または実数の他の種類の端末では機能しないため、それ自体で問題があります。)このコマンドは削除する必要があります。
mingetty
などの仮想端末を対象としたgettyプログラムのデフォルトは、端末をクリアすることです。 (これはログオン前に行われます。つまり、TTYログインサービスが停止した場合でも端末出力は消去されないままになります。皮肉なことに、この機能はlogin
に配置したほうがよいでしょう。これは、PAMの必要性のおかげでまだ残っています。ログオフ時に実行されます。)これを無効にするには、--noclear
オプションを展開する必要があります。 systemdオペレーティングシステムでは、これには、1つ以上のユニットファイルオーバーライドファイルの書き込み、ExecStart
設定の変更、または単に[email protected]
を自分で考案したローカルユニットファイルに向けることが含まれます。
[email protected]
テンプレートサービスユニットセットTTYVTDisallocate=yes
は、systemdにカーネル仮想端末をクリアするように指示します。 (これも、名前に部分的に反映されているように、ユーザースペースの仮想端末でさえも、他の種類の端末では機能しません。)これも、オーバーライドまたは[email protected]
が指す別のサービステンプレートを使用して削除する必要があります。
もちろん、それらは完全に重複しているわけではありません。 mingetty
は、シリアルデバイスを介して接続された実際の端末には役立ちません。 clear_console
は、奇妙なことに、Bourne Again Shellパッケージの一部であり、Korn、Z、Almquist、Fish、Watanabe、またはその他のシェルをユーザーアカウントのインタラクティブログインシェルとして使用しているユーザーによって呼び出されません。また、systemd TTYVTDisallocate
メカニズムは、systemd以外のオペレーティングシステムには適用できません。
数年前のメーリングリストの議論で言ったように、console_clear
は二重に不要です。 2011年以降、Linuxの組み込み端末エミュレーターはスクロールバックバッファーをクリアするためのED 3
制御シーケンスをサポートしているため、これらの有害な副作用がある仮想端末の切り替えをいじくり回す必要はありません。数年前にnoshツールセットにconsole-clear
コマンドを追加しました。これは、この制御シーケンスを発行します(したがって、Linuxの組み込みターミナルエミュレーターだけでなく、リモート接続でも使用できます)。 ncurses clear
コマンドは、terminfoがそう言っている場合、関連する制御シーケンスを発行することも最近知っています。
そしてもちろん、console-terminal-emulator
は、標準で端末のハングアップ時に表示バッファーをクリアします。
console-terminal-emulator
。 noshガイド。ソフトウェア。console-clear
。 noshガイド。ソフトウェア。dlocate
によると、clear_console
は(Debian)bashパッケージの一部です。アップストリームbash
ソースの一部ではありません。 パッケージ変更ログ は、いつ/どこから来たのかを示します。
-MatthiasKlose Thu、2006年3月23日01:16:22 +0100 bash(3.1-3)不安定; urgency = low ... Ubuntuからのマージ: * clear_console:[.____を含むコンソールをクリアするための新しいヘルパープログラム。]スクロールバックバッファ。 * /etc/skel/.bash_logout:再度インストールし、clear_consoleを使用します。 Ubuntu#29405。終了:#331504。
参照されているバグレポートには、追加された理由が記載されています。
F1-F6端末からログアウトすると、次のログイン画面が表示されても、既存のアクティビティの出力はすべて画面に残ります。新しいログインが表示される前に画面をクリアして、他のユーザーがプライベート出力を表示しないようにする必要があります。
Bashが/ etc/skelにデフォルトの.bash_logoutを提供し、ユーザーがコンソールからログインするときにデフォルトで画面をクリーンアップするために使用できると便利です。これは一般的なリクエストであり、特にユーザーが他のユーザーを望まないマルチユーザー環境ではそうです。彼らが何に取り組んでいるかを見るために。
ちなみに、それはここでncursesと関連して言及されました:
前者は、1999年に xterm
パッチ#107 の機能を適応させることで解決されました(Linuxコンソール用) )、後者はライセンスの非互換性のためにどこにも行きませんでした。
これはプライバシーとセキュリティに関係していると思います。終了したセッションで行ったことを誰かの目に開いたままにしておくのは賢明ではありません。私のDebianでは、.bash_logout
の完全なエントリは次のとおりです。
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
$SHLVL
は、チェーンの最初のシェルの場合は1です。 (シェルから新しいシェルを開始できます。これにより、SHLVL
がインクリメントされます。)最初のセッションを終了して、コンソールとプロンプトを誰かに渡すと、コンソールはセッションのコンテンツにアクセスできないようにする必要があります。無許可の目に、そしてそうします。
Initシステムの設定により、ttyがクリアされています。今日では、おそらくsystemd
。
systemdの場合、
TTYVTDisallocate
をnoに設定します。これを実現するには、
systemctl edit getty@tty1
を実行し、以下のコードを入力します[Service] TTYVTDisallocate=no
https://askubuntu.com/questions/58097/how-can-i-remove-the-clear-screen-before-login/781923#78192
コメントは、sysvinitで使用できる構成(getty
の--noclear
オプション)についても言及している長いページを指しています。
http://mywiki.wooledge.org/SystemdNoClear
最後に、getty
の明確な機能(したがって、gettyの--noclear
オプション)がすべてのバージョンに存在しているわけではないようです。
システム管理者は、ログインプロンプトを表示する前にコンソールを常にクリアするように設定できます。これを行う最も簡単な方法は、gettyの代わりにmingettyを使用することです。シリアルコンソールのサポートは失われますが、画面のクリアなどのいくつかの機能が得られます。
-- ログアウト後にターミナルをクリアする方法は? 2010年に投稿された回答。
したがって、bash_logoutは、別のゲッティに切り替えることなく画面をクリアする唯一の方法であった可能性があります。