[App Sharing] dde-dock系统监控小插件(网速CPU内存电池)
Tofloor
poster avatar
q77190858
deepin
2019-06-18 05:05
Author

deepin托盘系统监视器

deepin系统监控dock插件,可监控CPU使用率、内存使用率、swap使用率、上传下载总量、实时网速和电池放电功率,有文字模式和图表模式可选


一、参考项目

二、图片展示

alt alt alt alt

上四图分别是插件在文字模式和图表模式下的表现,并且插件的可配置性很高

alt alt

右键菜单中有设置选项,可以设置各个模式下的显示内容

三、下载安装方式

1. 码云一键下载安装

deepin20.7 测试可用

wget https://gitee.com/q77190858/dde-sys-monitor-plugin/raw/master/bin/libsys_monitor.so && \
 sudo mv libsys_monitor.so /usr/lib/dde-dock/plugins/ && \
 pkill dde-dock

2. 手动下载地址

github:libsys_monitor.so二进制文件 deb安装包

码云:libsys_monitor.so deb安装包

3. 安装命令

sudo cp libsys_monitor.so /usr/lib/dde-dock/plugins/
pkill dde-dock
dde-dock

四、源代码编译安装

1. 官方插件开发教程

教程见官方开发文档

2. 安装依赖

编译另外还需要安装如下依赖(官方的开发文档讲的环境配置不全):

sudo apt install build-essential
sudo apt install qt5-default
sudo apt install dde-dock-dev
sudo apt install libdtkwidget-dev
#使用qtcreator集成环境可以直接设计ui界面,非必要
sudo apt install qtcreator
#deepin/uos用户使用此命令可以获取最新的qtcreator
sudo apt install io.qt.qtcreator
#使用qtcreator打开cmake工程要先安装cmake
sudo apt install cmake

3. 一键编译安装

cd dde-sys-monitor-plugin
./build.sh

五、更新日志

有问题欢迎回帖反馈!开发的心得体会参见我的博客
http://blog.mxslly.com/archives/95.html

  • 20190617 22:37更新:修复上传下载一致的bug,下载地址同上
  • 20190619 12:07更新:缩减宽度,小气泡文字对齐,编译脚本优化,下载地址同上
  • 20190627 16:04更新:修复时尚模式显示不全问题,现在时尚模式只显示网速
  • 20190830 03:14更新:缩减1个字符宽度,现在最低单位为KB,不显示B
  • 20191211 10:09更新:导入项目到qtcreator,添加设置功能,可设置显示内容
  • 20200214 21:09更新:针对高分屏dpi优化;可设置显示行距;使用系统函数保存设置,更新后单击小气泡无法弹出,原因不明
  • 20200322 16:31更新:添加电池功率显示
  • 20200420 00:01更新:尝试修复插件界面显示为空白的UI问题,失败
  • 20200421 17:01更新:修复电池信息读取失败的问题,加入电池信息开关
  • 20200721 20:38更新:重构代码架构,提高可扩展性;参考indicator-multiload加入图表模式;加入很多设置选项;使用upower获取电池功率提高兼容性;适配deepin20dock的上下左右位置
  • 20200818 15:50更新:根据 @zty199 的启发加入了跟随系统主题变化文字颜色的功能,仅限于文字模式
  • 20200826 23:20更新:修复采样时间间隔不为1s时网速显示不准确的问题
  • 20200916 21:06更新:修复插件显示有时会被dde-dock遮挡的问题;添加关于信息
  • 20200922 23:51更新:修复dock在左右位置时插件留白过大的问题
  • 20200928 20:06更新:修复文字模式未对齐的bug;加入控制遮挡时刷新的开关
  • 20201025 12:50更新:暂时修改插件名为datetime防止被dock遮挡
  • 20210216 22:50更新:文字模式增加自定义显示文字功能
  • 20210517 21:34更新:新增CPU温度显示,需要安装lm-sensors
  • 20220125 20:26更新: 支持新的插件函数PluginSizePolicy
  • 20220902 22:43更新:适配作者的dde-dock pr补丁合并,现在不会被遮挡了
Reply Favorite View the author
All Replies
...7 / 11
To page
q77190858
deepin
2020-08-22 05:18
#121
https://bbs.deepin.org/post/179425
我的这样要总么弄

这个是dde-dock的问题,目前只能通过把插件高度调低或者dock高度拉高来规避
多说一句,之前在deepin15.11的时候都不存在这样的问题,deepin20以后出现了,是dock的问题,我也无法解决
Reply View the author
风吹过的绿洲
deepin
2020-08-22 08:16
#122
https://bbs.deepin.org/post/179425
是的,有的时候会出现这样的情况,重启dde-dock就好了

