Files
battery_management/README.md

7.7 KiB

T14 System Settings Manager

A comprehensive GUI and system tray application for managing Lenovo ThinkPad T14 Gen 6 system settings on Linux (Kubuntu/Ubuntu).

Features

CPU Governor Control

  • Performance Mode: Maximum CPU performance when plugged into AC power
  • Powersave Mode: Battery-optimized CPU frequency scaling
  • Automatic switching based on AC power status (via udev rules)

Fan Control

  • 7 Fan Levels: Manual control from L1 (silent) to L7 (maximum cooling)
  • Automatic Mode (L2): Temperature-based fan management via thinkfan
  • Office-Friendly: Default configuration keeps fan at constant level 2 (~2600 RPM) up to 100°C
  • Real-time fan speed monitoring

Battery Management

  • Conservative Mode (75-80%): Extends battery lifespan for daily use
  • Moderate Mode (80-90%): Balanced charging for regular usage
  • Full Charge (0-100%): Maximum capacity when needed
  • Quick Charge: One-click charge to 100% immediately
  • Automated Management:
    • Time-based: Automatically charge to full before end of workday
    • Network-based: Smart charging based on WiFi location (office vs. home)

System Integration

  • GUI Application: Full-featured window with all controls
  • System Tray: Quick access menu with status updates
  • Auto-start: Tray icon launches automatically on login
  • Real-time Status: CPU temperature, governor, fan speed, battery level

Requirements

Hardware

  • Lenovo ThinkPad T14 Gen 6 (Intel)
  • Battery with charge threshold support (BAT0)

Software

  • Ubuntu 24.04 / Kubuntu (or compatible)
  • Python 3.12+
  • Thinkfan 1.3.1+
  • Required Python packages: tkinter, pystray, pillow

Installation

1. Install Dependencies

# Install thinkfan
sudo apt install thinkfan

# Install Python packages
pip3 install --user --break-system-packages pystray pillow

2. Enable ThinkPad Fan Control

# Enable fan control parameter
echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkpad_acpi.conf

# Apply immediately
sudo modprobe -r thinkpad_acpi
sudo modprobe thinkpad_acpi

3. Configure Thinkfan

Create /etc/thinkfan.yaml:

sensors:
  - hwmon: /sys/class/hwmon/hwmon5/temp1_input  # CPU core temp
    indices: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  - hwmon: /sys/class/hwmon/hwmon7/temp1_input  # ThinkPad sensor
    indices: [1]
  - hwmon: /sys/class/hwmon/hwmon3/temp1_input  # NVMe temp
    indices: [1]

fans:
  - tpacpi: /proc/acpi/ibm/fan

levels:
  - ["level 2", 0, 100]     # Constant level 2 up to 100°C (ultra-silent)
  - ["level 3", 98, 255]    # Level 3 only above 98°C (safety)

Enable and start thinkfan:

sudo systemctl enable thinkfan
sudo systemctl start thinkfan

4. Create Privilege Elevation Helper

Create /usr/local/bin/system-settings-helper.sh:

#!/bin/bash
case "$1" in
    cpu-governor)
        for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
            echo "$2" > "$cpu"
        done
        ;;
    fan-level)
        echo "level $2" > /proc/acpi/ibm/fan
        ;;
    fan-stop-thinkfan)
        systemctl stop thinkfan
        ;;
    fan-start-thinkfan)
        systemctl start thinkfan
        ;;
    battery-start)
        echo "$2" > /sys/class/power_supply/BAT0/charge_control_start_threshold
        ;;
    battery-end)
        echo "$2" > /sys/class/power_supply/BAT0/charge_control_end_threshold
        ;;
esac

Make it executable:

sudo chmod +x /usr/local/bin/system-settings-helper.sh

5. Setup CPU Governor Auto-Switching

Create /usr/local/bin/cpu-governor-switch.sh:

#!/bin/bash
if [ "$(cat /sys/class/power_supply/AC/online)" = "1" ]; then
    for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
        echo "performance" > "$cpu"
    done
