离线虚拟机中Cron执行wmctrl命令失效问题求助
解决cron中wmctrl无法生效的问题
我之前也碰到过一模一样的情况!echo能正常写入日志,说明cron本身是工作的,问题出在wmctrl依赖X11桌面环境的环境变量,而cron默认运行时没有加载这些变量,导致它找不到你的桌面会话。
下面是具体的解决步骤:
- 先获取你的桌面会话的环境变量
在你的桌面终端(不是SSH或者纯文本终端)里执行这两个命令,记下输出结果:
echo $DISPLAY echo $XAUTHORITY
通常DISPLAY的值是:0,XAUTHORITY一般是/home/你的用户名/.Xauthority或者/run/user/1000/Xauthority(1000是你的用户ID,可通过id -u查看)。
- 修改你的cron任务
根据你用的是普通用户crontab还是root crontab,调整命令:
如果是普通用户的crontab(直接用
crontab -e编辑):
把任务改成:* * * * * DISPLAY=:0 XAUTHORITY=/home/你的用户名/.Xauthority wmctrl -xc notepadqq-bin.Notepadqq记得把路径替换成你刚才查到的XAUTHORITY实际值。
如果是root的crontab(用
sudo crontab -e编辑):
因为root需要访问你的用户桌面会话,除了加变量,还要指定以你的用户身份运行:* * * * * DISPLAY=:0 XAUTHORITY=/home/你的用户名/.Xauthority sudo -u 你的用户名 wmctrl -xc notepadqq-bin.Notepadqq
- 可选:使用wmctrl的绝对路径
cron的默认PATH比较有限,可能找不到wmctrl的位置,你可以先查它的绝对路径:
which wmctrl
比如输出是/usr/bin/wmctrl,那把命令里的wmctrl换成这个绝对路径,更稳妥。
- 测试命令是否有效
先手动模拟cron的环境运行命令,验证是否能关闭Notepadqq:
env -i DISPLAY=:0 XAUTHORITY=/home/你的用户名/.Xauthority wmctrl -xc notepadqq-bin.Notepadqq
如果这个命令能正常关闭程序,那cron里的任务肯定就能正常工作了。
内容的提问来源于stack exchange,提问作者METZGERR
相关产品推荐
相关产品推荐

