Skip to content

Repository files navigation

victus-control logo

victus-control

Fan control and keyboard lighting for HP Victus / Omen laptops on Linux.

Stock firmware parks both fans near 2000 RPM in AUTO while the CPU cooks. victus-control gives you a real fan curve, animated RGB backlighting, a privileged backend, a GTK4 desktop app, and a GNOME Shell extension.


License: GPL v3 Platform GTK4 PRs Welcome

Arch Fedora Ubuntu GNOME


victus-control dashboard

One page: animated backlight preview above, analog fan dials and thermometers below.


Contents


Why victus-control

Feature What it does
πŸŒ€ Better Auto Samples CPU/GPU temperature and utilisation every ~2 s, clamps to each fan's hardware maximum, and reapplies targets every 90 s with the firmware-required 10 s stagger. Fans climb smoothly with load instead of idling at 2000 RPM like HP's AUTO.
🎚️ Manual mode Eight RPM steps (~2000 ➜ 5800/6100 RPM) with per-fan precision and watchdog refreshes that keep settings alive through firmware quirks.
🌈 Animated lighting Single-zone and four-zone RGB, brightness, and rainbow / breathe / flow animations that keep running after the app is closed.
πŸ“Š Analog telemetry Fan dials whose blades turn with the real RPM, and thermometers that shift colour as they heat.
πŸ–₯️ GNOME integration Fan and keyboard controls from the top panel.

Warning

Validated primarily on HP Victus 16-s00xxxx and contributor-tested on the Fedora/Arch variants listed in PRs and issues. Other models may work but are not guaranteed β€” monitor your thermals. On HP Victus 15 fa0xxx, manual fan speeds appear unsupported; only MAX, AUTO, and Better Auto are known to behave.


Quick install

curl -fsSL https://raw.githubusercontent.com/Batuhan4/victus-control/main/bootstrap.sh | bash

The bootstrap script downloads the current main branch into a temporary directory and runs install.sh.

Caution

Do not pipe this into sudo. install.sh elevates itself and needs to know the original desktop user to set up the GNOME extension.


Support matrix

Component Status
Main installer Arch-based, Fedora, and Ubuntu/Debian-based distros
Desktop app GTK4, installed by the main project installer
GNOME Shell extension GNOME Shell 45+, auto-installed by install.sh when GNOME is present
Ubuntu / Debian Contributor-tested on Ubuntu 24.04 LTS (GNOME 46); other Debian-based distros use the same path but are less tested

Secure Boot / userspace alternative

If you can't load the patched hp-wmi DKMS module β€” most notably on Ubuntu with Secure Boot enabled, where unsigned out-of-tree modules are rejected β€” see victus-fan/.

It is a self-contained userspace controller that drives the stock in-tree hp-wmi driver (two-state pwm1_enable, no kernel module), tying fan speed to your power profile and CPU / iGPU / NVIDIA temperature via a small daemon + CLI (no GUI). Tested on an HP Victus 15-fb0xxx running Ubuntu 26.04 β€” see victus-fan/README.md.

Important

Pick one fan controller, not both. victus-fan and the main victus-backend both write the same pwm1_enable knob; running both at once makes them fight over the fans. Use victus-fan instead of the DKMS stack on machines where the patched module can't load β€” not alongside it.


System requirements

Requirement Detail
OS 64-bit Linux with systemd
Package manager pacman (Arch), dnf (Fedora), or apt-get (Ubuntu/Debian)
Desktop GNOME Shell 45+ for the panel extension (optional)
Privileges Root, for the DKMS module, sudoers rules, and systemd units

Install & update

Bootstrap one-liner

curl -fsSL https://raw.githubusercontent.com/Batuhan4/victus-control/main/bootstrap.sh | bash

Use this if you want a temporary checkout and the shortest install path.

Git clone installer

git clone https://github.com/Batuhan4/victus-control.git
cd victus-control
sudo ./install.sh

The wrapper routes to arch-install.sh, fedora-install.sh, or ubuntu-install.sh based on your OS. On GNOME systems it also installs the panel extension for the desktop user automatically.

The installer handles dependency install, user/group creation, DKMS module registration, build + install, and restarts victus-backend.service.

Note

Log out and back in afterwards so your user joins the victus group.

Fedora notes

  • Validated by contributors on HP Victus 16-S0046NT with Fedora 43.
  • The Fedora installer verifies that the patched hp_wmi module is actually active before starting the backend.
  • If you recently updated the kernel, reboot first so the running kernel matches the installed kernel-devel package.

Ubuntu / Debian notes

  • Contributor-tested on Ubuntu 24.04 LTS (GNOME 46) with an HP Victus 16.
  • The installer accepts DKMS-managed hp_wmi module layouts used by both /extra and /updates/dkms.
  • Secure Boot can block the DKMS module from loading. If install succeeds but hp_wmi still does not load, enroll the MOK key with sudo mokutil --import /var/lib/shim-signed/mok/MOK.der or disable Secure Boot, then reboot.

Background services

Unit Role
victus-healthcheck.service Runs at boot to ensure the patched hp-wmi DKMS module is built for the current kernel and hp_wmi is loaded before the backend starts
victus-backend.service Starts at boot and stays active, keeping Better Auto and the lighting applied even with no UI client connected

Daily usage

Launch the GTK app (victus-control) or use the CLI client (test_backend.py).

Everything lives on one page, with a card per subsystem.

