[Share Experiences] 启用 dde-desktop 动态壁纸插件 Resolved
Tofloor
poster avatar
忘记、过去
deepin
2024-12-05 14:43
Author

启用 dde-desktop 动态壁纸插件

20241208:果然还是得搞个代码仓库,不然本地修改老是改了一半忘了自己改了啥......

提交记录中特意包含了官方最早适配 deepin V23 Beta2 版本的代码,有兴趣的童鞋可以自己研究下 XD......

https://github.com/zty199/dde-desktop-videowallpaper-plugin


尽管很不情愿,但想用来做壁纸的视频都是 4K 高码率的,QtMultimedia 是真带不动啊......迫于无奈还是上了 libmpv,属实是 重复造轮子.jpg 了,心累

不过也算是学了一点点 QOpenGLWidget,想用在桌面插件里播放视频还是有点坑的,没有原生 QWidget 那么省心,估计还有各种显卡驱动啥的兼容问题,随缘吧......

食用方式

  1. 检查系统更新,更新至 V23 Release 正式版最新版本

    需要 dde-desktop (>= 6.5.7)

  2. 下载地址:dde-desktop-videowallpaper-plugin/releases

    下载并双击 deb 文件进行安装(文件名中带 dbgsym 的为符号文件,一般不需要安装,仅供调试使用)。

    安装完成后,注销重新登录或重启计算机,或在终端执行 systemctl --user restart dde-desktop,即可在桌面右键菜单中看到“视频壁纸”选项,勾选即可开启动态壁纸功能。

    根据通知提示,视频文件需放在 ~/Videos/video-wallpaper 文件夹下;多个视频文件存在时仅支持循环播放第一个视频。

前情提要

[经验分享] 在 V23 开启使用桌面自带的动态壁纸功能

之前 V23 Beta2 时,在 https://github.com/linuxdeepin/dde-file-manager-extensions/tree/master/src/dde-desktop/ddplugin-videowallpaper 中翻到了动态壁纸的插件。虽然官方打包文件管理器时默认没有编译这个插件,但不妨碍咱自己抠出来打包用着玩儿 XD......

然而 V23 Release 正式更新后的某一天,突然之间天塌了,动态壁纸不见了。这才发现,原本桌面的 dde-desktop 可执行程序都不见了,取而代之的是成为了 dde-shell 的新插件 org.deepin.ds.desktop.so

插件化本身倒也算是好事,但是升级为了 Qt6 编译,不仅 SVG 渲染有问题,还经常出现桌面文件重命名或者启动器搜索时无法正常输入等问题(好像按一次 Win 把启动器调出来能好?)。对动态壁纸来说更是灾难,原本使用的 libdmr 后端没有适配 Qt6,只能切换为 Qt 自己的 QMultiMedia 来播放视频;不仅效率比较低,开销也大,还得重新适配 Qt6 的 API 变化......

https://bbs.deepin.org.cn/post/279929?postId=1656049

虽然大佬说后面在 Treeland 里会提供支持,但是咱等不及,只能自己动手丰衣足食了......

涩涩才是第一生产力.jpg

正文

一开始以为桌面变成了 dde-shell 的插件,大概率换成了 QML 重写,遂准备放弃来着。然而,最近终于摸到鱼了,就花了亿点时间看了下文件管理器插件,突然发现桌面壁纸,自动整理等相关插件还在文件管理器项目里。

https://github.com/linuxdeepin/dde-file-manager/tree/master/src/plugins/desktop

还是 Qt/C++ 就好办了,至少还能看得懂 XD......

适配 Qt6

按照动态壁纸插件之前的逻辑,如果使用 QMultiMedia 播放视频,就在视频每一帧变化时,把新的一帧转换成 QImage 图片,然后直接画在 QWidget 上。这么一想,和正常静态壁纸的逻辑好像没太大差别?

于是就干脆从 ddplugin-background 插件入手,对比下代码发现插件接口完全一致,那工作就简单了很多。直接动手,照搬 CMake 库调用,剩下的工作就是适配 Qt6 了。Qt6 中多媒体播放部分变化不小,好多接口都没有了(比如播放列表,音量控制等),只能暂时屏蔽相关逻辑了。

