An open API service indexing awesome lists of open source software.

https://github.com/kleinpanic/bat0daemon


https://github.com/kleinpanic/bat0daemon

Last synced: 11 months ago
JSON representation

Awesome Lists containing this project

README

          

# Battery Monitor Daemon

A battery monitor daemon built in C using the GTK framework. The application monitors your system's battery level and provides notifications when the battery is low or critically low. It also implements battery-saving features like reducing screen brightness and managing background processes to help preserve battery life.

---

## Table of Contents

- [Features](#features)
- [Installation](#installation)
- [Dependencies](#dependencies)
- [Building and Installing the Application](#building-and-installing-the-application)
- [Configuration](#configuration)
- [Adjusting Battery Thresholds](#adjusting-battery-thresholds)
- [Configuring Process Management](#configuring-process-management)
- [Uninstallation](#uninstallation)
- [Contributing](#contributing)

## Features

---

- **Configurable Battery Thresholds**: Receive notifications when the battery level falls below user-defined thresholds for low and critical levels. Adjust these thresholds easily via a configuration file.

- **Dynamic Monitoring Interval**: The application adjusts its battery level check interval based on the current battery percentage to optimize performance and responsiveness.

- **Battery Saving Mode**:
- Reduces screen brightness to 50% when the battery is low.
- Suspends high CPU-consuming processes and user daemons to conserve battery life.
- Allows users to specify which processes to ignore during suspension.

- **Logging**: Activity is logged to `/tmp/battery_monitor.log` for debugging and monitoring purposes.

- **Systemd Service**: Runs as a user-level systemd service, starting automatically upon login.

- **Version Checking**: Supports version checking for both the application and the accompanying scripts.

---

## Installation

### Dependencies

Ensure you have the following dependencies installed on your system:

- **gcc**: GNU Compiler Collection for compiling the C code.
- **make**: Utility for directing compilation.
- **pkg-config**: Helper tool used during compilation.
- **GTK+ 3 Development Libraries**: Library for creating graphical user interfaces.

**On Debian/Ubuntu:**

```bash
sudo apt-get update
sudo apt-get install build-essential pkg-config libgtk-3-dev
```

**On Fedora:**

```bash
sudo dnf install gcc make pkgconf-pkg-config gtk3-devel
```

**On Arch Linux:**

```bash
sudo pacman -S base-devel pkgconf gtk3
```

### Building and Installing the Application

1. **Clone the Repository**

```bash
git clone https://github.com/kleinpanic/bat0daemon.git
cd bat0daemon
```

2. **Run the Installation Script**

```bash
./install.sh
```

The `install.sh` script will:

- Check for and install any missing dependencies.
- Build the application using `make`.
- Install the `battery_monitor` binary to `/usr/local/bin`.
- Install the `battery_daemon.sh` script to `/usr/local/bin`.
- Set up a user-level systemd service to run the application automatically on login.
- Create a default configuration file at `~/.config/battery_monitor/config.conf` if it does not exist.

**Note**: The `install.sh` script may prompt for your password to use `sudo` for installation.

---

## Configuration

The application uses a configuration file located at `~/.config/battery_monitor/config.conf`. If the file does not exist, the `install.sh` script will create one with default values.

### Adjusting Battery Thresholds

Edit the configuration file to adjust battery thresholds:

```ini
# ~/.config/battery_monitor/config.conf

threshold_low=25
threshold_critical=5
threshold_high=80
```

- **threshold_low**: Battery percentage at which the application will send a low battery notification.
- **threshold_critical**: Battery percentage at which the application will send a critical battery notification.
- **threshold_high**: Battery percentage above which the application checks the battery level less frequently.

### Configuring Process Management

Specify processes to ignore when the application suspends high CPU-consuming processes or user daemons:

```ini
ignore_processes_for_kill=process1, process2, process3
ignore_processes_for_sleep=process4, process5, process6
```

- **ignore_processes_for_kill**: List of processes to ignore when suspending high CPU-consuming processes.
- **ignore_processes_for_sleep**: List of processes to ignore when suspending user daemons.

**Example**:

```ini
ignore_processes_for_kill=firefox, code
ignore_processes_for_sleep=dropbox, slack
```

---

## Uninstallation

To remove the application and its associated files:

1. **Stop and Disable the Systemd Service**

```bash
systemctl --user stop battery_monitor.service
systemctl --user disable battery_monitor.service
```

2. **Remove Installed Files**

```bash
sudo rm /usr/local/bin/battery_monitor
sudo rm /usr/local/bin/battery_daemon.sh
```

3. **Remove the Systemd Service File**

```bash
rm ~/.config/systemd/user/battery_monitor.service
```

4. **Reload the Systemd Daemon**

```bash
systemctl --user daemon-reload
```

5. **Remove Configuration and Log Files (Optional)**

```bash
rm -rf ~/.config/battery_monitor
rm /tmp/battery_monitor.log
```

6. **Clean Up Build Files**

```bash
make clean
```

---

## Contributing

Contributions are welcome! If you have ideas for new features, improvements, or bug fixes, feel free to fork the repository and submit a pull request. Let's make this application even better together.

---

**Additional Notes**:

- **Battery Monitoring**: The application dynamically finds the battery device path, supporting systems with different battery naming conventions (e.g., `BAT0`, `BAT1`).

- **Process Suspension**: The application can suspend non-critical background processes to conserve battery life when in battery-saving mode. Critical system processes are automatically excluded.

- **Customization**: Users can tailor the application's behavior extensively through the configuration file.

---