是bug吗,修复下呀
Reply View the author
q77190858
deepin
2020-08-22 18:08
#123
https://bbs.deepin.org/post/179425
是bug吗,修复下呀

我用了这么久,就出现过一次,重启dde-dock就好了,也无法重现,所以不好修复
Reply View the author
central_1
deepin
2020-08-26 20:51
#124
求更新,系统更新之后,这个无法使用了
Reply View the author
Comments
zty199
2020-08-26 22:01
我这里一切正常,5.4.50 和 5.7.7 内核都是。建议你重装试试。
q77190858
deepin
2020-08-27 06:06
#125
https://bbs.deepin.org/post/179425
求更新,系统更新之后,这个无法使用了

我也是一切正常啊
Reply View the author
k631583871
deepin
2020-09-03 04:38
#126
刚开始正常,运行一段时间就这样,调整一下任务了宽度就能正常显示了
Reply View the author
q77190858
deepin
2020-09-03 06:01
#127
https://bbs.deepin.org/post/179425
刚开始正常,运行一段时间就这样,调整一下任务了宽度就能正常显示了

这是dde-dock的bug,目前只能通过调大dock宽度或者调小插件的宽度来解决
Reply View the author
k631583871
deepin
2020-09-04 00:14
#128
https://bbs.deepin.org/post/179425
这是dde-dock的bug,目前只能通过调大dock宽度或者调小插件的宽度来解决

系统的时间应该也是使用插件方式实现了,就没有发现类似的问题。
我看了 官方时间插件的提交记录,里面好像也有类似的问题。
https://github.com/linuxdeepin/dde-dock/commits/uos/plugins/datetime/datetimewidget.cpp
Reply View the author
q77190858
deepin
2020-09-04 09:33
#129
https://bbs.deepin.org/post/179425
系统的时间应该也是使用插件方式实现了,就没有发现类似的问题。
我看了 官方时间插件的提交记录,里面好 ...

看了一下,感觉那个修复的问题和我的插件的问题不是一样的,但是日期时间插件确实能摆脱dock的遮挡。再研究了一下自己的代码,还是没有发现问题。算了睡觉!!
Reply View the author
k631583871
deepin
2020-09-14 03:06
#130
https://bbs.deepin.org/post/179425
看了一下,感觉那个修复的问题和我的插件的问题不是一样的,但是日期时间插件确实能摆脱dock的遮挡。再研 ...

mainwidget.hpublic:
QSize sizeHint() const;

mainwidget.cpp
QSize MainWidget::sizeHint() const
{
  QRect dateRect = rect();
  qDebug()<   if(dateRect.width() < 40){
    return QSize(50, 61);
  }else{
    return QSize(51, 60);
  }
}
这就可以正常显示了, 打开新的窗体的时候  宽度会变成 30多,这方法返回的宽高不能固定,不变化不会触发刷新还是会显示不正常的。还不能单改变宽度,单改变宽度也不刷新。

但是这个写法不好,作者看看有没有好的写法
Reply View the author
q77190858
deepin
2020-09-14 04:51
#131
本帖最后由 q77190858 于 2020-9-13 21:21 编辑
https://bbs.deepin.org/post/179425
mainwidget.hpublic:
QSize sizeHint() const;

好的,我好好研究一下
还是不行啊,在mainwidget里面重载sizehint也不行
Reply View the author
k631583871
deepin
2020-09-14 09:12
#132
https://bbs.deepin.org/post/179425
好的,我好好研究一下
还是不行啊,在mainwidget里面重载sizehint也不行

我还需要配合 m_proxyInter->itemUpdate(this, pluginName()) 这个方法去刷新才有效果
我最后一次提交 就我现在的测试代码
https://gitee.com/manymobi/dde-sys-monitor-plugin
Reply View the author
辉夜
deepin
2020-09-14 16:16
#133
uos也能用,建议去uos那边也发一遍
Reply View the author
立青
deepin
2020-09-14 16:38
#134
不错,给我等小白用很好
Reply View the author
q77190858
deepin
2020-09-15 07:41
#135
https://bbs.deepin.org/post/179425
我还需要配合 m_proxyInter->itemUpdate(this, pluginName()) 这个方法去刷新才有效果
我最后一次提交 就 ...

