我不运行桌面环境,而是使用裸窗口管理器(树桩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