You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过/etc/rc.local运行脚本时如何通过dbus获取系统空闲时间?

问题根源

/etc/rc.local 是系统全局启动项,执行时机远早于用户图形会话初始化流程,既没有对应登录用户的DBus会话环境变量,也无法访问尚未启动的GNOME Mutter服务,同时你原脚本的死循环没有设置休眠间隔,会阻塞后续系统启动流程,最终导致卡登录界面和DBus报错,仅配置DISPLAY=:0无法覆盖缺失的运行环境要求。

修复步骤

1. 优化空闲检测脚本

修改/home/paulky/shutdown.sh内容如下,补充环境变量配置和休眠逻辑,避免资源浪费:

#!/bin/bash
# 等待30秒确保图形会话完全初始化
sleep 30
# 配置当前用户的DBus会话地址和DISPLAY变量
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u paulky)/bus"
export DISPLAY=:0

while true; do
    # 每1分钟检测一次空闲时间,降低CPU占用
    sleep 60
    get_idle_time=$(dbus-send --print-reply --dest=org.gnome.Mutter.IdleMonitor /org/gnome/Mutter/IdleMonitor/Core org.gnome.Mutter.IdleMonitor.GetIdletime)
    idle_time=$(echo "$get_idle_time" | awk '{print $NF}')
    # 空闲超过1小时执行关机
    if [[ $idle_time -ge 3600000 ]]; then
        systemctl poweroff
    fi
done

给脚本添加执行权限:

chmod +x /home/paulky/shutdown.sh

如果需要关机时不需要输入密码,执行sudo visudo编辑sudo配置,在文件末尾添加以下内容后保存:

paulky ALL=(ALL) NOPASSWD: /usr/bin/systemctl poweroff

2. 替换启动方式(废弃rc.local配置)

rc.local的执行时机不适合运行依赖图形会话的脚本,改用GNOME用户级自启即可:

  • 安装GNOME优化工具(已安装可跳过):sudo apt install gnome-tweaks
  • 打开优化工具,进入「开机启动程序」页面
  • 点击添加按钮,名称自定义为「空闲自动关机」,命令填写bash /home/paulky/shutdown.sh,保存配置即可

可选替代方案(支持登录前空闲检测)

如果需要在用户未登录的状态下也能检测空闲自动关机,可以更换检测工具为xprintidle:

  1. 安装工具:sudo apt install xprintidle
  2. 修改脚本中的空闲时间获取逻辑为:
idle_time=$(xprintidle)
  1. 启动方式改为配置LightDM/GDM的自启脚本,将脚本执行命令写入/etc/gdm3/PostLogin/Default文件即可。

内容的提问来源于stack exchange,提问作者Paulky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:57:04