#background #file #x11 #cli-tool #dump #content #mask

应用 xbgdump

将 X11 背景导出到文件的 CLI 工具

5 个版本

0.1.7 2022 年 6 月 6 日
0.1.5 2021 年 6 月 9 日
0.1.4 2021 年 5 月 31 日
0.1.3 2021 年 5 月 31 日
0.1.0 2021 年 5 月 31 日

#10 in #mask

MIT 许可证

13KB
182

xbgdump

CI Crates.io

xbgdump 是一个简单的工具,可以将当前 X11 背景导出到图像文件。

您可以使用它像 xbgdump file.pngxbgdump - 一样,将数据发送到 stdout。默认情况下,它将数据写入当前目录下的 bg.png 文件。出于效率考虑,发送到 stdout 的数据以 PAM 格式编码而不是 PNG。除了速度上的提升外,这在使用 ImageMagick 或类似工具进行管道传输时不应有任何区别。

当给定 -m(或 --mask)标志时,xbgdump 将使用 RandR 查询当前屏幕布局,并通过透明度屏蔽屏幕外的区域。有关详细信息,请参阅 xbgdump --h 的帮助信息。

目前只支持 PNG 和 PAM,但从理论上讲,很容易将其扩展到支持 image-rs 支持的所有格式。

动机

我制作这个工具是因为我使用 nitrogeni3lock 作为我的屏幕锁。我想为我锁屏创建一个模糊的背景,但 i3lock 只接受单个图像,我没有,因为 nitrogen 会即时生成它。

我知道 polybar 会检查背景以实现伪透明度,这是我最初的想法来源。然后我尝试使用 xprop,但据我所知,它似乎只能让我检索使用的 pixmap 的 ID,而不是其内容。这然后导致我制作了这个工具。

内部结构

xbgdump 通过检索 X 根窗口下属性 _XROOTPMAP_ID 绑定的 pixmap 来工作。此属性由 feh 和 nitrogen 设置;我尚未用其他壁纸设置工具或桌面环境进行测试。

对于8位RGB,X11返回的此像素图的 内容为BGR0——我不知道这实际上是否在某处有文档记载;我是通过试错发现的——然后将其转换为RGB,再编码为PNG并输出到指定的文件或标准输出。

依赖关系

~14MB
~104K SLoC