我搜索了很多,但还是没找到在 conky 中显示 nethogs 的方法。nethogs 打印到终端,似乎没有办法实时捕获输出。这是我很久以来一直想要的 conky 功能之一。
答案1
我不这么认为。
nethogs 是一个使用 ncurses 库的交互式进程。它需要在终端窗口中启动并获取用户的输入。
Conky 可以使用 exec/execi/execp/execpi 指令运行程序,但这些程序应该是“运行一次”的程序,输出文本然后退出。Conky 会获取该文本并将其显示出来。
尝试写信给 nethogs 开发人员,看看他是否会添加“批处理”模式,就像命令的批处理模式一样top
。如果您可以让 nethogs 运行一秒钟,然后显示其文本并退出,您可以在 Conky 中使用该文本输出。
答案2
我尝试在 Ubuntu 12.10 上使用 conky 做同样的事情。但后来我有了一个更好的主意:
- 为 gnome-terminal 创建一个新的配置文件(透明、小字体大小,无论您喜欢什么)
- 安装包
devilspie
(你也可以尝试 GTK 版本gdevilspie
- 创建一个新的配置文件,
devilspie
这将有助于摆脱窗口框架边框和菜单
例如/home/<user>/.devilspie/gnome-terminal.ds
内容:
(if (is (window_role) "borderless")
(begin
(undecorate)
(geometry "-0-0")
(below)
(skip_tasklist)
)
)
(geometry "-0-0")
将窗口放置在右下角
当配置文件gnome-terminal.ds
尚未写入/更改时,您必须创建它并停止/重新启动 devilspie 守护进程才能看到任何更改。不要忘记将守护进程添加到您的启动脚本中(XFCE:设置 > 会话和启动)。
现在我们需要一个启动 bash 脚本,你可以像 devilspie 一样将其添加到自动启动中。像这样:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "Usage: `basename $0` <iface>"
exit 1
fi
killall -9 nethogs 2>/dev/null
sleep 5
`sudo -H -u <username> gnome-terminal -e "/usr/bin/nethogs -d 4 $1" --profile=<profile-name> --role=borderless`
exit 0
您必须向脚本传递一个参数来指定目标设备。请注意,sleep
脚本中有一个命令,只是为了确保先前的 nethogs 进程没有运行。