通过Cron执行自动登出失败问题求助
通过Cron执行自动登出失败问题求助
兄弟,我之前也碰到过一模一样的问题!直接在Cron里写gnome-session-quit根本没反应,核心原因是Cron的运行环境和你桌面会话的环境完全不一样——它没有桌面环境的关键环境变量,根本不知道该连接哪个显示器、哪个用户的桌面会话,自然没法触发登出操作。
给你几个靠谱的解决办法,亲测在Ubuntu 22.04上有效:
1. 直接在Cron里补充环境变量
首先打开终端,先获取你当前桌面会话的两个关键变量:
- 输入
echo $DISPLAY,一般输出是:0 - 输入
echo $XAUTHORITY,输出类似/run/user/1000/gdm/Xauthority(这里的1000是你的用户UID,每个人可能不同,按实际输出的路径来)
然后编辑crontab(crontab -e),把条目改成这样:
* * * * * DISPLAY=:0 XAUTHORITY=/run/user/1000/gdm/Xauthority gnome-session-quit --force --logout
加--force --logout是为了跳过系统默认的登出确认弹窗,避免你看不到弹窗误以为命令没执行。
2. 用脚本封装(更稳妥)
如果怕环境变量后续有变化,可以写个小脚本固定配置:
- 创建一个
logout.sh文件(比如放在你用户目录下),内容如下:
#!/bin/bash # 替换成你自己的XAUTHORITY路径 export XAUTHORITY=/run/user/1000/gdm/Xauthority export DISPLAY=:0 gnome-session-quit --force --logout
- 给脚本加执行权限:
chmod +x ~/logout.sh - 编辑crontab,调用这个脚本的绝对路径:
* * * * * /home/你的用户名/logout.sh
(记得把你的用户名换成实际的用户名,比如/home/zohaib/logout.sh)
等一分钟后,Cron应该就能正常触发自动登出了!
备注:内容来源于stack exchange,提问作者Muhammad Zohaib Zafar
相关产品推荐
相关产品推荐

