
放送メッセージの振る舞いが気になります
$ sudo wall myfile
のメッセージはmyfile
すべてのデバイス(/dev/ttyN
+ +を押して切り替え可能なデバイス)に表示され、開いているウィンドウにも表示されますが表示されません(実際に私はLinux MintとMATEを使用しているので、それは)のフォークです。CtrlAltfNxterm
gnome-terminal
mate-terminal
gnome-terminal
tmux
実行すると、もう1つ興味深い注意があります。実行中のすべてのターミナルセッション(すべてのウィンドウとすべてのウィンドウのすべてのウィンドウ)xterm
にメッセージが表示されると予想しましたが、実際にはメッセージは現在のカーソル位置のウィンドウにのみ表示されます。tmux
xterm
tmuxを呼び出して現在制御されている端末を確認すると、tty
tmuxの複数のウィンドウに対して異なる端末が報告されます。たとえば、/dev/pts/11
1つのtmuxウィンドウがあり、/dev/pts/12
別のウィンドウがあります。ただし、ブロードキャストメッセージはウィンドウごとにxterm
1回だけ表示され、で開かれた端末セッションごとに1回は表示されませんtmux
。
私が見ると、端末エミュレータが疑似端末を割り当てるときにブロードキャストメッセージを受信できるように、どこかに「登録」する必要があるようです。だからxterm
そうですが、そうではありませmate-terminal
んtmux
。しかし、これは奇妙に聞こえます。擬似端末はカーネルによって割り当てられ、必要に応じて自動的に「登録」する必要があるからです。
誰かがこれがどのように動作するのか、そしてなぜこの動作がこのようなのか(不思議に思われるのか)説明できればうれしいです。
答え1
リストされている端末は、Linuxでこの動作が発生することを示します。手がかりはマニュアルページにあります。wall
(ソラリスたとえば異なる):
wall
現在、すべての端末の端末にメッセージ、ファイルの内容、またはその他の標準入力を表示します。ログインユーザー。たとえば、いくつかのセッションは
wdm
次から始まります。ポンプ(5)ut_type
データの「:」文字を使用すると、そのデータからメッセージを取得できませんwall
。これは書き込みエラーを防ぐために行われます。
つまり、wall
utmpデータを使用して、使用している端末(ログインしているユーザーなど)を見つけて関連コンテンツを作成します。装備。出力の各行には、w
utmpファイルの端末によって記録された(可能な)端末が表示されます。たとえば、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)ログインシェルと非ログインシェルの間に心配する違いはありません。これにより、いくつかの興味深いエラーレポートが生成されました。
答え2
にurxvt
発行する必要があります。
chown root.utmp /usr/bin/urxvt
chmod g+s /usr/bin/urxvt
それから私は働き始めました。
理由がわからない。その後コピー(およびテスト)しました。http://permalink.gmane.org/gmane.comp.terminal-emulators.rxvt-unicode.general/1484。