wall 不会在 16.04 上广播到 GUI 终端

Ser*_*nyy 11 16.04

标题总结了它。运行wall <<< "TEST"在任何 TTY 中显示消息,但不在任何 GUI 终端中显示(使用gnome-terminal和测试sakura)。

我有几个依赖于wall消息的电池和温度监控脚本,在最近升级到 16.04 后,我注意到它们在 GUI 中停止工作。

我无法确定这是错误还是阻止消息在 GUI 中显示的原因。

我应该如何进行?

附加信息:

byobu在 gui 终端中运行确实允许查看墙消息

小智 5

由于 gnome-terminal 的工作方式,wall不会将其注册为终端。更详尽的解释可以在这里找到。我认为樱花也是如此。

基于Stancu Mihai 的回答,我创建了一个模仿wall通常工作方式的脚本,包括带有用户名和时间戳的横幅(使用 -n 或 --nobanner 删除横幅)。该脚本目前不支持从文件中读取消息。

您可以wall通过在~/.bashrc以下位置添加别名来替换普通命令:

echo 'alias wall="~/your/path/to/wall.sh"' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

用法示例:

$ 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
Run Code Online (Sandbox Code Playgroud)


Sta*_*hai 3

是的,gnome-terminal 确实不会更新登录记录,因此我尝试找出另一个解决方案:

  1. 让我们找出所有活动的伪终端
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt
Run Code Online (Sandbox Code Playgroud)

这可以帮助您列出所有桌面终端会话。

向活动桌面终端会话发送消息的另一种方法

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
Run Code Online (Sandbox Code Playgroud)
  1. 不要忘记 tty 会话
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt
Run Code Online (Sandbox Code Playgroud)

这可以帮助您列出所有 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
Run Code Online (Sandbox Code Playgroud)
  1. 现在让我们把它们放在一起 您可以创建一个漂亮的脚本来替换您当前的墙应用程序并集成上述所有内容。
    之后你可以添加到你的 ~/.bashrc alias wall="your_wall_replacement.sh" 这样你就不需要删除当前的墙

抱歉,如果有什么不对劲的地方,因为有人没有让我专注于这个主题……如果你们注意到一些奇怪的事情,请发表评论。

10倍