Thanks to visit codestin.com
Credit goes to github.com

Skip to content

phaelon74/LACT

 
 

Repository files navigation

Linux GPU Control Application

Translation status

icon

This application allows you to control your AMD, Nvidia or Intel GPU on a Linux system.

GPU info Overclocking Fan control
image image image
Software info Historical data
image image

Features:

  • Detailed GPU information reporting

    • Name and manufacturer
    • VBIOS info
    • VRAM info (Type/Manufacturer/Bus)
    • Hardware unit info (CUs/SMs/EUs, ROP count)
    • Resizable BAR status
    • Vulkan features and extensions
  • Monitoring

    • Configurable historical charts for power/thermals/frequency
    • Throttling info
    • Data CSV export
  • Power configuration

    • Power cap
    • Power states (AMD only)
  • Thermals configuration

    • Custom fan curves (AMD/Nvidia)
    • GPU firmware thermal options such as thermal and acoustic target/limit (AMD RDNA3+ only)
  • Overclocking

    • GPU/VRAM clocks configuration
    • GPU undervolting (via voltage offset on AMD, indirectly on Nvidia)
  • Settings profiles

    • Automatic profile activation based on running processes or gamemode status

GPU configuration is handled by a system service that does not depend on a graphical session (Wayland/X11).

The service can also be used standalone with a config file, for example in headless scenarios.

Quick links

Installation

  • Arch Linux: Install the package from official repositories: pacman -S lact (or lact-git from AUR for development builds).

  • Debian/Ubuntu/Derivatives: Download a .deb from releases.

    It is only available on Debian 12+ and Ubuntu 22.04+ as older versions don't ship gtk4.

  • Fedora: use the Copr repository, or download an RPM from releases.

  • Bazzite: Use the Flatpak below.

    This helper installs the Flatpak version and automatically adds the AMD overclocking boot option.

  • Gentoo: Available in GURU.

  • OpenSUSE: an RPM is available in releases.

    Only tumbleweed is supported as leap does not have the required dependencies in the repos.

  • NixOS: There is a package available in nixpkgs

  • Flatpak (universal): Available on Flathub and in releases.

    See the Flatpak documentation for setup notes.

  • Build from source.

Note: Nvidia support requires the Nvidia proprietary driver with CUDA libraries installed.

Development builds

To get latest fixes or features that have not yet been released in a stable version, there are packages built from the latest commit that you can install from the test release or using the lact-git AUR package on Arch-based distros.

Note: the date that GitHub shows next to the test release is not when the packages were built, the actual date is specified next to the attached package files.

Usage

