#action #profile #behavior

bin+lib ppd

Interact with power-profiles-daemon with Rust

1 unstable release

Uses new Rust 2024

new 0.1.0 May 8, 2025

#15 in #actions

MIT license

22KB
271 lines

ppd-rs

A Rust interface to the Power Profiles Daemon for Linux systems.

Overview

ppd-rs provides a complete Rust API for interacting with the Power Profiles Daemon (PPD) on Linux systems. The library allows applications to:

  • Query and set power profiles (performance, balanced, power-saver)
  • Hold specific profiles for application needs
  • Configure power-related actions
  • Monitor and control battery-aware behavior

The project includes both a library for integration into other Rust applications and a command-line utility (ppd) for direct interaction with power profiles.

Installation

Add this to your Cargo.toml:

[dependencies]
ppd = "0.1.0"

Command-Line Usage

The included ppd utility allows you to interact with power profiles from the command line:

# List available profiles
ppd list

# Get the current profile
ppd get

# Set a specific profile
ppd set performance

# Configure battery-aware behavior
ppd configure-battery-aware --enable

# List available actions
ppd list-actions

Library Usage

Here's a simple example of using the library in your Rust application:

use ppd::{PpdProxyBlocking, Result};
use zbus::blocking::Connection;

fn main() -> Result<()> {
    // Connect to the system D-Bus
    let connection = Connection::system()?;
    
    // Create a proxy to the Power Profiles Daemon
    let proxy = PpdProxyBlocking::new(&connection)?;
    
    // Get the current profile
    let active_profile = proxy.active_profile()?;
    println!("Current profile: {}", active_profile);
    
    // List all available profiles
    let profiles = proxy.profiles()?;
    println!("Available profiles:");
    for profile in profiles {
        println!("- {} (CPU driver: {})", profile.profile, profile.cpu_driver);
    }
    
    // Set a new profile
    proxy.set_active_profile("performance".to_string())?;
    println!("Profile set to performance");
    
    Ok(())
}

Development

To build the project:

cargo build

To run the command-line utility:

cargo run

License

This project is licensed under the MIT License.

Dependencies

~9–19MB
~305K SLoC