Crontab 无法在 i3 的两个屏幕上正确运行 feh(显示变量设置为:0)

Crontab 无法在 i3 的两个屏幕上正确运行 feh(显示变量设置为:0)

我有两个屏幕,我有一个脚本每天在 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 中运行,也可以交互运行。然而,如果屏幕尺寸不同,这可能不会很好地工作。

相关内容