16.04で壁がGUI端末にブロードキャストされない


11

タイトルはそれを要約しています。実行wall <<< "TEST"すると、TTYでメッセージが表示されますが、GUIターミナルでは表示されません(gnome-terminalおよびでテスト済みsakura)。

wallメッセージの出力に依存するいくつかのバッテリーおよび温度監視スクリプトがあり、最近16.04にアップグレードした後、GUIでの動作が停止したことに気付きました。

これがバグなのか、メッセージがGUIに表示されないのかを判断できません。

どうすればいいですか?

追加情報:

byobuGUIターミナルで実行すると、ウォールメッセージを表示できます


2
おそらくに関連askubuntu.com/questions/12654/...(に見てxmessagegxmessage、またはnotify-send
ニック・ワインバーグ

6
私はそれを今日早く読みました。はい、多少関連していますが、1)その質問は10.10からであり、ウォールは14.04で機能しているという2)という大きな反対が あります。notify-send 短いメッセージとGUIでのみ機能します。wallすべての端末のための一つのコマンドを使用して、代わりのTTYのためにとGUIのために、その他の上にある他のすべてのセッションのために何かを書くのは良い利便性があるDISPLAYのを、ので、これは非常に良い選択肢はありませんが、少なくとも、私見
Sergiy Kolodyazhnyy

私は15.010で最近同じ問題を抱えていました。16.04 Ubuntu MateのImで、ここで機能しているようです。おそらく、基礎となるライブラリに問題があります。たぶん、mesgコマンドの機能を見てください。shutdown -k 5はすべての仮想端末で動作しますか?書き込みは適切に機能しますか?動作していない別のマシンを見つけた場合は、ソースコードを調べます。ユーザースペースライブラリの問題を推測しています。
j0h

1
@ j0hの実際には、この問題はgnome-terminalが原因です。以前はログインレコードを更新するため、たとえばwho以前にgnomeターミナルで実行した場合、開いているタブはすべて表示しますが、もう表示しません。Wallは、ログインレコードを更新するターミナルセッションにのみメッセージを送信します。Mateはデフォルトで異なるターミナルを使用します。私はずっと前にこれを理解しましたが、実際には答えを投稿しませんでした。今週のある時点でそうするでしょう。
セルギーKolodyazhnyy

私はあなたがこれをハック可能性がどのようにアイデアを持っている:<BR>
Stancuミハイ

回答:


5

gnome-terminalの動作方法によりwall、ターミナルとして登録しません。ここでより完全な説明を見つけることができます。同じことが桜にも当てはまると思います。

Stancu Mihaiの回答に基づいて、ユーザー名とタイムスタンプ付きのバナー(バナーを削除するには-nまたは--nobannerを使用)など、通常の動作を模倣するスクリプトを作成しましwall。スクリプトは現在、ファイルからのメッセージの読み取りをサポートしていません。

wallエイリアスを追加することにより、通常のコマンドをこれに置き換えることができます~/.bashrc

echo 'alias wall="~/your/path/to/wall.sh"' >> ~/.bashrc

使用例:

$ wall "some message"

Broadcast message from username@hostname (pts/19) (Wed Mar 29 11:07:35 2017):

some message

$ wall -h

Usage:
 wall [options] [message]

Write a message to all users.

Options:
 -n, --nobanner          do not print banner
 -h, --help              display this help and exit

素晴らしい仕事@danmou!
Stancuミハイ

1

はい、gnome-terminalはログインレコードを更新しないのは事実です。そのため、別の解決策を見つけようとします。

  1. すべてのアクティブな擬似端末を見つけましょう
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

これは、すべてのデスクトップ端末セッションをリストするのに役立ちます。

アクティブなデスクトップターミナルセッションにメッセージを送信する別の方法

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. ttyセッションを忘れないでください
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

これは、すべてのptyセッションをリストするのに役立ちます

  1. すべてにメッセージを送信する
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. それでは、すべてをまとめましょう 。現在のウォールアプリを置き換える素敵なスクリプトを作成して、上記のすべてを統合できます。
    その後、〜/ .bashrcに追加できます alias wall="your_wall_replacement.sh" 。この方法では、現在の壁を削除する必要はありません。

誰かが私にこの主題に焦点を合わせさせなかったので、何かが正しくない場合は申し訳ありません...皆さんが奇妙なことに気づいたらコメントを残してください。

10倍


これがワンライナーです。awkをcutに置き換えたため、引用の種類が1つだけになりました。ps -ef | grep -e " tty" -e " pts/" | tr -s " " | cut -d " " -f 6 | sort -u | while read TTY; do echo "MESSAGE" | tee /dev/$TTY 1>/dev/null; done
CJxD

0

他の人が多くの方法があることを示唆しているように、私はここで私が見つけたより直接的な(簡単な)方法をここに置いた(echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: ここで 議論された採用)。

echo "Your message" > /dev/pts/$terminal-no

ここでは、terminal-no「tty」コマンドを介して他の端末から取得できます。

tty

/dev/pts/12

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.