Cooling card β€” the profile dropdown offers AUTO, Better Auto, MANUAL, MAX:

  • Better Auto is enforced by the background service on each boot, keeps fans in manual PWM, and adjusts RPM from temperature and utilisation β€” ideal for gaming or heavy workloads.
  • Manual maps slider positions to calibrated RPM steps; fan 2 honours the 10 s offset automatically.

Fan speed and temperature are shown as analog dials with the digital value under each. The rotor blades turn at a rate derived from the measured RPM, and a stopped fan renders grey rather than merely still. Thermometers and readouts shift cyan β†’ amber β†’ red, crossing at 70 Β°C and 85 Β°C.

Note

On boards whose firmware exposes no fan speed targets, manual speed is removed from the card entirely and both MANUAL and Better Auto are dropped from the profile list, since both steer the fans through those targets. AUTO and MAX remain, and the backend leaves such boards on the firmware curve at start-up.

Keyboard card β€” a switch turns the backlight on and off, a row of style radios picks the lighting mode, and the speed slider or colour picker appears depending on which style is selected. There is no Apply step; changing anything applies it.

Backend status: systemctl status victus-backend.service (logs via journalctl -u victus-backend).


Lighting effects

Effect Behaviour
Static colour One fixed colour β€” the classic behaviour
Rainbow cycle The whole keyboard walks the hue wheel
Breathe The current colour fades in and out
Flow (river) On four-zone Omen keyboards the hue travels left-to-right across the zones, so the colour flows along the board. Not offered on single-zone hardware, which has no geometry for it
Solid style showing the colour picker
Picking Solid swaps the speed slider for a colour picker β€” the card only shows the control that applies.
  • The Speed slider (1–100) sets the cycle rate.
  • Picking a static colour stops the animation. Whichever you chose last, an effect or a solid colour, is restored after a reboot.
  • The animation runs in the backend, so lighting keeps going after the GUI is closed. It pauses while the backlight is switched off and resumes when it is switched back on.

Tip

Controls that cannot do anything are not shown: Flow is absent on single-zone boards, the colour picker only appears for Solid, and the speed slider only for the animated styles.


GNOME Shell extension

Quick access to fan and keyboard controls from the top panel.

Feature
πŸŒ€ Fan mode control β€” AUTO, Better Auto, MANUAL, MAX
πŸ“Š Manual fan speed β€” per-fan sliders with 8 RPM steps (visible in MANUAL mode)
⌨️ Keyboard RGB β€” 10 colour presets and a brightness slider
🌑️ Live status β€” real-time CPU temperature and fan RPM
sudo ./install.sh
gnome-extensions enable victus-control@victus

install.sh installs the extension automatically on GNOME systems. You only need the manual gnome-extensions enable ... step after install or after logging back in.

Install the extension by itself
cd gnome-extension
bash ./install.sh
gnome-extensions enable victus-control@victus

Requirements: GNOME Shell 45+, victus-backend.service running. On Ubuntu GNOME and other GNOME desktops the extension can be installed separately as long as the backend socket is available.

See gnome-extension/README.md for detailed documentation.


Developing

meson setup build --prefix=/usr
meson compile -C build
sudo meson install -C build
  • Smoke test (requires the backend running): python test_backend.py
  • The installer fetches hp-wmi-fan-and-backlight-control; it is git-ignored to keep the repo lean.

Troubleshooting

Fans ignore commands

Ensure the DKMS module is loaded:

dkms status | grep hp-wmi-fan-and-backlight-control
modprobe --show-depends hp_wmi | tail -n1

The last command should point at the DKMS-built hp-wmi.ko under /updates/dkms/ on Arch or /extra/ on other distros.

Fans stuck at one speed after the service starts

A few boards report software fan support but have a BIOS that ignores per-RPM targets. Better Auto then switches the fans to MANUAL and cannot steer them, leaving them pinned with the firmware curve disabled.

Check with the backend in Better Auto and the machine under load:

grep . /sys/devices/platform/hp-wmi/hwmon/hwmon*/fan*_input
journalctl -u victus-backend -n 20

If the RPM readings sit at one value while the better-auto: lines in the log keep raising the level, your board is affected. Keep the keyboard lighting and leave the fans to the firmware:

sudo mkdir -p /etc/systemd/system/victus-backend.service.d
printf '[Service]\nEnvironment=VICTUS_NO_FAN_CONTROL=1\n' | \
  sudo tee /etc/systemd/system/victus-backend.service.d/no-fan-control.conf
sudo systemctl daemon-reload && sudo systemctl restart victus-backend

With that set the backend puts the driver back into AUTO on every start, refuses fan commands from any client, and the app's cooling card shows fan speeds and temperatures only.

Permission errors

Confirm victus group membership, then re-run the installer:

groups $USER
sudo usermod -aG victus $USER

Log out and back in for the group change to take effect.

Socket missing
sudo systemd-tmpfiles --create
sudo systemctl restart victus-backend.service
GNOME extension missing after install

Log out and back in once, then:

gnome-extensions enable victus-control@victus
Uninstall
sudo systemctl disable --now victus-backend
sudo dkms remove hp-wmi-fan-and-backlight-control/$(dkms status -m hp-wmi-fan-and-backlight-control | sed -n 's#.*/\([^,]*\),.*#\1#p' | head -n1) --all

Substitute the version shown by dkms status if the command above does not resolve it.


Contributing

See AGENTS.md for coding style, testing, and PR expectations. Hardware validation notes are very welcome in PR descriptions β€” this project lives on contributors reporting what does and does not work on their board.

License

GPLv3. See LICENSE for the full text.

About

Linux fan control and keyboard lighting for HP Victus/Omen with Arch/Fedora installers and GNOME Shell support

Topics

Resources

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages