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=yesinlimine-entry-tool.confmakes boot-config edits fragile — alimine-updateafter 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.