世界はあなたが画面をきれいにしたいです。

世界はあなたが画面をきれいにしたいです。

同じユーザーとしてログインtty1してtty2Xサーバーセッションを開始するtty1と、ログアウトするとすぐにtty2Xサーバーセッションがtty1クラッシュします。

これは既知のバグのようです:

バグレポートを読んだように、問題はclear_consolein呼び出しにあります~/.bash_logout。その行を削除すると、すべてがうまく機能します。

私の質問:

私はどんな変化も見つけられませんでした。 (もちろん、Xサーバーがクラッシュしないことを除いて)ログアウトすると、その行を削除してもコンソールは消去されます。では、clear_consoleそもそもそこに電話する目的は何ですか?

答え1

世界はあなたが画面をきれいにしたいです。

私が言ったようにhttps://unix.stackexchange.com/a/233855/5132実際にメーリングリスト討論で間接的に引用されたりもしました☺…

Greg Wooledgeや他の人が見つけたように、ログアウトとその後のログインの間に仮想端末を消去したくないのは、実際には傾向に反していることです。特権ユーザーまたは上司がログアウトした後も持続する機密出力は、1970年代からUnices(および実際には別の時分割リモートアクセスオペレーティングシステム)のセキュリティ上の問題であり、これらのすべての出力を取り消すにはかなりの努力が必要です。この問題を避けるために人々が置いたもの。ご覧のとおり、これを行うためにいくつかの入れ子になったメカニズムを紹介します。

  • 多くのシステムでは、clear_consoleシェルログアウトスクリプトに標準コマンドがあります。 (カーネル仮想端末#1で実行されるグラフィックプログラムではうまく動作せず、他の種類の端末(仮想または実際)では動作しないため、これ自体が問題になります。)

    このコマンドは削除する必要があります。

  • たとえば、仮想端末を対象とするgettyプログラムのデフォルト設定は、端末を消去することmingettyです。 (ログインする前にこれを行います。つまり、TTYログインサービスが停止した場合、ターミナル出力は削除されていない可能性があります。皮肉なことに、この機能はより良い場所に配置されている可能性があります。PAMlogin属性が必要ですのでログアウトしても実行されます。

    --noclearこの機能を無効にするには、このオプションを展開する必要があります。システムオペレーティングシステムでは、これには、ファイルを上書きしたり、設定を変更したり、ExecStart単に[email protected]自分が設計したローカルデバイスファイルを指す1つ以上のユニットファイルを作成することが含まれます。

  • systemd が提供する[email protected]テンプレートサービスユニットセットは、TTYVTDisallocate=yessystemd にカーネル仮想端末をクリアするよう指示します。 (これは名前が部分的に反映されるため、ユーザー空間の仮想端末を含む他の種類の端末では機能しません。)

    また、上書きまたは指定された他のサービステンプレートを使用して再度削除する必要があります[email protected]

もちろん、正確に重なりません。 mingettyシリアルデバイスを介して接続された実際の端末には役に立ちません。clear_console奇妙なことに、Bourne Againシェルパッケージの一部であり、Korn、Z、Almquist、Fish、Watanabeなどを使用するユーザーアカウントの対話型ログインシェルとしては使用されません。人々が呼び出すシェルは、システムではTTYVTDisallocateなくオペレーティングシステムでは機能しません。

私が数年前のメーリングリストの議論で述べたように、console_clearこれは倍増する必要はありません。 2011年以来、Linux組み込み端末エミュレータは3スクロールバックバッファをクリアするED制御シーケンスをサポートしているため、当初はこれらの有害な副作用のある仮想端末を切り替える必要はありません。数年前、私はconsole-clearこの制御シーケンスをエクスポートするnoshツールセットにコマンドを追加しました(したがって、Linux組み込みターミナルエミュレータで使用できるだけでなく、リモート接続を介しても機能できます)。 ncursesコマンドは、terminfoによると、clear関連する制御シーケンスを実行する方法も知っています。

もちろん、通常console-terminal-emulator、端末の表示バッファは停止するとクリアされます。

追加読書

答え2

~によるとdlocateclear_console(Debian)bashパッケージの一部です。アップストリームの一部ではありませんbash源泉。これパッケージ変更ログいつ/どこから来たのか教えてください:

— マティアス・クローゼ 2006年3月23日木曜日 01:16:22 +0100

bash(3.1-3)緊急度=低。

...

  Ubuntuからマージ:
  *clear_console: 以下を含むコンソールを消去する新しいヘルパー
    スクロールバックバッファ。
  * /etc/skel/.bash_logout: 再インストールしてclear_consoleを使用します。
    Ubuntu#29405。閉じる:#331504。

引用されたバグレポートには、これを追加した理由が記載されています。

  • Ubuntu#29405、2006年1月「終了」の前に「clear」を実行しないでください。

    F1-F6端末からログアウトすると、次のログイン画面が表示されますが、既存のすべてのアクティブ出力が画面に残ります。他のユーザーが個人出力を表示できないように、新しいログインが発生する前に画面を消去する必要があります。

  • Debian #331504、2005年10月bash:デフォルトの/etc/skel/.bash_logoutを提供します。

    bashがユーザーがコンソールを介してログインしたときに画面を消去するためにデフォルトで使用できるように、/ etc / skelにデフォルトの.bash_logoutを提供したことをお勧めします。これは、特に人々が他のものを望まないマルチユーザーの一般的な要求です。人々は自分が何をしているのかを知るために環境を利用します。

ところで、これは関連呪いここで:

前者は機能を適用することによって解決される。xtermパッチ #1071999(Linuxコンソールの場合)、後者はライセンスの非互換性のために何の成果も得られませんでした。

答え3

プライバシーとセキュリティと関係があると思います。セッション終了後、自分が何をしているのか他人に公開するのは賢明ではありません。私のDebianでは、エントリ全体.bash_logoutは次のとおりです。

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

$SHLVLチェーンの最初のシェルの場合、値は1です。 (シェルから新しいシェルを起動でき、これが増加しますSHLVL。)最初のセッションを終了してコンソールを転送し、誰にでもメッセージを表示した場合、コンソールは承認されていない人がセッションの内容にアクセスできないようにする必要があります。

答え4

initシステムの構成により、ttyが消去されています。最近はおそらくsystemd

systemdの場合はTTYVTDisallocatenoに設定されます。

これを行うには、systemctl edit getty@tty1 次のコードを実行して入力します。

[Service]
TTYVTDisallocate=no

https://askubuntu.com/questions/58097/how-can-i-remove-the-clear-screen-before-login/781923#781923

このコメントは、sysvinitで利用可能な設定--noclearオプションにも言及するより長いページを指しますgetty

http://mywiki.wooledge.org/SystemdNoClear

getty最後に、明示的な機能(およびgettyのオプション)がすべてのバージョンで利用できない可能性があります。--noclear

システム管理者は、ログインプロンプトを表示する前に常にコンソールを消去するように設定できます。最も簡単な方法は、gettyの代わりにMingettyを使用することです。シリアルコンソールのサポートは失われますが、画面の消去などの一部の機能は入手できます。

-ログアウト後に端末を削除するにはどうすればよいですか?回答は2010年に公開されました。

したがって、bash_logoutはおそらく他のgettyに切り替えずに画面を消去する唯一の方法です。

関連情報