Take full control of your Linux laptop hardware with a fast, zero dependency CLI tool built in Rust.
Built for speed and simplicity, it talks directly to your system's hardware interfaces (sysfs, acpi, udev). A background daemon (lapctld) handles all privileged operations via a secure D-Bus interface, allowing you to control your laptop completely without sudo.
- Graphics Switching: Effortlessly toggle between Integrated, NVIDIA, and Hybrid modes. Wayland is auto detected; no
--waylandflag needed. Optimize for battery life on the go or raw performance at your desk. - Battery Health: Modern batteries hate being at 100% all the time. Set custom charge limits (like 80%) to significantly extend your battery's lifespan.
- Power Tuning: Switch through performance profiles or set hard CPU power (TDP) limits in Watts to keep things cool or let them loose.
- Intelligent Cooling: Force your fans into Performance, Balanced, or Quiet modes (supporting ASUS and Lenovo laptops).
- Display Refresh Rate: Easily query available refresh rates and change your active display's Hz on the fly (100% native Rust Wayland implementation using
zwlr_output_manager_v1for wlroots compositors like Sway and Hyprland). - Touchpad Toggle: Quickly enable or disable your touchpad from the terminal when using an external mouse.
- Instant Status: Get a bird's eye view of your hardware state, battery health, and current limits with one simple command.
lapctl is built with Rust. Ensure you have the Rust toolchain installed.
yay -S lapctl-bin
sudo lapctl install-rulescargo install lapctl
sudo lapctl install-rulesgit clone https://github.com/S4NKALP/lapctl.git
cd lapctl
just install
sudo lapctl install-rulesThe install-rules command automatically sets up the D-Bus policy and starts the lapctld background service.
- GPU Switching (Optional):
xrandrandnvidia-settingsare strictly required ONLY when using thelapctl gpucommand on X11 (to route proprietary NVIDIA Optimus drivers). Wayland is auto detected so no extra flags are needed. - Wayland Display: Built entirely natively using
wayland-clientandwayland-protocols-wlr(nowlr-randrrequired!)
- GNOME / KDE Plasma (Wayland): The display refresh rate feature relies heavily on the
zwlr_output_manager_v1protocol. This protocol is exclusive to wlroots-based compositors (like Sway and Hyprland). GNOME and KDE use their own disparate internal display protocols, meaning this feature will not work out-of-the-box on those Desktop Environments.
# Install D-Bus policy & start daemon (Required for rootless control)
sudo lapctl install-rules
# From now on, NO sudo is required!
# Manage your GPU
lapctl gpu integrated # Max battery
lapctl gpu hybrid # Best of both worlds
lapctl gpu nvidia # High performance
lapctl gpu nvidia --no-reboot # Switch without rebooting (Ctrl+C safe)
lapctl gpu run steam # Run 'steam' on dGPU directly while in Hybrid mode
# Prolong battery life
lapctl battery limit 80
lapctl battery status
# Tune your power
lapctl power performance
lapctl power battery-save
lapctl power limit-tdp 35 # Stay under 35W
# Adjust your fans
lapctl cooling quiet
lapctl cooling performance
# Manage your touchpad
lapctl touchpad disable
lapctl touchpad enable
# Manage your display refresh rate
lapctl display rates
lapctl display set-rate 144
# Check everything
lapctl statusThe project is structured for speed and modularity:
lapctl
│
├── src/
│ ├── main.rs # The entry point
│ ├── cli.rs # Command definition & parsing
│ ├── daemon/ # lapctld (D-Bus interface & logic)
│ ├── commands/ # CLI feature logic & proxies
│ ├── hardware/ # Hardware specific drivers (NVIDIA, etc.)
│ └── utils/ # System helpers
│
└── tests/ # Robust integration & unit tests
Safety features:
- Concurrency lock -- Exclusive file lock (
/var/lock/lapctl.lock) prevents concurrent GPU switch commands from corrupting state - Interrupt safety -- If
--no-rebootGPU switching is interrupted (Ctrl+C, crash), the display manager is automatically restarted via a RAII guard - Atomic writes -- Cache file is written atomically (temp file + rename) to prevent partial/corrupt state on crash
We love seeing how you use lapctl!
- Contribute: Found a bug or have a feature idea? Open an issue or submit a Pull Request. We're always looking for help supporting more laptop brands!
- Testing: Please ensure all tests pass by running
cargo testbefore submitting changes. - Shoutout: Huge thanks to EnvyControl for the inspiration on graphics management.
This project is licensed under the MIT License. You are free to use, modify, and distribute it as you see fit. See LICENSE for the full text.