ブロードキャストメッセージはgnome端末には表示されませんが、xtermには表示されません。

ブロードキャストメッセージはgnome端末には表示されませんが、xtermには表示されません。

放送メッセージの振る舞いが気になります

$ sudo wall myfile

のメッセージはmyfileすべてのデバイス(/dev/ttyN+ +を押して切り替え可能なデバイス)に表示され、開いているウィンドウにも表示されますが表示されません(実際に私はLinux MintとMATEを使用しているので、それは)のフォークです。CtrlAltfNxtermgnome-terminalmate-terminalgnome-terminal

tmux実行すると、もう1つ興味深い注意があります。実行中のすべてのターミナルセッション(すべてのウィンドウとすべてのウィンドウのすべてのウィンドウ)xtermにメッセージが表示されると予想しましたが、実際にはメッセージは現在のカーソル位置のウィンドウにのみ表示されます。tmuxxterm

tmuxを呼び出して現在制御されている端末を確認すると、ttytmuxの複数のウィンドウに対して異なる端末が報告されます。たとえば、/dev/pts/111つのtmuxウィンドウがあり、/dev/pts/12別のウィンドウがあります。ただし、ブロードキャストメッセージはウィンドウごとにxterm1回だけ表示され、で開かれた端末セッションごとに1回は表示されませんtmux

私が見ると、端末エミュレータが疑似端末を割り当てるときにブロードキャストメッセージを受信できるように、どこかに「登録」する必要があるようです。だからxtermそうですが、そうではありませmate-terminaltmux。しかし、これは奇妙に聞こえます。擬似端末はカーネルによって割り当てられ、必要に応じて自動的に「登録」する必要があるからです。

誰かがこれがどのように動作するのか、そしてなぜこの動作がこのようなのか(不思議に思われるのか)説明できればうれしいです。

ベストアンサー1

リストされている端末は、Linuxでこの動作が発生することを示します。手がかりはマニュアルページにあります。wallソラリスたとえば異なる):

wall現在、すべての端末の端末にメッセージ、ファイルの内容、またはその他の標準入力を表示します。ログインユーザー

たとえば、いくつかのセッションはwdm次から始まります。ポンプ(5) ut_typeデータの「:」文字を使用すると、そのデータからメッセージを取得できませんwall。これは書き込みエラーを防ぐために行われます。

つまり、wallutmpデータを使用して、使用している端末(ログインしているユーザーなど)を見つけて関連コンテンツを作成します。装備。出力の各行には、wutmpファイルの端末によって記録された(可能な)端末が表示されます。たとえば、SSHを介してサーバーに接続し、コンソールにログインして画面を起動します。完全性のために-ls(login-shell)オプションを使用してxtermを実行しています。出力は次のとおりですw

$ w
 19:53:15 up  4:08,  5 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
tom      tty2                      19:48    5:11   0.04s  0.02s -tcsh
tom      pts/0    michener:S.0     15:51   13:18   0.35s  0.24s ssh -X thomas@b
tom      pts/2    michener:S.1     16:34    2.00s  0.14s  0.00s sh -c w
tom      pts/4    michener:S.3     15:52    3:59m  0.12s  0.00s /bin/sh /users/
tom      pts/3    localhost:10.0   19:53    7.00s  0.03s  0.03s -tcsh

wall各デバイスTTYに書き込みます。

ただし、端末の場合いいえutmpファイルに書き込むと、リストされず無視されますwall

これで、一部のプログラムはこの機能をコンパイルしましたが、それを変更する権限がない可能性があります。これが一部のプログラムがsetgid「utmp」グループで実行される理由です。他のプログラム(xtermやgnome-terminalなど)は、自分の代わりにutmpを更新する外部プログラムを使用できます。

gnome-terminalの場合、この機能は廃止されました。なぜなら、gnome開発者の考え方は、(a)ユーザーがローカルシステムで実行されているということです。gdmログインを処理するので、(b)ログインシェルと非ログインシェルの間に心配する違いはありません。これにより、いくつかの興味深いエラーレポートが生成されました。

おすすめ記事