5.9 KiB
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
-
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.logfor 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:
sudo apt-get update
sudo apt-get install build-essential pkg-config libgtk-3-dev
On Fedora:
sudo dnf install gcc make pkgconf-pkg-config gtk3-devel
On Arch Linux:
sudo pacman -S base-devel pkgconf gtk3
Building and Installing the Application
-
Clone the Repository
git clone https://github.com/kleinpanic/bat0daemon.git cd bat0daemon -
Run the Installation Script
./install.shThe
install.shscript will:- Check for and install any missing dependencies.
- Build the application using
make. - Install the
battery_monitorbinary to/usr/local/bin. - Install the
battery_daemon.shscript 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.confif 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:
# ~/.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:
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:
ignore_processes_for_kill=firefox, code
ignore_processes_for_sleep=dropbox, slack
Uninstallation
To remove the application and its associated files:
-
Stop and Disable the Systemd Service
systemctl --user stop battery_monitor.service systemctl --user disable battery_monitor.service -
Remove Installed Files
sudo rm /usr/local/bin/battery_monitor sudo rm /usr/local/bin/battery_daemon.sh -
Remove the Systemd Service File
rm ~/.config/systemd/user/battery_monitor.service -
Reload the Systemd Daemon
systemctl --user daemon-reload -
Remove Configuration and Log Files (Optional)
rm -rf ~/.config/battery_monitor rm /tmp/battery_monitor.log -
Clean Up Build Files
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.