gpt4 book ai didi

linux - wmctrl 在 crontab 中不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:03 30 4
gpt4 key购买 nike

我正在使用 Linux (Ubuntu)。我使用 wmctrl 使 firefox 窗口始终在顶部。当我在 终端 上运行 shell 时,它运行良好。

这是我的 shell 代码(假设它是 /usr/app/keepfront.sh):

#!/bin/bash
WINTITLE="Mozilla Firefox" # Main Firefox window has this in titlebar
PROGNAME="firefox mywebsite --sync" #run the firefox program

#Use wmctrl to list all windows, count how many contain WINTITLE
WINCOUNT=wmctrl -l | grep -c "$WINTITLE"

if [ $WINCOUNT != 0 ]
then
wmctrl -a "$WINTITLE" # If it exists, bring window to front
else
$PROGNAME & # Otherwise, just launch ff
fi
exit 0

我想使用 crontab 每 1 分钟运行一次 shell。 Crontab DID 运行了 shell(我写了一些 echo ),但是什么也没发生

这是我的 crontab 代码:

*/1 * * * *   /usr/app/keepfront.sh

有人知道为什么吗?如何解决?

最佳答案

cron 作业无权访问您的环境变量,尽管它们归用户所有,但它们不在该用户的完整桌面环境中运行。在这种情况下,您的脚本不知道您的 DISPLAY 环境变量。要检索信息并进行更改,wmctrl 需要知道要使用哪个 DISPLAY

要执行您想执行的操作,您只需在脚本中设置 DISPLAY 环境变量之前任何对 wmctrl 的调用。假设您只有 1 个监视器,下面的行应该可以解决您的问题(我的测试工作正常)。如果您有超过 1 个显示器,那么只需在命令行上使用 echo $DISPLAY 来帮助您为各种显示器配置命令。

# Add to your script before any calls to wmctrl.
export DISPLAY=:0

其他一些注意事项:

  • 如果您打开了多个“Mozilla Firefox”窗口,那么您的代码只会将 wmctrl 遇到的第一个窗口带到顶部,这将是第一个打开的窗口,因为 wmctrl 从最旧的窗口查看到最新的。

  • 我没有测试您脚本的 Firefox 方面的启动,一般来说我会认为这样做是个坏主意,因为 Firefox 还会使用环境变量,在从 crontab 运行脚本时不会设置这些环境变量.您可以找到 Firefox 使用的所有环境变量的列表,然后在脚本中手动设置它们...

  • 您不需要 */1 行中的 crontab 位,只需使用:* * * * * /usr/app/keepfront.sh 每分钟运行一次。

  • 您可能希望将一些环境变量添加到 crontab 文件的顶部 - 许多人出于各种原因这样做。例如,您的 PATH 文件中的 crontab 可能不会与您的用户 PATH 相同,并且您的 LANG 变量也不会被设置,这可以阻止 cron 调用的脚本中使用的正则表达式工作。我在 crontab 文件的顶部设置了以下内容,如下所示:

# These are the basic paths, mine also includes my own scripts path.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# Note: LANG allows grep regexes to work properly in called scripts.
LANG=en_GB.UTF-8

提示:键入 echo $PATHecho $LANG 以获取当前设置。

在你的命令行上输入 env 会显示你所有的环境变量,看看 cron 可用的变量有多么有限,将这行添加到你的 crontab ,不要忘记更改我使用的路径并删除运行后的行。

* * * * * env > /home/user/EnvOutputFromCrontab

希望这对您有所帮助。

关于linux - wmctrl 在 crontab 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035930/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com