Enable and start the service (otherwise you won't be able to change any settings):

sudo systemctl enable --now lactd

You can now use the GUI to change settings and view information.

Running LACT via CLI on Ubuntu

For headless setups or users who prefer command-line management, LACT can be fully controlled via CLI on Ubuntu.

Installation on Ubuntu

  1. Download the latest .deb package from the releases page:

    wget https://github.com/ilya-zlobintsev/LACT/releases/download/VERSION/lact_VERSION_amd64.deb

    Replace VERSION with the actual version number.

  2. Install the package:

    sudo dpkg -i lact_VERSION_amd64.deb
  3. Install any missing dependencies (if needed):

    sudo apt-get install -f
  4. For Nvidia GPU support, ensure you have the Nvidia proprietary driver with CUDA libraries installed:

    sudo apt install nvidia-driver-XXX nvidia-cuda-toolkit

    Replace XXX with your appropriate driver version (e.g., 550, 560).

Daemon Setup

  1. Enable and start the LACT daemon:

    sudo systemctl enable --now lactd
  2. Verify the daemon is running:

    sudo systemctl status lactd
  3. Check daemon logs if needed:

    sudo journalctl -u lactd -f

Configuration Management

  1. Find your GPU ID:

    lact cli list-gpus

    Example output:

    10DE:XXXX-YYYY:ZZZZ-0000:09:00.0 (NVIDIA RTX PRO 6000)
    
  2. View current GPU information:

    lact cli info
  3. Edit configuration file:

    The main config file is located at /etc/lact/config.yaml. You can edit it directly:

    sudo nano /etc/lact/config.yaml

    Or copy a pre-made configuration (e.g., for RTX PRO 6000):

    sudo cp /path/to/RTXPro6000Blackwell.yaml /etc/lact/config.yaml

    Important: Replace REPLACE_WITH_YOUR_GPU_ID in the config file with your actual GPU ID from step 1.

  4. Apply configuration changes:

    After editing the config file, restart the daemon to apply changes:

    sudo systemctl restart lactd

    LACT also watches for config file changes and reloads automatically, but daemon settings require a restart.

  5. Confirm settings (within 5 seconds of applying new settings to prevent auto-revert):

    After the daemon applies new settings, confirm them via the API or they will revert:

    echo '{"command": "confirm_pending_config", "args": {"command": "confirm"}}' | nc -U /run/lactd.sock

Profile Management

LACT supports multiple profiles for different workloads (e.g., Performance, Efficiency, Gaming):

  1. List available profiles:

    lact cli profile list
  2. Get current profile:

    lact cli profile get
  3. Switch to a different profile:

    lact cli profile set "Performance"
  4. Enable/disable automatic profile switching:

    lact cli profile auto-switch enable
    lact cli profile auto-switch disable

Monitoring and Validation

  1. Check GPU stats in real-time:

    watch -n 1 'lact cli info'
  2. Monitor power consumption and clocks:

    Use nvidia-smi for Nvidia GPUs:

    watch -n 1 nvidia-smi
  3. Test stability after overclocking/undervolting:

    # GPU stress test
    sudo apt install mesa-utils
    glxgears  # Basic OpenGL test
    
    # For CUDA workloads
    # Use your preferred benchmark or workload

Troubleshooting

  1. Daemon not starting:

    sudo journalctl -u lactd --no-pager | tail -50
  2. Permission issues:

    Ensure your user is in the correct group (sudo or wheel):

    groups $USER

    If needed, edit /etc/lact/config.yaml and set:

    daemon:
      admin_user: your_username

    Then restart: sudo systemctl restart lactd

  3. Settings not applying:

    • Check that the GPU ID in config matches output from lact cli list-gpus
    • Verify daemon is running: sudo systemctl status lactd
    • Check for errors in daemon logs: sudo journalctl -u lactd -f
  4. GPU crashes or artifacts:

    • Reduce overclock values in config file
    • Increase power limit if undervolting
    • Reboot system to reset GPU to default state
    • Settings automatically revert after 5 seconds if system becomes unstable

See the Config file reference and API documentation for advanced usage.

Hardware support

See the Wiki page

Configuration

There is a configuration file available in /etc/lact/config.yaml. Most of the settings are accessible through the GUI, but some of them may be useful to be edited manually (like admin_group and admin_user to specify who has access to the daemon)

See CONFIG.md for more information.

Socket permissions setup:

By default, LACT uses either ether the wheel or sudo group (whichever is available) for the ownership of the unix socket that the GUI needs to connect to.

On most desktop configurations (such as the default setup on Arch-based, most Debian-based or Fedora systems) this includes the default user, so you do not need to configure this.

However, some systems may have different user configuration. In particular, this has been reported to be a problem on OpenSUSE.

To fix socket permissions in such configurations, edit /etc/lact/config.yaml and under the daemon section either:

  • Set admin_user to your username
  • Set admin_group to a group that your user is a part of Then restart the service (sudo systemctl restart lactd).

Overclocking (AMD)

Some functionality requires enabling an option in the amdgpu driver, see the wiki page for more information.

Power profiles daemon note!

If you are using power-profiles-daemon (which is installed by default on many distributions), by default it may override the amdgpu performance level setting according to its own profile.

When using LACT 0.7.5+ and power-profiles-daemon 0.30+, LACT will try to connect to power-profiles-daemon and automatically disable the conflicting amdgpu action in ppd to avoid this conflict.

If running older versions, you can resolve this manually by creating a file at /etc/systemd/system/power-profiles-daemon.service.d/override.conf with the following contents:

[Service]
ExecStart=
ExecStart=/usr/libexec/power-profiles-daemon --block-action=amdgpu_dpm

Note: the /usr/libexec path might be different on your system, check it in systemctl status power-profiles-daemon

See ilya-zlobintsev#370 for more information.

Suspend/Resume

As some of the GPU settings may get reset when suspending the system, LACT will reload them on system resume. This may not work on distributions which don't use systemd, as it relies on the org.freedesktop.login2 DBus interface.

Building from source

Dependencies:

  • rust 1.76+
  • gtk 4.6+
  • git
  • pkg-config
  • clang
  • make
  • hwdata
  • libdrm
  • vulkan-tools
  • ocl-icd

Command to install all dependencies:

  • Fedora: sudo dnf install rust cargo make git clang gtk4-devel libdrm-devel vulkan-tools OpenCL-ICD-Loader-devel
  • Arch: sudo pacman -S --needed base-devel git clang make rust gtk4 hwdata vulkan-tools ocl-icd

Steps:

  • git clone https://github.com/ilya-zlobintsev/LACT && cd LACT
  • make
  • sudo make install

It's possible to change which features LACT gets built with. To do so, replace the make command with the following variation:

Headless build with no GUI:

make build-release-headless

Build GUI with libadwaita support:

make build-release-libadwaita

Remote management

It's possible to have the LACT daemon running on one machine, and then manage it remotely from another.

This is disabled by default, as the TCP connection does not have any authentication or encryption mechanism! Make sure to only use it in trusted networks and/or set up appropriate firewall rules.

To enable it, edit /etc/lact/config.yaml and add tcp_listen_address with your desired address and in the daemon section.

Example:

daemon:
  tcp_listen_address: 0.0.0.0:12853
  log_level: info
  admin_group: wheel
  disable_clocks_cleanup: false

After this restart the service (sudo systemctl restart lactd).

To connect to a remote instance with the GUI, run it with lact gui --tcp-address 192.168.1.10:12853.

CLI

There is also a cli available.

  • List system GPUs:

    lact cli list-gpus

    Example output:

    10DE:2704-1462:5110-0000:09:00.0 (AD103 [GeForce RTX 4080])
    
  • Getting GPU information:

    lact cli info

    Example output:

    $ lact cli info
    GPU 10DE:2704-1462:5110-0000:09:00.0:
    =====================================
    GPU Model: NVIDIA GeForce RTX 4080 (0x10DE:0x2704)
    Card Manufacturer: Micro-Star International Co., Ltd. [MSI] (0x1462)
    Card Model: Unknown (0x5110)
    Driver Used: nvidia 570.124.04
    VBIOS Version: 95.03.1E.00.60
    VRAM Size: 16376 MiB
    GPU Family: Ada
    Cuda Cores: 9728
    SM Count: 76
    ROP Count: 112 (14 * 8)
    VRAM Type: GDDR6x
    VRAM Manufacturer: Micron
    L2 Cache: 65536 KiB
    Resizeable bar: Enabled
    CPU Accessible VRAM: 16384
    Link Speed: 8 GT/s PCIe gen 3 x8
    
  • Profiles lact cli profile [COMMAND]

    • List profiles:

      lact cli profile list

      Example output:

      Default
      Gaming
      Performance
      Balanced
      
    • Get current Profile:

      lact cli profile get or lact cli profile

      Example output:

      Gaming
      
    • Set Profile:

      lact cli profile set "Performance"

      Example output:

      Performance
      
      • Auto switch profiles lact cli profile auto-switch [COMMAND]

        • Get auto-switch state:

          lact cli profile auto-switch get or lact cli profile auto-switch

          Example output:

          enabled
          
        • Enable auto switch:

          lact cli profile auto-switch enable

          Example output:

          enabled
          
        • Disable auto switch:

          lact cli profile auto-switch disable

          Example output:

          disabled
          

The functionality of the CLI is quite limited. If you want to integrate LACT with some application/script, you should use the API instead.

Reporting issues

When reporting issues, please include your system info and GPU model.

If you're having an issue with changing the GPU's configuration, it's highly recommended to include a debug snapshot in the bug report. You can generate one using the option in the dropdown menu:

image

The snapshot is an archive which includes the SysFS that LACT uses to interact with the GPU.

If there's a crash, run lact gui from the command line to get GUI logs, check daemon logs in journalctl -u lactd for errors, and see dmesg for kernel logs that might include information about driver and system issues.

Localization

You can contribute translations to LACT using Weblate.

Support the project

If you wish to support the project, you can do so via Patreon: https://www.patreon.com/IlyaZlobintsev

Or using cryptocurrency:

  • BTC: 12FuTXZzd5peGb7QfoRkXaLnbJ1DNVW4pP
  • ETH: 0x80875173316aa6317641bfbc50644e7ca74d6b6d
  • XMR: 42E93NZXM7STBUsnMRGNyxKryFVgpHKNP6aza94C5hn17j2W7zUnFHe7ASQzB3KorYYnsaVzWUyHHVYfcTLQRtB63qkv5jE

Other tools

Here's a list of other useful tools for AMD GPUs on Linux:

  • CoreCtrl - direct alternative to LACT, provides similar functionality in addition to CPU configuration with a Qt UI
  • amdgpu_top - tool for detailed real-time statistics on AMD GPUs
  • Tuxclocker - Qt overclocking tool, has support for AMD GPUs

About

Linux GPU Configuration And Monitoring Tool

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 84.0%
  • Fluent 13.0%
  • Python 1.9%
  • Other 1.1%