试了一下,确实很神奇,sizeHint返回的size必须要不一样才会刷新插件不被遮挡,否则还是挡住了,不太懂什么工作原理
Reply View the author
q77190858
deepin
2020-09-16 07:30
#136
本帖最后由 q77190858 于 2020-9-16 13:00 编辑
https://bbs.deepin.org/post/179425
我还需要配合 m_proxyInter->itemUpdate(this, pluginName()) 这个方法去刷新才有效果
我最后一次提交 就 ...

按照正常的逻辑重写了sizehint,结果不会被遮挡了!!!
sizehint会在widget的update以后被调用,返回建议的宽度和高度,估计这是dde-dock的一种机制。
注意的是,不能依据label的宽度和高度计算sizehint的返回值,要用QFontMetrics来计算文字的宽度和高度,否则会非常宽。。。(参考官方datetime插件)

  1. QSize MainWidget::sizeHint() const
  2. {
  3.     //qDebug()<<"sizeHint被调用了\n";
  4.     if(centralLayout==NULL)return QSize(5,5);
  5.     QSize size;
  6.     const Dock::Position position = qApp->property(PROP_POSITION).value();
  7.     if(!oldsettings.value("chartModeCheckBox").toInt())//文字模式
  8.     {
  9.         if(position==Dock::Top||position==Dock::Bottom)
  10.             size = QSize(QFontMetrics(font).boundingRect(cpuMemLabel->text()).size().width()/2+
  11.                          QFontMetrics(font).boundingRect(netLabel->text()).size().width()/2,
  12.                          oldsettings.value("heightSpinBox").toInt());
  13.         else
  14.             size = QSize(qMax(QFontMetrics(font).boundingRect(cpuMemLabel->text()).size().width(),
  15.                               QFontMetrics(font).boundingRect(netLabel->text()).size().width()),
  16.                          oldsettings.value("heightSpinBox").toInt()*2);
  17.     }
  18.     else//图表模式
  19.     {
  20.         if(position==Dock::Top||position==Dock::Bottom)
  21.             size = QSize(cpuChart==NULL?0:cpuChart->width+
  22.                          memChart==NULL?0:memChart->width+
  23.                          netChart==NULL?0:netChart->width,
  24.                          qMax(cpuChart==NULL?0:cpuChart->height,
  25.                               qMax(memChart==NULL?0:memChart->height,netChart==NULL?0:netChart->height)));
  26.         else
  27.             size = QSize(qMax(cpuChart==NULL?0:cpuChart->width,
  28.                               qMax(memChart==NULL?0:memChart->width,netChart==NULL?0:netChart->width)),
  29.                          cpuChart==NULL?0:cpuChart->height+
  30.                          memChart==NULL?0:memChart->height+
  31.                          netChart==NULL?0:netChart->height);
  32.     }
  33.     //qDebug()<
  34.     return size;
  35. }
Copy the Code
打开qtcreater以后竟然出现了遮挡的情况。。。。我服了
加入了判断是否被遮挡,如果遮挡就重新启用插件,解决了问题

  1.     //当插件被遮挡的时候,刷新插件
  2.     if(m_mainWidget->sizeHint().width()+2>m_mainWidget->width()||
  3.             m_mainWidget->sizeHint().height()+1>m_mainWidget->height())
  4.     {
  5.         m_proxyInter->itemRemoved(this, pluginName());
  6.         m_proxyInter->itemAdded(this, pluginName());
  7.     }
Copy the Code



Reply View the author
k631583871
deepin
2020-09-20 03:23
#137
本帖最后由 k631583871 于 2020-9-19 20:01 编辑
https://bbs.deepin.org/post/179425
按照正常的逻辑重写了sizehint,结果不会被遮挡了!!!
sizehint会在widget的update以后被调用,返回建议 ...

我尝试把 时间控件的代码拷贝了过来(datetimewidget.cpp和datetimewidget.h,改成mainwidget.cpp和mainwidget.h),显示的就比 系统自带的小。 这就蒙了啊
Reply View the author
q77190858
deepin
2020-09-20 05:49
#138
https://bbs.deepin.org/post/179425
我尝试把 时间控件的代码拷贝了过来(datetimewidget.cpp和datetimewidget.h,改成mainwidget.cpp和mainwi ...

哈哈哈,神奇了
Reply View the author
灵兮之
deepin
2020-09-23 01:32
#139

任务栏在右侧时,设置成只显示网速状态,上面还会留一块空白的位置,这个能去掉?
Reply View the author
q77190858
deepin
2020-09-23 05:09
#140
https://bbs.deepin.org/post/179425
任务栏在右侧时,设置成只显示网速状态,上面还会留一块空白的位置,这个能去掉?
...

改了旧bug,产生了新bug
Reply View the author
...7 / 11
To page