Problem with sleep on hybrid Optimus laptop

I have an Alienware m15 R7 laptop with hybrid graphics. If I put it to sleep, the screen turns off (but none of the leds do), but it will not wake back up. I’ve tried running the S0ix troubleshooting script from here.

With that, I get the error message

The system failed to place S2idle entry command by turbostat, please check if the suspend is failed or turbostat tool version is old e.g. did you make turbostat tool executable or separately run S2idle command:
rctwake -m freeze -s 15

I ran the command as root and got

wakeup from "freeze" using /dev/rtc0 at Mon Oct 20 17:31:11 2025

but now the system is frozen the same way that it does when I try to sleep (aside from the screen being on this time). Keyboard and mouse do nothing, I have to hard power off and reboot.

Can you share inxi -Fxxc0z | eos-sendlog, as described here ?

That line of alienware laptops has been available either with Intel or AMD, I assume, as you wanted to test the intel-exlusive S0ix sleep-state that is an intel machine ?

Users on Intel systems can use [S0ixSelftestTool](https://github.com/intel/S0ixSelftestTool). 
Users on AMD systems can use [amd-debug-tools](https://git.kernel.org/pub/scm/linux/kernel/git/superm1/amd-debug-tools.git/about/).

Which method is currently configured ? cat /sys/power/mem_sleep

the log is https://0x0.st/KjNW.txt

and running the cat command gives me

[s2idle]

Okay, according to the system log you’ve got an Alienware m15 R6 and according to that entry in the Arch wiki and this support request, suspend to RAM isn’t supported by Dell on these devices. (In terms of the traditional S3 at least).

I’m not familiar with the intel-only S0ix suspend state, that might require a bit more tinkering to get it working.

In contrast to that, I’ld suggest to set up hibernation instead, for which you’ld have to enable swap space. You’ve got no swap partition in use already, thus I’ld suggest to go create a swap file and you’ll have to pass the swap file offset to the kernel via the resume= & resume_offset= kernel parameters to get it to work properly. (Or reinstall without skipping the swap partition creation, as this should work out of the box).

Yes, but s2idle is not the same thing as the unsupported-on-this-machine S3 sleep, and it doesn’t come back from s2idle. I did go back and configure some of my now-freed space from where I brought files over from my Windows install into a swap partition, and hibernate does not work either.

I created a 32 GB swap partition (the same size as my RAM) on nvme1n1p4, looked up the UUID of the partition and added it to the appropriate kernel config file at /efi/loader/entries/ via resume=UUID=.

Then after rebooting, I went to try hibernation, and it did the exact same thing as attempting to sleep did: the screen turned off, but the led lighting all stayed on as did the fans. And it would not come back to a usable state until I forced a power cycle.

Does cat /sys/power/mem_sleep at least list deep now in addition to s2idle power state?

Usually, if I’m not mistaken, when creating a swap partition via installation of the live iso, calamares should already define the resume=UUID= value as a kernel parameter. Check the contents of /etc/dracut.conf.d/, as this folder should contain the file eos-defaults.conf and resume.conf. The latter drop-in configuration file should have the content add_dracutmodules+=" resume ".

If the kernel parameter is already set, it will show up if you cat /proc/cmdline

But as you’ve tried to set it up via /efi/loader/entries/ your obviously using systemd-boot, which I’m not familiar with as i prefer grub.

There is no /etc/dracut.conf.d/resume.conf file, just the eos-defaults.conf. It also still just shows s2idle in cat /sys/power/mem_sleep.

I didn’t want to reinstall just because I also need to do stuff to move my /home to its own partition in part ‘cause I was lazy and wasn’t really sure I’d be using Endeavour all that often versus Windows.

As the resume.conf file is missing, I guess the resume module isn’t activated and you should be able to create that file which only should require the line add_dracutmodules+="resume"

Once added, you’ll have to execute sudo dracut-rebuild

And as I said, check the output of cat /proc/cmdline if the resume=UUID=<your pretty swap partition uuid value> does match the UUID of your swap partion that you can retrieve via lsblk --fs.

Also check cat /sys/power/resume, as it should match the MAJ:MIN value of the swap partition that can be retrieved via lsblk. If it is incorrect, set the value manually via echo <Your MAJ:MIN value> > /sys/power/resume

You should also check your fstab cat /etc/fstab if the swap partition is listed correctly with the same UUID.

Last but not least, the configuration file /etc/systemd/sleep.conf could be checked. But I wouldn’t change its contents and would prefer to create a drop-in configuration file via sudo nano /systemd/sleep.conf.d/enable-hibernation.conf and add

[Sleep]
HibernateMode=platform
HibernateState=deep

After an reboot you test it simply via sudp systemctl hibernate