系统信息无闪烁 OSD 显示

系统信息无闪烁 OSD 显示

我正在尝试运行一个小脚本来显示有关 CPU 和 GPU 使用情况的信息。脚本完成,输出信息格式如下

  CPU     2%    37C
  GPU     0%    56C

我也通过显示它扩展名使用第二个脚本:

#!/bin/sh

file=$(mktemp --suffix=osdtmp)

tail -f $file | osd_cat -o 30 -i 5 -d 1 -l 2 - &

while true; do
    ./temps.sh >> $file
done

rm -f $file

该脚本读取文件中的任何更改并刷新屏幕上显示的两行。我的问题是,每当刷新数据时,就会出现明显的闪烁,这很烦人。

我不必使用 xosd,但这似乎是完成这项工作的最佳工具。

如何显示小文本叠加层并定期刷新它而不闪烁?

答案1

我知道这是一篇旧帖子,但我在网上搜索时发现这是唯一的。

你可以做的是先打印不改变的元素,比如 CPU % C

然后使用 osd_cat 的另一个进程打印发生更改的值。

我发现使用流行的示例将具有睡眠状态的循环的输出通过管道传输到 osd_cat 会导致它们不同步,甚至更加闪烁。

例如,我是这样做的:https://github.com/kevinlekiller/shell_scripts/blob/main/misc/osd_stats.sh

编辑:使用我提供的解决方案,没有闪烁,但是 osd_cat 在屏幕上打印之间有一个转换,这是因为 osd_cat 进程终止,然后必须计算字符串并再次调用 osd_cat,我们看到的转换,是在时间之间。

我们可以通过在循环中分叉对 osd_cat 的调用来消除这个转换时间,然后我们在循环内使用 sleep,延迟比我们为 osd_cat 的时间稍低,这可能会导致几毫秒的重叠,但我们没有看到转变。我将编辑上面链接的脚本并添加这些更改。

相关内容