And reboot. This seems to be working for me, although I'm not certain I didn't also get improvement with the
/etc/systemd/logind.conf change I did first. In any case, no heat or fan noise is observed while suspended with the lid shut, and it doesn't respond to ping over wifi either, which I had been getting, intermittently, before.
Battery life still goes down while suspended, probably because the working method of suspend is just less efficient than the default, ideal, method that apparently isn't working properly, but it appears better than the default behaviour.
Tried on my XPS 13 9370, I don't know about older models, although it seems likely they'll be similar.
I had tried installing
pm-utils and using
pm-suspend and that seemed to be suspending pretty effectively, so I wanted to see if I could make
systemd-suspend do the same thing.
I looked through the scripts in
pm-utils to figure out what it was actually doing, and it looks like, in this situation, it was doing
echo -n "mem" > /sys/power/state. So I created the
/etc/systemd/sleep.conf file as shown above to match it.
It's not entirely clear what the default behaviour is. The manpage for
systemd-sleep.conf says that the distro should include
/etc/systemd/sleep.conf with the compiled-in defaults commented out, so you can see this information, but in ubuntu this file is missing. I noticed though that if you
cat /sys/power/state you get:
So I'm guessing that this is what it's doing by default. My guess is that
freeze may be being accepted, in that it doesn't throw an error, which would otherwise cause systemd to move on to
mem, but maybe doesn't actually work properly, or reliably, for complex reasons we seem unable to determine. So just sending
mem instead is a hopeful stab at avoiding that and just doing what
I suspect the SuspendMode setting is actually superfluous and doesn't do anything anyway. I suspect this because
cat /sys/power/disk just gets you:
Am new user, thus unable to comment with an observation, forced to present it as an answer as if I'm super-confident in it! But I think it's working.