Skip to content

Razer Mouse Dead at Boot (USB Autosuspend)

Symptom

Razer DeathAdder Essential (1532:0098) is not recognised at boot — cursor dead. Unplug + replug the USB cable and it works instantly. Returns dead after every reboot.

Root cause

USB autosuspend (kernel usbcore) cuts power / suspends the port before the device is bound at boot. The existing udev rule (/etc/udev/rules.d/99-razer-no-autosuspend.rules) fires on ACTION=="add" but races the suspend and loses, so it's unreliable.

System: CachyOS (Arch-based), Hyprland, limine bootloader, no TLP/powertop installed (so autosuspend comes from the kernel default, not a userspace daemon).

Fix attempt 1 — limine drop-in (FAILED, do not use)

Added /etc/limine-entry-tool.d/usb-autosuspend.conf with KERNEL_CMDLINE[default]+=usbcore.autosuspend=-1 and ran limine-update. Result: system dropped to emergency shell ("you are on your own") at next boot. Cause: ENABLE_VERIFICATION=yes in limine-entry-tool.conf desynced the BLAKE2 config checksum after the update rewrote entries. Had to boot a limine snapshot to recover, then remove the drop-in and re-run limine-update.

Lesson: avoid limine boot-param changes on this box while ENABLE_VERIFICATION=yes. Prefer the udev-only fix below.

Fix attempt 2 — udev-only (WORKS, use this)

No boot param, no limine change. The existing rule only fired on add and lost the race with autosuspend; add a change action and reload:

echo 'ACTION=="add|change", SUBSYSTEM=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="0098", TEST=="power/control", ATTR{power/control}="on"' | sudo tee /etc/udev/rules.d/99-razer-no-autosuspend.rules
sudo udevadm control --reload

Reboot and verify:

cat /proc/cmdline | grep autosuspend   # should be EMPTY now (param removed)
for d in /sys/bus/usb/devices/*; do
  [ -f "$d/idVendor" ] && grep -q 1532 "$d/idVendor" 2>/dev/null && echo "Razer: $d control=$(cat $d/power/control)"
done   # expect control=on at boot, no replug needed

Verify the device stays awake

for d in /sys/bus/usb/devices/*; do
  [ -f "$d/idVendor" ] && grep -q 1532 "$d/idVendor" 2>/dev/null && echo "Razer: $d control=$(cat $d/power/control)"
done
# expect control=on

Notes

  • Bootloader is limine (not grub).
  • ENABLE_VERIFICATION=yes in limine-entry-tool.conf makes boot-config edits fragile — a limine-update after adding a kernel param desynced the enrolled checksum and broke boot. Stick to udev rules, not boot params, unless verification is disabled.
  • The old udev rule (99-razer-no-autosuspend.rules) is the fix (attempt 2), not a backup.
  • User decided to live with the replug (2026-07-18) — udev fix left unapplied. If revisiting, just run the attempt-2 command; no boot-param change needed.