有没有办法在 conky 中显示 nethogs 输出?

有没有办法在 conky 中显示 nethogs 输出?

我搜索了很多,但还是没找到在 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 进程没有运行。

相关内容