使用 ImageMagick 在根窗口上显示多个图像

使用 ImageMagick 在根窗口上显示多个图像

我不运行桌面环境,而是使用裸窗口管理器(树桩WM)。因此,我设置桌面背景的常用方法是从 WM 启动脚本运行display -window root <image file>,这可以满足我的要求。

当使用多个显示器时,X 根窗口会横跨两个显示器并包含死区。因此,运行该命令行会导致图像在整个窗口上拉伸或平铺,这是没有用的。我可以用来-geometry在任一监视器上显示图像,但如果我再次运行该图像(在两个监视器上查看),它会覆盖另一个监视器。似乎没有任何能力display在一次调用中显示两个图像。

如何display在两台显示器上显示不同的图像?或者,在没有桌面环境的情况下,如何才能获得“桌面背景图片”效果呢?

答案1

你可以使用montage生成包含整个显示的单个图像,并调用display -window root生成的图像。

或者,您可以使用xloadimage它很乐意平铺多个图像。它不知道单独的显示器,因此如果您的图像不是全屏或者您有不同尺寸的显示器,您可能需要手动使用-at-geometry调整图像位置。

xloadimage -onroot -at 1680,0 image1.jpg -at 0,0 image2.png

答案2

这就是我最终使用的:

DIR=$HOME/Pictures/Desktop
IMG1="$(ls $DIR/*jpg | shuf | head -1)"
IMG2="$(ls $DIR/*jpg | shuf | head -1)"
montage  -background "#000000" -geometry 1920x1080 $IMG1 $IMG2 jpg:- | display  -foreground "#000000" -backdrop  -window root jpg:-

在根窗口上显示 2 个随机图像,幸运的是我的显示器以相同的分辨率运行。

答案3

如果 X 服务器支持 xrandr - 我发现使用x壁纸更简单、更直接。以下是我的 Xsetup 的一部分:

# Display different wallpapers for each monitor
cmd='xwallpaper '
if xrandr --listactivemonitors
then
    # xrandr is available: get output names from xrandr
    for output in $(xrandr --listactivemonitors | cut -d ' ' -f6 )
    do
       # set different image for each monitor
       img=$(ls /usr/share/backgrounds/active/*.jpg | shuf | head -1 )
       cmd="$cmd --output $output --stretch $img "
    done
else
    # fallback: xrandr not available
    img=$(ls /usr/share/backgrounds/active/*.jpg | shuf | head -1 )
    cmd="$cmd --no-randr --stretch $img "
fi
$cmd

相关内容