我有两个屏幕,我有一个脚本每天在 i3 中设置新壁纸。该脚本基本上下载图像,然后运行以下命令
convert {save_location} -trim JPG:- | feh --bg-max -
当以交互方式运行时,这非常有效 - 每个屏幕都会获得相同壁纸的副本,如下所示
|@@@@@@@@| |@@@@@@@@|
|@@hello@| |@@hello@|
|@@@@@@@@| |@@@@@@@@|
显示变量设置为:0
echo $DISPLAY
:0
但是,如果我运行它crontab -e
:
0 1 * * * DISPLAY=:0 python .../change_wallpaper.py
那么它不会在每个屏幕上设置壁纸的副本。它将两个屏幕视为一个屏幕,并将此壁纸设置到“组合屏幕”的中心:
|----@@@@| |@@@@----|
|----@@he| |llo@----|
|----@@@@| |@@@@----|
这显然看起来很难看。
我进行了搜索,但找不到如何解决此问题的好建议。也许社区中的某个人会提供一些提示。预先非常感谢
我的环境:Ubuntu 20.04,i3,gdm
答案1
好的,看完源码后菲赫,我确定问题与xinerama有关。虽然无法以完美的方式解决这个问题,但这里有一个脚本可以作为解决方法:
#!/bin/bash
# Compute screen size
size=$(xrandr | grep *+ -m 1 \
| sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/')
# then manually collate a combined picture for two screens and
# launch feh without xinerama functionality
convert [path/to/picture] \
-trim \
-resize $size \
-background black -compose Copy \
-gravity center -extent $size \
-quality 92 +duplicate +append JPG:- \
| feh --bg-max --no-xinerama -
正如脚本注释中所写,该脚本计算屏幕尺寸,然后手动整理两个屏幕的组合图片(使用 imagemagick 工具),并启动完全没有 xinerama 功能的 feh。
这既可以在 cron 中运行,也可以交互运行。然而,如果屏幕尺寸不同,这可能不会很好地工作。