Linux-native fan control profiles for Dell/Alienware laptops that expose dell_smm and related hwmon interfaces.
This project gives you a practical replacement for profile-based fan control workflows (silent, balanced, performance, turbo/g-mode style) without requiring Windows software.
- Applies predefined and custom CPU/GPU fan profiles.
- Supports BIOS auto mode fallback.
- Exposes a status command for fan RPM, mode, and temperatures.
- Provides a systemd service to apply a default profile on boot.
- Includes optional sudoers policy for passwordless hotkeys only for this command.
- Language: Bash
- Platform: Linux (tested on Fedora)
- Runtime interfaces:
/sys/class/hwmon/*(kernelhwmon)- Dell interfaces:
dell_smm,dell_ddv,alienware_wmi(kernel dependent)
- Service manager: systemd
- Privilege model: sudo + optional scoped NOPASSWD rule for one binary
bin/fan-profile: main profile switch commandbin/fan-status: live sensor/mode status commandsystemd/fan-profile.service: boot-time profile apply servicesudoers/fan-profile: optional least-privilege sudo policyinstall.sh: installer for binaries + service
Expected to work on systems where kernel exposes Dell fan control nodes under hwmon, especially:
pwm1,pwm2pwm1_enable,pwm2_enablefan1_input,fan2_input
Verify availability:
for d in /sys/class/hwmon/hwmon*; do
printf "== %s (%s)\n" "$d" "$(cat "$d/name" 2>/dev/null)"
ls "$d" 2>/dev/null | grep -E 'pwm|fan[0-9]_input|temp[0-9]_input' || true
doneFrom project root:
sudo ./install.shInstaller actions:
- Installs
fan-profileto/usr/local/bin/fan-profile - Installs
fan-statusto/usr/local/bin/fan-status - Installs service unit to
/etc/systemd/system/fan-profile.service - Enables and starts
fan-profile.service(default profile:balanced)
sudo fan-profile silent
sudo fan-profile balanced
sudo fan-profile performance
sudo fan-profile gmode
sudo fan-profile autosudo fan-profile custom 60 75Meaning:
- CPU fan target:
60% - GPU fan target:
75%
The script maps percentage to PWM (0..255) using:
pwm = floor(percent * 255 / 100)
fan-statusYou should see fan RPM, PWM values, mode (1=manual, 2=auto), and thermal readings.
Current service applies balanced on startup.
To change default boot profile, edit ExecStart in service file:
ExecStart=/usr/local/bin/fan-profile performanceThen reload:
sudo systemctl daemon-reload
sudo systemctl restart fan-profile.serviceIf you want desktop shortcuts or keybinds without password prompt, install the provided sudoers rule:
sudo install -Dm440 sudoers/fan-profile /etc/sudoers.d/fan-profile
sudo visudo -cf /etc/sudoers.d/fan-profileExample keybind commands:
sudo -n /usr/local/bin/fan-profile silent
sudo -n /usr/local/bin/fan-profile balanced
sudo -n /usr/local/bin/fan-profile performance
sudo -n /usr/local/bin/fan-profile gmodeSecurity note: do not enable broad NOPASSWD: ALL.
- Run installer:
sudo ./install.sh - Or manually install binary to
/usr/local/bin - Reopen shell and test:
command -v fan-profile
- Kernel might not expose
dell_smmon your model/BIOS. - Check loaded modules and available
hwmonnames. - BIOS updates or kernel changes can alter support.
- Embedded controller/firmware may reclaim fan control.
- Re-apply profile after suspend/resume if needed.
- Manual fan control can increase noise and wear.
- Avoid low fan settings under heavy load.
- Monitor temperatures after any profile change.
- Use at your own risk.
Inspired by profile-based control workflows in fan-control utilities, implemented here with Linux-native tooling and kernel interfaces.