#power #linux #daemon #suspend #service

app circadian

Linux 空闲自动挂起/唤醒电源管理守护进程

10 个版本 (6 个重大变更)

使用旧的 Rust 2015

0.8.4 2023年3月18日
0.8.2 2023年2月19日
0.7.0 2022年1月8日
0.6.0 2017年11月25日

#85 in Unix API

每月下载量 47

GPL-3.0 许可证

54KB
1K SLoC

Circadian

GNU/Linux 电源管理的空闲挂起守护进程

Circadian 是一个后台守护进程/服务,当计算机空闲时自动触发挂起/休眠/休眠。

它主要用于具有永久电源的固定设备(即台式机、服务器、媒体中心)。

Circadian 使用一系列“空闲启发式”来确定系统何时空闲。这包括

  • X11 中的用户活动(键盘、鼠标、全屏播放)
  • 终端中的用户活动(在PTY/SSH会话中输入)
  • 打开 SSH 连接
  • 打开 SMB/Samba 连接
  • 打开 NFS 连接
  • 活跃的音频播放
  • CPU 使用率低于指定阈值
  • 黑名单进程

当其所有启发式方法都确定系统已经空闲足够长的时间时,Circadian 将执行一个命令。这通常是简单的电源挂起,但可以配置为任何期望的操作。

Circadian 还可以安排每天自动唤醒。只需在其配置文件中设置唤醒时间,它将在每天的这个时间唤醒(如果尚未唤醒)。这允许以简单的方式保持机器更新和备份,即使它很少使用。

它还可以在检测到系统从休眠中唤醒时执行命令,无论唤醒的原因是什么。

Circadian 存在的原因是现代 Linux 发行版已经支持空闲挂起,但它显然是一个非常问题和不可靠的领域。在你已经遵循了发行版的建议,在配置文件中戳了一堆、调整了一些XML层次结构、编写了一些脚本、在键盘上挥舞着燃烧的迷迭香的烟雾、将宝石挂在你机器上、以及任何可能被推荐的事情之后……也许可以尝试 Circadian。

示例用例

  • 有噪音风扇的游戏机?空闲时自动休眠!
  • 存储/备份机器?自动唤醒、备份和自动休眠!
  • 很少使用的服务器,但需要可用?唤醒-on-LAN,在没有任何 SSH 连接时自动休眠!
  • 醒来听你的本地音乐库?自动唤醒、播放音乐和自动休眠!
  • 只在晚上使用的媒体中心?白天休眠,回家时自动唤醒!

状态

对我来说是有效的。您试试。您可以在GitHub上提供反馈,或者发送邮件到[email protected]

安装

Debian x86-64

$ sudo dpkg -i circadian_0.6.0-1_amd64.deb

如果需要,安装检测网络的工具(netstat)、X11(xssstatexprintidle)和音频活动(pactl

$ sudo apt-get install suckless-tools xprintidle net-tools pulseaudio-utils

编辑/etc/circadian.conf进行配置。默认是在闲置2小时后通过systemd挂起。

当您对配置满意时,继续

$ sudo systemctl enable --now circadian

Arch Linux

  • 使用您最喜欢的AUR包管理器
yay -S circadian

考虑安装xprintidlexssstate的可选包以进行基于X11的闲置检测,以及net-tools进行SSH检测。这两个选项默认启用。

任何其他具有systemd的系统

手动安装。很简单。

$ git clone https://github.com/mrmekon/circadian.git
$ cd circadian
$ cargo build --release
$ sudo cp target/release/circadian /usr/local/bin/
$ sudo cp resources/circadian.conf.in /etc/circadian.conf
$ sudo cp resources/circadian.service /etc/systemd/system/
$ sudo systemctl enable circadian
$ sudo systemctl start circadian

非systemd系统

遵循systemd说明,并将circadian.service端口转换为您想要的任何格式。

依赖项

  • 可能需要安装
    • xssstate
    • xprintidle
    • netstat
    • pactl
    • rustc + cargo(如果本地构建)
  • 应该已经有
    • grep
    • awk
    • w
    • id
    • uptime
    • pgrep
    • cat
    • sh

自动唤醒需要内核支持实时时钟(RTC)。您可以检查文件/sys/class/rtc/rtc0/wakealarm。您很可能有。

使用方法

  • 应作为root运行,最好是通过systemd。
  • 配置文件在:/etc/circadian.conf(已记录)
  • pkill -SIGUSR1 circadian会将信息输出到syslog。使用它来查看是否正常工作,或找出为什么它没有睡眠。

依赖项

~8.5MB
~159K SLoC