标题概括了一切。运行会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 确实不会更新登录记录,因此我尝试找出另一种解决方案:
- 让我们找出所有活动的伪终端
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt
这可以帮助您列出所有桌面终端会话。
向活动桌面终端会话发送消息的另一种方法
echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
- 不要忘记 tty 会话
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt
这有助于您列出所有 pty 会话
- 向所有人发送消息
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
- 现在让我们把它们放在一起
您可以创建一个不错的脚本来替换您当前的 Wall 应用程序并集成上述所有内容。
之后,您可以将其添加到 ~/.bashrcalias 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