在 i3 中使用 ImageMagick 在 URxvt 中实现假透明度

在 i3 中使用 ImageMagick 在 URxvt 中实现假透明度

在 i3 中设置背景的最流行方法似乎是使用feh,通过以下方式:

exec_always feh --bg-fill /home/user/Pictures/wallpaper.jpg

在你的~/.config/i3/config文件中。然后,~/.Xresources您可以使用URxvt以下命令将其配置为透明:

URxvt.transparent:     true
URxvt.shading:         50
URxvt.blurRadius:      0
URxvt.background:      #d3d3d3
URxvt.foreground:      #1d1f21

feh正如您所看到的,这两件事在我的家用计算机上完美配合。现在忽略可怕的配色方案。

在此输入图像描述

feh现在,由于各种原因,由于工作中的 yum 存储库有限,我无法访问。我也无法自己下载和编译它或类似的东西。相反,我一直在使用ImageMagick它的display功能来设置我的背景:

exec_always display -window root /home/user/Pictures/wallpaper.jpg

它本身可以设置壁纸并与 i3 配合使用。

问题是,当我这样做时,似乎ImageMagick只是设置了一个覆盖层,而不是实际设置根图像,结果URxvt只是读取了默认的灰色根图像。请注意,这也是我的家用计算机,feh运行良好,因此不是URxvt问题。

在此输入图像描述

  1. 有没有不同的方法来设置我的背景,ImageMagick以便它实际上设置根壁纸?这是我更喜欢的解决方案。
  2. 是否有其他软件,或者最好是常用的预装工具,可以用来设置我的壁纸?再次请记住,我无法接触到feh工作中的事情,以及我必须查看和看到的其他任何事情。我见过这个帖子其中提到了一些,但没有时间检查它们是否存在于工作中。 1. 我也无法访问 compton、xcompmgr 等以获得真正的透明度。

更新:我尝试使用ImageMagick'sxsetroot并将其转换.jpg为图像,但仅适用于仅支持黑白的图像。这不起作用,因为我希望它仍然与显示的图像相同。.bmpconvertxsetroot.xbm.jpg

答案1

运行ltrace显示feh它似乎创建了一个像素图并使用 XSetWindowBackgroundPixmap 将其附加到根窗口(193 是根窗口 id 的 0xc1):

XOpenDisplay(...) = 0x22a8a50
XCreatePixmap(0x22a8a50, 193, 1920, 1080)        = 0x3000001
XSetWindowBackgroundPixmap(0x22a8a50, 193, 0x3000001, ...) = 1

但更重要的是它在根窗口上设置两个属性:

XChangeProperty(0x22a8a50, 193, 312, 20)         = 1
XChangeProperty(0x22a8a50, 193, 807, 20)         = 1

你可以看到

$ xprop -root
  ESETROOT_PMAP_ID(PIXMAP): pixmap id # 0x3000001
  _XROOTPMAP_ID(PIXMAP): pixmap id # 0x3000001

像 ImageMagick 这样的程序display在更改根背景时似乎不会更新这些属性。

您可以在使用后检查feh,当您删除上述两个属性(使用xprop -root -remove ...)时,程序urxvt将不再显示透明背景。

虽然xprop有一个-set选项,但我不知道如何使用它来设置或更改像素图 ID。

相关内容