X11はプログラムの出力をttyに「ストリーミング」します。

X11はプログラムの出力をttyに「ストリーミング」します。

ディスプレイマネージャの代わりにbspwm単純な設定ファイルを使用していますが、そこには単純なコマンドが1つしかありません。.xinitrcexec dbus-launch bspwm

dmenu_runたとえば、(sxhkdソースファイルの後に実行される)プログラムを起動するたびに、bspwmrcプログラムの出力はXセッションを開始したttyに直接送信されます.たとえば、これを実行すると、メッセージを無視するのではなくttyにメッセージを書き込みます(私の理解では書くことができるファイル記述子はありませechoん)。echo

私を最も混乱させることはdmenu_runなぜ?

何よりも最悪のことは、一部のプログラム(たとえばw3m)が出力を表示するだけでなく、X11セッションを終了した後もインタラクティブな状態を維持し続けることです。

なぜそしてどうこのようなことが起こりますか?どうやって予防できますか?

答え1

X11はこの方法で実行できますが、実際にはこのように実行してはいけません(または少なくともX11ディスプレイサーバーがファイル記述子を保持し、それを開始するすべての子プロセスと共有することを認める必要があります)。

気に入らない場合は、他のほとんどのようにセッションマネージャを介してXを起動するか、Xセッションのstdout / stderrをファイルにリダイレクトします。

関連情報