我有一个 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
存在和/或有子窗口相对简单