else
    for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
        echo "powersave" > "$cpu"
    done
fi

Create udev rule /etc/udev/rules.d/99-cpu-governor.rules:

ACTION=="change", SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="*", RUN+="/usr/local/bin/cpu-governor-switch.sh"

Make executable and reload:

sudo chmod +x /usr/local/bin/cpu-governor-switch.sh
sudo udevadm control --reload-rules

6. Install the Applications

# Clone this repository
git clone ssh://git@gitea.egonetix.de:222/root/battery_management.git
cd battery_management

# Make scripts executable
chmod +x system-settings-gui.py system-settings-tray.py

# Create desktop entry for GUI
cat > ~/.local/share/applications/system-settings-gui.desktop << EOF
[Desktop Entry]
Type=Application
Name=T14 System Settings
Comment=Manage T14 CPU, Fan, and Battery Settings
Exec=python3 $(pwd)/system-settings-gui.py
Icon=preferences-system
Terminal=false
Categories=System;Settings;
EOF

# Create autostart entry for tray
mkdir -p ~/.config/autostart
cat > ~/.config/autostart/system-settings-tray.desktop << EOF
[Desktop Entry]
Type=Application
Name=T14 System Tray
Comment=T14 System Settings in System Tray
Exec=python3 $(pwd)/system-settings-tray.py
Icon=preferences-system
Terminal=false
Categories=System;Settings;
StartupNotify=false
X-GNOME-Autostart-enabled=true
EOF

# Update desktop database
update-desktop-database ~/.local/share/applications

Usage

GUI Application

Launch from application menu: System → T14 System Settings

Or run directly:

python3 system-settings-gui.py

System Tray

The tray icon starts automatically on login. Right-click the icon for quick access to:

  • CPU governor switching
  • Fan level control (L1-L7)
  • Battery management presets
  • Quick charge to 100%

Command Line

Check current status:

# CPU temperature
cat /sys/class/hwmon/hwmon5/temp1_input | awk '{print int($1/1000)}'

# CPU governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# Fan speed
grep "^speed" /proc/acpi/ibm/fan

# Battery status
cat /sys/class/power_supply/BAT0/capacity
cat /sys/class/power_supply/BAT0/status
cat /sys/class/power_supply/BAT0/charge_control_start_threshold
cat /sys/class/power_supply/BAT0/charge_control_end_threshold

Fan Levels

Level Speed (RPM) Use Case
L1 ~2400 Ultra-silent (very low load)
L2 ~2600 Silent office mode (default auto)
L3 ~3100 Light work
L4 ~3600 Moderate load
L5 ~3900 Higher performance
L6 ~4400 Heavy workload
L7 ~5100+ Maximum cooling

Note: L2 is the default automatic mode managed by thinkfan. Selecting L2 re-enables automatic temperature-based fan management. All other levels disable thinkfan and use manual fan control.

Battery Health Tips

  • Daily Use: Keep at 75-80% for maximum battery lifespan
  • Before Travel: Charge to 100% (0-100% mode)
  • Long-term Storage: Store at 50-60% charge
  • Avoid: Constant 100% charging when plugged in all day

Troubleshooting

Fan control not working

# Verify fan control is enabled
cat /sys/module/thinkpad_acpi/parameters/fan_control
# Should output: Y

# Check if thinkfan is running
systemctl status thinkfan

Permission denied errors

# Verify helper script exists and is executable
ls -l /usr/local/bin/system-settings-helper.sh

# Test pkexec manually
pkexec /usr/local/bin/system-settings-helper.sh cpu-governor performance

Tray icon not appearing

# Check if process is running
ps aux | grep system-settings-tray

# Restart manually
pkill -f system-settings-tray
python3 system-settings-tray.py &

License

MIT License - Feel free to modify and distribute.

Author

Created for Lenovo ThinkPad T14 Gen 6 on Kubuntu 24.04.

Contributing

Issues and pull requests welcome at: https://gitea.egonetix.de/root/battery_management