如何确定桌面窗口在 Xfce 中是否可见?

如何确定桌面窗口在 Xfce 中是否可见?

我有一个 Conky 脚本,我总是更新该脚本以增加启动前的延迟。延迟必须至少是必须等待背景显示的时间,否则 Conky 会隐藏在壁纸后面。坏的。

现在当我登录时就会发生这种情况。当我已经登录时,我希望脚本不要等待而是立即启动。

我的桌面环境是Xfce 4.12曼扎罗 16。有没有办法可靠地确定桌面何时准备好/可见?


编辑: 下列的埃德加·格里尔的回答,我已经更新了我的脚本。内容如下:

#!/bin/sh

# Try to detect screen width to correctly position Conky
# to the right of the first monitor
eval $(xdpyinfo | sed -e '/screen\s\+#0/,+1!d' \
    -e '/screen/d' \
    -e 's@\s\+dimensions:\s\+\([0-9]\+\)x\([0-9]\+\).*@WIDTH=\1; HEIGHT=\2@g') 2>/dev/null \
    || WIDTH=1920

# Wait till the desktop window is ready (more or less)
# Method 1:
#while ! xwininfo -name Bureau 2>&1 > /dev/null; do sleep 1s; done
# Method 2:
while ! xwininfo -tree -root | \
    grep -qE '\("xfdesktop"\s+"\w+"\)\s+'${WIDTH}x${HEIGHT}'\+0\+0'; \
do sleep 1s; done

cd $HOME/.conky
exec /usr/bin/conky ${WIDTH:+-x $WIDTH -y 48} "$@"

它被保存为/usr/local/bin/conky.sh并且通常如下调用.config/autostart

conky.sh -p 2 -q -c ringrc

在这种情况下 2 秒是不够的。

答案1

知道桌面壁纸可能是由 创建的子窗口xfdesktop,接下来的线索可以是使用以下命令探索 X windows 列表的内容:

xwininfo -tree -root

输出摘录(“Scrivania”在英语中的意思是“桌面”):

    0x800744 (has no name): ()  4x538+736+30  +755+50
    0x800743 (has no name): ()  4x541+0+30  +19+50
 0x8005f9 (has no name): ()  1920x1080+0+0  +0+0
    16 children:
    0x1400003 "Scrivania": ("xfdesktop" "Xfdesktop")  1920x1080+0+0 +0+0
       1 child:
       0x1400004 (has no name): ()  1x1+-1+-1  +-1+-1
    0x800608 (has no name): ()  1x1+0+0  +0+0
    0x800607 (has no name): ()  1x1+0+0  +0+0

根据这个假设,在脚本中检查属于的窗口是否xfdesktop存在和/或有子窗口相对简单

相关内容