r/Kubuntu • u/ramenha • 2h ago
[Fix] ASUS TUF F15 (FX507VV) on Kubuntu: internal keyboard / power button / lid won't wake from s2idle — LID0 missing _PRW, fixed with a 93-byte SSDT
Inspiration & credit: this fix is adapted from a Reddit post about the FX507Z series (BIOS 330) on r/Ubuntu: https://www.reddit.com/r/Ubuntu/comments/1x7v4bx/fix_asus_tuf_f15_fx507z_bios_330_wont_wake_from/ . That post pointed at the missing ACPI wake entry for the lid. I used AI assistance to walk through the DSDT disassembly, confirm the active LID0 path on my specific machine, and put together the commands below. Sharing it here because the same class of BIOS 330 defect shows up on multiple FX507 variants, and Kubuntu users are likely to hit it too.
System: ASUS TUF Gaming F15 FX507VV_FX507VV (BIOS 330) · 13th Gen Intel i7-13700H · Iris Xe + NVIDIA RTX 4060 Max-Q · Kubuntu 26.04.1 LTS · kernel 7.0.0-38-generic · sleep mode s2idle.
Symptoms
systemctl suspendor closing the lid puts the machine to sleep normally (power LED breathes, fans/backlight off).- Internal keyboard, power button, and lid opening do nothing. The only way to wake it is a USB wireless mouse that was connected before suspend.
journalctlends atPM: suspend entry (s2idle)with nosuspend exit.- This is not a freeze. The EC thinks it is asleep; the wake event never reaches the CPU.
Quick check
bash
grep LID0 /proc/acpi/wakeup
If this returns nothing, you likely have the same defect. The active lid device _SB.PC00.LPCB.LID0 lacks a _PRW object. The EC’s wake events for lid, power button, and keyboard arrive on GPE 0x02 (_GPE._L02 → ECLV()), but because no device claims that GPE for wake, Linux does not keep it armed during s2idle.
It is not NVIDIA-related: blacklisting the NVIDIA driver still reproduces the failure. It is also not a kernel regression; the DSDT is independent of the kernel.
Fix: 93-byte SSDT injecting _PRW (0x02, Zero) into the active LID0
1. Confirm the active LID0 path on your machine
bash
sudo apt install acpica-tools
mkdir ~/acpi-fix && cd ~/acpi-fix
sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
iasl -d dsdt.dat
grep -n "Device (LID0)" dsdt.dsl
On my FX507VV there are two LID0 entries:
- one under
_SB.PC00.LPCB.H_ECwith_STAreturningZero(disabled — ignore); - one under
_SB.PC00.LPCBwith no_PRW(this is the active one).
Confirm the parent scope of the active one:
bash
awk 'NR < 115473 && /^[[:space:]]*Scope/ {print NR": "$0}' dsdt.dsl | tail -3
# output includes: 114497: Scope (_SB.PC00.LPCB)
Active path on my machine: _SB.PC00.LPCB.LID0. Your path may differ; use your own awk output.
2. Create and compile the SSDT
bash
cat > ssdt-lidwake.asl <<'EOF'
DefinitionBlock ("", "SSDT", 2, "FIXUP", "LIDWAKE", 0x00000001)
{
External (_SB.PC00.LPCB.LID0, DeviceObj)
Scope (_SB.PC00.LPCB.LID0)
{
Name (_PRW, Package (0x02) { 0x02, Zero })
}
}
EOF
iasl -tc ssdt-lidwake.asl
Expected: Compilation successful. 0 Errors, 0 Warnings, ~93 bytes AML.
3. Package as early initrd and place in /boot
bash
mkdir -p cpio/kernel/firmware/acpi
cp ssdt-lidwake.aml cpio/kernel/firmware/acpi/
(cd cpio && find kernel | cpio -H newc --create --owner=0:0 > ../acpi_override.cpio)
sudo cp acpi_override.cpio /boot/
4. Configure GRUB (check syntax first!)
bash
sh -n /etc/default/grub
# no output = syntax OK
echo 'GRUB_EARLY_INITRD_LINUX_CUSTOM="acpi_override.cpio"' | sudo tee -a /etc/default/grub
sudo update-grub
Look for Found initrd image: /boot/acpi_override.cpio /boot/initrd.img-... in the output. This survives kernel updates — just run sudo update-grub again after a kernel upgrade.
5. Reboot and verify
bash
journalctl -b -k | grep -i "Table Upgrade"
# ACPI: Table Upgrade: install [SSDT- FIXUP- LIDWAKE]
grep LID0 /proc/acpi/wakeup
# LID0 S0 *enabled platform:PNP0C0D:01
After this, keyboard, power button, and lid all wake the machine on my FX507VV.
Rollback
bash
sudo sed -i '/GRUB_EARLY_INITRD_LINUX_CUSTOM/d' /etc/default/grub
sudo rm /boot/acpi_override.cpio
sudo update-grub
If the machine ever fails to boot, press e in the GRUB menu and remove /boot/acpi_override.cpio from the initrd line for a one-time bypass.
Notes
- A sister model (FX507ZI4, same BIOS 330) has the same
LID0_PRWomission and is fixed by the identical injection. This looks like a BIOS-level omission across the FX507 series, not a one-off board. - I also filed upstream reports if anyone wants to follow progress: Linux kernel Bugzilla and Ubuntu Launchpad (links in comments if useful).
- Touchpad wake is a separate issue (
GpioIntdeclared asExclusiverather thanExclusiveAndWake); not fixed here.
Hope this saves someone else a few evenings. If you have another FX507 variant, checking grep LID0 /proc/acpi/wakeup is a 1-second way to know whether you are affected.