最终编译成功,满心欢喜地把插件放进了系统目录,然后重启 dde-shell......便不出意外地出了意外:dde-shell 直接崩溃,翻大车了......

排错

此处省略亿点文字,最终才发现:自己的插件使用 ldd 查看链接动态库情况,莫名其妙出现了 Qt5 的库......

原来是文件管理器虽然把部分对外接口移植到了 Qt6,但是没有把调用 dfm6-basedfm6-framework 需要的 CMake 和 PkgConfig 配置文件打包进 dde-file-manager-dev 里,导致编译时引入了 Qt5 的动态库。这不翻大车就见鬼了......

目前文件管理器的最新 tag 6.5.13 中终于把相关文件放进去了,不过目前还得自己写 dfm6-base 和 dfm6-framework 相关配置文件......
https://github.com/linuxdeepin/dde-file-manager/commit/ff975e9f84ff808ef43f57389bf9af137b7470c5#diff-4de5a1c69d64406d422c70eadad6fd32fbe1c8f03313d0669cbe864ff252a59c

效果

录屏_dde-shell_20241205142406.gif

和之前一样,并不能播放声音(因为音量控制啥的懒得写了......等 Treeland 更新吧)。

相比于使用 libdmr 后端播放视频,由于是逐帧绘制图片,可以自由控制纵横比,遇到宽屏视频也可以撑满整个屏幕(就是左右或者上下会损失一部分画面)。

但问题也比较明显,性能会差不少,使用动态壁纸时连任务栏的动效都明显掉帧,内存控制也不太行(甚至关闭动态壁纸时内存也没法完全释放,不知道咋搞了,好在涨得不太多......)。

唯一的好处是 Qt6 的多媒体库似乎可以自动调用 vdpauvaapi 进行硬件渲染,CPU 占用倒是挺低的......

建议执行 sudo apt install libvdpau-va-gl1 libva-dev 安装下这个 2 个库

总结

涩涩是好文明.jpg

没啥好总结的......奇怪的坑太多了,有 Qt 的,有文件管理器的......

虽然 Qt6 的多媒体库看上去支持了调用硬件渲染,但是能力还是十分有限,但凡来个 4K,HDR,HEVC 编码啥的视频立刻卡死,内存飙升......果然还是只适合放放简单的视频啊...... sweat

果然,想要兼容性够好的话,还得是用 mpv 或者 vlc 啥的。还是用 dependon 大佬写的 星火动态壁纸smirk


附带下这次单独抠出来的 ddplugin-background 源码,可以单独编译,希望有点参考价值吧

ddplugin-background.zip

Reply Favorite View the author
All Replies
yanjuner
Super Moderator
2024-12-05 15:21
#1

好好好

Reply View the author
观摩
deepin
2024-12-05 15:58
#2

mark

Reply View the author
jx4hjy
deepin
2024-12-05 21:03
#3

很强

Reply View the author
新手来啦~
deepin
2024-12-06 05:56
#4

涩涩才是第一生产力.jpg

Reply View the author
新手来啦~
deepin
2024-12-06 05:56
#5

applaud

Reply View the author
Oli
deepin
2024-12-06 06:14
#6

like like

Reply View the author
Oli
deepin
2024-12-06 06:14
#7

感谢分享

Reply View the author
小小怪冲啊!
deepin
2024-12-06 06:48
#8

applaud applaud 感谢分享

Reply View the author
小小怪冲啊!
deepin
2024-12-06 06:48
#9

多发爱看

Reply View the author
小鱼贝壳
deepin
2024-12-07 01:47
#10

like 点了

Reply View the author
hinata
deepin
2024-12-07 03:09
#11

多发爱看

Reply View the author
放屁大王
deepin
2024-12-08 04:55
#12

很实用

Reply View the author
放屁大王
deepin
2024-12-08 04:55
#13

谢了

Reply View the author
ggbond
deepin
2024-12-09 02:45
#14

like

Reply View the author
聪明蛋
deepin
2024-12-10 07:53
#15
The user is banned, and the content is hidden.
ieusr1203
deepin
2024-12-10 08:37
#16

like

Reply View the author