20241208:果然还是得搞个代码仓库,不然本地修改老是改了一半忘了自己改了啥...... 提交记录中特意包含了官方最早适配 deepin V23 Beta2 版本的代码,有兴趣的童鞋可以自己研究下 XD...... https://github.com/zty199/dde-desktop-videowallpaper-plugin 尽管很不情愿,但想用来做壁纸的视频都是 4K 高码率的,QtMultimedia 是真带不动啊......迫于无奈还是上了 libmpv,属实是 重复造轮子.jpg 了,心累 不过也算是学了一点点 QOpenGLWidget,想用在桌面插件里播放视频还是有点坑的,没有原生 QWidget 那么省心,估计还有各种显卡驱动啥的兼容问题,随缘吧......
20241208:果然还是得搞个代码仓库,不然本地修改老是改了一半忘了自己改了啥......
提交记录中特意包含了官方最早适配 deepin V23 Beta2 版本的代码,有兴趣的童鞋可以自己研究下 XD......
https://github.com/zty199/dde-desktop-videowallpaper-plugin
尽管很不情愿,但想用来做壁纸的视频都是 4K 高码率的,QtMultimedia 是真带不动啊......迫于无奈还是上了 libmpv,属实是 重复造轮子.jpg 了,心累
QtMultimedia
libmpv
不过也算是学了一点点 QOpenGLWidget,想用在桌面插件里播放视频还是有点坑的,没有原生 QWidget 那么省心,估计还有各种显卡驱动啥的兼容问题,随缘吧......
QOpenGLWidget
QWidget
检查系统更新,更新至 V23 Release 正式版最新版本
需要 dde-desktop (>= 6.5.7)
下载地址:dde-desktop-videowallpaper-plugin/releases
下载并双击 deb 文件进行安装(文件名中带 dbgsym 的为符号文件,一般不需要安装,仅供调试使用)。 安装完成后,注销重新登录或重启计算机,或在终端执行 systemctl --user restart dde-desktop,即可在桌面右键菜单中看到“视频壁纸”选项,勾选即可开启动态壁纸功能。 根据通知提示,视频文件需放在 ~/Videos/video-wallpaper 文件夹下;多个视频文件存在时仅支持循环播放第一个视频。
下载并双击 deb 文件进行安装(文件名中带 dbgsym 的为符号文件,一般不需要安装,仅供调试使用)。
dbgsym
安装完成后,注销重新登录或重启计算机,或在终端执行 systemctl --user restart dde-desktop,即可在桌面右键菜单中看到“视频壁纸”选项,勾选即可开启动态壁纸功能。
systemctl --user restart dde-desktop
根据通知提示,视频文件需放在 ~/Videos/video-wallpaper 文件夹下;多个视频文件存在时仅支持循环播放第一个视频。
~/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。
dde-desktop
dde-shell
org.deepin.ds.desktop.so
插件化本身倒也算是好事,但是升级为了 Qt6 编译,不仅 SVG 渲染有问题,还经常出现桌面文件重命名或者启动器搜索时无法正常输入等问题(好像按一次 Win 把启动器调出来能好?)。对动态壁纸来说更是灾难,原本使用的 libdmr 后端没有适配 Qt6,只能切换为 Qt 自己的 QMultiMedia 来播放视频;不仅效率比较低,开销也大,还得重新适配 Qt6 的 API 变化......
libdmr
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......
按照动态壁纸插件之前的逻辑,如果使用 QMultiMedia 播放视频,就在视频每一帧变化时,把新的一帧转换成 QImage 图片,然后直接画在 QWidget 上。这么一想,和正常静态壁纸的逻辑好像没太大差别?
于是就干脆从 ddplugin-background 插件入手,对比下代码发现插件接口完全一致,那工作就简单了很多。直接动手,照搬 CMake 库调用,剩下的工作就是适配 Qt6 了。Qt6 中多媒体播放部分变化不小,好多接口都没有了(比如播放列表,音量控制等),只能暂时屏蔽相关逻辑了。
ddplugin-background
最终编译成功,满心欢喜地把插件放进了系统目录,然后重启 dde-shell......便不出意外地出了意外:dde-shell 直接崩溃,翻大车了......
此处省略亿点文字,最终才发现:自己的插件使用 ldd 查看链接动态库情况,莫名其妙出现了 Qt5 的库......
ldd
原来是文件管理器虽然把部分对外接口移植到了 Qt6,但是没有把调用 dfm6-base 和 dfm6-framework 需要的 CMake 和 PkgConfig 配置文件打包进 dde-file-manager-dev 里,导致编译时引入了 Qt5 的动态库。这不翻大车就见鬼了......
dfm6-base
dfm6-framework
dde-file-manager-dev
目前文件管理器的最新 tag 6.5.13 中终于把相关文件放进去了,不过目前还得自己写 dfm6-base 和 dfm6-framework 相关配置文件...... https://github.com/linuxdeepin/dde-file-manager/commit/ff975e9f84ff808ef43f57389bf9af137b7470c5#diff-4de5a1c69d64406d422c70eadad6fd32fbe1c8f03313d0669cbe864ff252a59c
和之前一样,并不能播放声音(因为音量控制啥的懒得写了......等 Treeland 更新吧)。
相比于使用 libdmr 后端播放视频,由于是逐帧绘制图片,可以自由控制纵横比,遇到宽屏视频也可以撑满整个屏幕(就是左右或者上下会损失一部分画面)。
但问题也比较明显,性能会差不少,使用动态壁纸时连任务栏的动效都明显掉帧,内存控制也不太行(甚至关闭动态壁纸时内存也没法完全释放,不知道咋搞了,好在涨得不太多......)。
唯一的好处是 Qt6 的多媒体库似乎可以自动调用 vdpau 和 vaapi 进行硬件渲染,CPU 占用倒是挺低的......
vdpau
vaapi
建议执行 sudo apt install libvdpau-va-gl1 libva-dev 安装下这个 2 个库
sudo apt install libvdpau-va-gl1 libva-dev
涩涩是好文明.jpg
没啥好总结的......奇怪的坑太多了,有 Qt 的,有文件管理器的......
虽然 Qt6 的多媒体库看上去支持了调用硬件渲染,但是能力还是十分有限,但凡来个 4K,HDR,HEVC 编码啥的视频立刻卡死,内存飙升......果然还是只适合放放简单的视频啊......
果然,想要兼容性够好的话,还得是用 mpv 或者 vlc 啥的。还是用 dependon 大佬写的 星火动态壁纸 吧
mpv
vlc
星火动态壁纸
附带下这次单独抠出来的 ddplugin-background 源码,可以单独编译,希望有点参考价值吧
ddplugin-background.zip
好好好
mark
很强
感谢分享
多发爱看
点了
很实用
谢了
Popular Ranking
Popular Events
启用 dde-desktop 动态壁纸插件
食用方式
检查系统更新,更新至 V23 Release 正式版最新版本
下载地址:dde-desktop-videowallpaper-plugin/releases
前情提要
[经验分享] 在 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 变化......虽然大佬说后面在 Treeland 里会提供支持,但是咱等不及,只能自己动手丰衣足食了......
正文
一开始以为桌面变成了
dde-shell
的插件,大概率换成了 QML 重写,遂准备放弃来着。然而,最近终于摸到鱼了,就花了亿点时间看了下文件管理器插件,突然发现桌面壁纸,自动整理等相关插件还在文件管理器项目里。https://github.com/linuxdeepin/dde-file-manager/tree/master/src/plugins/desktop
适配 Qt6
按照动态壁纸插件之前的逻辑,如果使用 QMultiMedia 播放视频,就在视频每一帧变化时,把新的一帧转换成 QImage 图片,然后直接画在 QWidget 上。这么一想,和正常静态壁纸的逻辑好像没太大差别?
于是就干脆从
ddplugin-background
插件入手,对比下代码发现插件接口完全一致,那工作就简单了很多。直接动手,照搬 CMake 库调用,剩下的工作就是适配 Qt6 了。Qt6 中多媒体播放部分变化不小,好多接口都没有了(比如播放列表,音量控制等),只能暂时屏蔽相关逻辑了。最终编译成功,满心欢喜地把插件放进了系统目录,然后重启
dde-shell
......便不出意外地出了意外:dde-shell
直接崩溃,翻大车了......排错
此处省略亿点文字,最终才发现:自己的插件使用
ldd
查看链接动态库情况,莫名其妙出现了 Qt5 的库......原来是文件管理器虽然把部分对外接口移植到了 Qt6,但是没有把调用
dfm6-base
和dfm6-framework
需要的 CMake 和 PkgConfig 配置文件打包进dde-file-manager-dev
里,导致编译时引入了 Qt5 的动态库。这不翻大车就见鬼了......效果
和之前一样,并不能播放声音(因为音量控制啥的懒得写了......等 Treeland 更新吧)。
相比于使用
libdmr
后端播放视频,由于是逐帧绘制图片,可以自由控制纵横比,遇到宽屏视频也可以撑满整个屏幕(就是左右或者上下会损失一部分画面)。但问题也比较明显,性能会差不少,使用动态壁纸时连任务栏的动效都明显掉帧,内存控制也不太行(甚至关闭动态壁纸时内存也没法完全释放,不知道咋搞了,好在涨得不太多......)。
唯一的好处是 Qt6 的多媒体库似乎可以自动调用
vdpau
和vaapi
进行硬件渲染,CPU 占用倒是挺低的......总结
涩涩是好文明.jpg没啥好总结的......奇怪的坑太多了,有 Qt 的,有文件管理器的......
虽然 Qt6 的多媒体库看上去支持了调用硬件渲染,但是能力还是十分有限,但凡来个 4K,HDR,HEVC 编码啥的视频立刻卡死,内存飙升......果然还是只适合放放简单的视频啊......
果然,想要兼容性够好的话,还得是用
mpv
或者vlc
啥的。还是用 dependon 大佬写的星火动态壁纸
吧附带下这次单独抠出来的 ddplugin-background 源码,可以单独编译,希望有点参考价值吧
ddplugin-background.zip