3个稳定版本
1.2.0 | 2024年6月12日 |
---|---|
1.1.0 | 2023年6月13日 |
1.0.0 | 2023年6月8日 |
#599 in 命令行工具
每月 128 下载
42KB
693 行
powernotd
powernotd是一个用Rust编写的Linux/Unix桌面电池电量通知守护进程。
powernotd根据'桌面通知标准发送桌面通知,该标准通常以小弹窗的形式呈现给用户,具体形式取决于您的操作系统。powernotd会检查您的电池电量,并在电量达到一定阈值时发出通知。它仅负责发送事件,您的系统需要某种类型的通知显示守护进程来显示和渲染通知。
如果您使用的是桌面环境,则通常已包含此类通知显示守护进程。如果不是,例如mako或dunst是流行的选择。
当前的电池电量从/sys/class/power_supply/BAT0/capacity
读取,这是操作系统电源管理写入的文件。该文件每分钟轮询一次,并将电池电量与阈值值进行比较,以确定是否需要发送通知。
此项目是为了学习Rust而创建的,我在切换到使用Hyprland显示管理器的Arch操作系统后需要桌面通知。
谁可以使用这个
如果您使用的是最小化Linux发行版,并且您没有配置完整的桌面环境,但仅使用窗口管理器,例如i3、awesome、bspwm、hyprland、sway等。桌面环境通常包含某种电池通知服务,而窗口管理器通常不包含。当我切换到使用Hyprland的Arch时,我需要此类通知服务,因此创建了此项目。
先决条件
为了让powernotd正常工作,您需要具有以下文件的Linux/Unix操作系统
/sys/class/power_supply/BAT0/capacity
-> 包含当前电池电量,由您的操作系统电源管理维护的文件/sys/class/power_supply/BAT0/status
-> 包含状态信息,如 '充电', '放电', '满电', ...- 遵循'桌面通知标准'
- 您已安装显示通知守护进程,如 mako 或 dunst
安装
Aur (Arch用户仓库)
如果您使用基于arch linux的发行版,您可以使用任何类型的aur助手从aur 安装它。例如 yay -S powernotd
或 paru -S powernotd
从二进制文件
二进制文件提供在发布部分
Cargo存储库安装
cargo安装 powernotd
确保您的$PATH
变量包含$HOME/.cargo/bin/
,因为cargo将其二进制文件安装在那里。
用法
如果您已安装powernotd,可以不带任何参数运行它,服务将在电池电量低于阈值时发出通知。您可以在启动时手动在后台启动powernotd或使用[发布部分](https://github.com/Laeri/powernotd/release`或源代码中的systemd文件夹中提供的Systemd服务文件。如果您使用的包类型包括Systemd服务,它将已复制到正确位置,您可以直接启用并启动服务。
将服务文件复制到/etc/systemd/system/
、~/.local/share/systemd/user/
或~/.config/systemd/user/
。
启用并启动服务 systemctl enable --now powernotd.service
。使用systemctl status powernotd.service
检查服务状态。
命令行界面
手册页条目,也包含在发布中
Powernotd is a battery-level notification daemon that sends notification using the xdg desktop notification standard.
Usage: powernotd [OPTIONS]
Options:
-s, --status-level Print the current battery-level to stdout then exit
-c, --charging-state Print charging status 'charging', 'discharging', 'full' or 'unknown' to stdout then exit
-f, --config-file <CONFIG_FILE> Set config-file path if needed, otherwise $XDG_CONFIG_HOME/powernotd/config.json is used
-n, --notify-now Send desktop notification with current battery-level then exit
-t, --list-thresholds List all notification thresholds in the format 'a_1%, a_2%, ..., a_n%' that are specified in the config-file
-p, --show-config-path Display the path to the config-file
-b, --battery <BATTERY> Pass the battery such as 'BAT1' if your system has multiple and you do not want to use the default (BAT0). Check '/sys/class/power_supply/' to see which batteries you have
-h, --help Print help
-V, --version Print version
配置文件
Powernotd遵循'XDG Base Directory Specification',也请参阅arch wiki条目。这意味着如果您有一个名为XDG_CONFIG_HOME
的环境变量,配置文件将在路径:XDG_CONFIG_HOME/powernotd/config.json
中创建。如果该环境变量不存在,配置文件将在路径:~/.config/powernotd/config.json
中创建。如果您想使用自定义配置文件运行powernotd,请使用-f
或--config-file
标志并提供自己的路径。
配置文件是Json格式,以下为注释过的默认配置。 notifications数组中的每个条目都包含一个阈值,如果当前电量低于该阈值,则应发送通知。
查看完整的默认配置文件以获取一些示例值
notifications数组中单个通知阈值的条目
level: number, this is the threshold and a notification will be sent if the power drops below this level
urgency: string, one of "Low", "Normal", "Critical".
This is the urgency of the desktop notification standard and your
notification display daemon might render them in different colors based on the urgency
time_secs: number, optional, how long the notification should stay active in seconds.
If given it is passed along in the notification event, otherwise no time is passed and your
notification display daemon will decide how long the notification stays active.
title: string, title which will be displayed in the message, you can provide any string template.
If it contains '{}', the current power level will be inserted at this location
message: string, message that will be displayed below the title. Also can contain '{}' and
the current power level will be inserted.
command: string, optional, if you want to run a specific command if the threshold is reached
it can be given here as a string.
此外,除了 notifications
数组之外,配置文件还有一个条目,当电池完全充电时将发送该通知。
full_notification
urgency: same as notification urgency, one of "Low", "Normal", "Critical"
enabled: boolean, if set to false then no notification will be shown when fully charged
title: string, same as notification title but no level will be inserted in the template
message": string // same as notification message but no level will be inserted in the template
完整默认配置文件
{
"notifications": [
{
"level": 30,
"urgency": "Low",
"title": "Battery Status",
"message": "{}%"
},
{
"level": 20,
"urgency": "Normal",
"title": "Battery Status",
"message": "{}%"
},
{
"level": 15,
"urgency": "Critical",
"time_secs": 10000,
"title": "Battery Status",
"message": "{}%"
},
{
"level": 10,
"urgency": "Critical",
"time_secs": 10000,
"title": "Battery Status",
"message": "{}%"
},
{
"level": 5,
"urgency": "Critical",
"time_secs": 10000,
"title": "Critical Battery Status",
"message": "{}%"
},
{
"level": 2,
"urgency": "Critical",
"time_secs": 10000,
"title": "Critical Battery Status",
"message": "{}%"
},
{
"level": 1,
"urgency": "Critical",
"time_secs": 10000,
"title": "Critical Battery Status",
"message": "{}%"
}
],
"full_notification": {
"urgency": "Low",
"enabled": true,
"title": "Battery Status",
"message": "Fully Charged 100%"
}
}
许可证
在 MIT 许可证下分发。更多信息请参阅 LICENSE
。
依赖项
~2–32MB
~420K SLoC