#桌面通知 #通知 #电池 #守护进程 #电源管理 #电源供应

bin+lib powernotd

powernotd是一个电池电量通知守护进程,它使用xdg桌面通知标准发送通知

3个稳定版本

1.2.0 2024年6月12日
1.1.0 2023年6月13日
1.0.0 2023年6月8日

#599 in 命令行工具

Download history 121/week @ 2024-06-08 18/week @ 2024-06-15

每月 128 下载

MIT 许可证

42KB
693

powernotd

powernotd是一个用Rust编写的Linux/Unix桌面电池电量通知守护进程。

Powernotd Screenshot

powernotd根据'桌面通知标准发送桌面通知,该标准通常以小弹窗的形式呈现给用户,具体形式取决于您的操作系统。powernotd会检查您的电池电量,并在电量达到一定阈值时发出通知。它仅负责发送事件,您的系统需要某种类型的通知显示守护进程来显示和渲染通知。

如果您使用的是桌面环境,则通常已包含此类通知显示守护进程。如果不是,例如makodunst是流行的选择。

powernotd可以通过配置文件进行配置。请参阅部分。

当前的电池电量从/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 -> 包含状态信息,如 '充电', '放电', '满电', ...
  • 遵循'桌面通知标准'
  • 您已安装显示通知守护进程,如 makodunst

安装

Aur (Arch用户仓库)

如果您使用基于arch linux的发行版,您可以使用任何类型的aur助手从aur 安装它。例如 yay -S powernotdparu -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