树莓派开机自启脚本中xdotool失效问题排查求助
解决树莓派autostart中xdotool失效的问题
手动执行脚本正常,但开机自启时xdotool模拟按键没反应,核心原因通常是图形会话环境变量缺失或者目标窗口未被正确激活,给你几个针对性的解决方案:
方案1:补充图形会话环境变量
autostart在启动脚本时,不会自动继承终端里的DISPLAY和XAUTHORITY变量,而xdotool依赖这两个变量来定位X窗口会话。在脚本开头添加以下内容:
#!/bin/bash # 补充X会话关键环境变量 export DISPLAY=:0 export XAUTHORITY=/home/pi/.Xauthority # 原脚本内容 chromium-browser --noerrdialogs --disable-infobars --disable-session-crashed-bubble --disable-session-restore-state --kiosk /home/pi/Downloads/xxx.html & sleep 10 xdotool keydown Tab sleep 0.5 xdotool keyup Tab sleep 2 xdotool keydown Return sleep 0.5 xdotool keyup Return sleep 20 chromium-browser --kiosk /home/pi/Downloads/yyy.html &
方案2:确保Chromium窗口被激活后再发送按键
固定的sleep 10可能因为系统启动速度差异导致窗口还未完全加载或未成为活动窗口,xdotool的按键会发送到错误的窗口(甚至无窗口)。可以用xdotool的窗口查找+激活命令替代固定延迟:
#!/bin/bash export DISPLAY=:0 export XAUTHORITY=/home/pi/.Xauthority # 启动Chromium chromium-browser --noerrdialogs --disable-infobars --disable-session-crashed-bubble --disable-session-restore-state --kiosk /home/pi/Downloads/xxx.html & # 循环查找并激活Chromium窗口(最多等待20秒) for i in {1..20}; do # 查找可见的Chromium窗口 CHROMIUM_WINDOW=$(xdotool search --onlyvisible --class chromium-browser) if [ -n "$CHROMIUM_WINDOW" ]; then # 激活窗口 xdotool windowactivate $CHROMIUM_WINDOW # 等待窗口激活完成 sleep 1 break fi sleep 1 done # 发送按键(简化keydown/keyup为单个key命令) xdotool key Tab sleep 0.5 xdotool key Return sleep 20 chromium-browser --kiosk /home/pi/Downloads/yyy.html &
这里用xdotool search精准定位Chromium窗口,确保按键发送到正确的目标,比固定sleep更可靠。
方案3:检查脚本权限与autostart配置
虽然你说脚本其余功能正常,但还是确认一下:
- 脚本要有执行权限:
chmod +x /home/pi/Documents/test2.sh - autostart里的脚本路径要绝对正确,比如
@/home/pi/Documents/test2.sh(注意不要有多余的空格或换行)
额外提示:启用脚本日志排查问题
可以取消脚本里的日志注释,方便排查执行时的错误:
exec>/home/pi/Documents/logfile 2>&1
开机后查看/home/pi/Documents/logfile,如果xdotool有报错(比如找不到窗口、无法连接到X服务器),就能更精准定位问题。
内容的提问来源于stack exchange,提问作者Jüri Bogatkin
相关产品推荐
相关产品推荐

