wall 无法在 16.04 上向 GUI 终端广播

wall 无法在 16.04 上向 GUI 终端广播

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

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

我无法确定这是否是一个错误或者是某些东西阻止了消息在 GUI 中显示。

我该如何继续?

附加信息:

byobu在 GUI 终端中运行确实可以看到墙上的消息

答案1

由于 gnome-terminal 的工作方式,wall不会将其注册为终端。可以找到更详细的解释这里。我想樱花也是同样的道理。

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

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

答案2

是的,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. 现在让我们把它们放在一起 您可以创建一个不错的脚本来替换您当前的 Wall 应用程序并集成上述所有内容。
    之后,您可以将其添加到 ~/.bashrc alias wall="your_wall_replacement.sh" 这样您就不需要删除当前的 Wall

如果有什么不对的地方,请见谅,因为有人没有让我关注这个问题……如果你们发现有什么奇怪的,请发表评论。

10倍

答案3

正如其他人所建议的,有很多方法,我在这里提出了一种我发现的更直接(简单)的方法(采用 echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: 这里讨论的方法)。

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

这里terminal-no可以通过“tty”命令从另一个终端获取。

tty

/dev/pts/12

相关内容