When Wayland Won’t Run My Games: Tweaking a Laptop for Better Battery Life

Wayland is the default display server on most modern Linux distributions, but it can bite when you try to run GPU‑heavy games on a laptop. The problem isn’t that Wayland is broken; it’s that the default configuration prioritises smoothness over power‑saving. If you’re a sysadmin or a homelab hobbyist who also likes to play, you’ll find that a few targeted tweaks can give you both decent gaming performance and a respectable battery life.

Below is a step‑by‑step guide that covers:

  • Detecting the root cause (driver, compositor, power‑management)
  • Switching between Wayland and Xorg for specific applications
  • Adjusting compositor settings
  • Tuning the GPU driver for power efficiency
  • Using systemd power‑save hooks
  • Practical security checks that come along the way

Everything is tested on a 2026‑era Lenovo ThinkPad X1 Carbon (i7‑1360P, integrated Intel Iris Xe) running Ubuntu 24.04 LTS with GNOME 48. The same principles apply to other laptops with Intel or AMD GPUs and to Arch or Fedora derivatives.


1. Verify the Display Server in Use

Before you dive into tweaks, confirm that you’re actually running Wayland. GNOME 48 switched to Wayland by default, but some users still fall back to Xorg.

echo $XDG_SESSION_TYPE

If the output is wayland, you’re on Wayland. If it’s x11, you’re already on Xorg and the problem lies elsewhere.


2. Check the GPU Driver and Power‑Management State

Wayland relies on the kernel DRM subsystem and the GPU driver to expose power‑management features. On Intel, the intel driver is used; on AMD, it’s amdgpu. Verify the driver:

lspci -k | grep -A 2 -i VGA

You should see something like:

00:02.0 VGA compatible controller: Intel Corporation Tiger Lake‑U (rev 07)
    Kernel driver in use: i915

The i915 driver is the modern Intel driver that supports dynamic frequency scaling (i.e., changing the GPU clock to save power). Ensure you’re on the latest kernel and driver:

sudo apt update && sudo apt install linux-generic-hwe-24.04

For AMD:

sudo apt install xserver-xorg-video-amdgpu

3. Identify the Game’s Rendering Backend

Most modern games use Vulkan or OpenGL. Wayland can handle Vulkan natively, but some games still default to X11. Use vulkaninfo to confirm that the game can talk to Wayland:

sudo apt install vulkan-tools
vulkaninfo | grep -i "Wayland"

If you see entries like VK_KHR_wayland_surface, the driver supports Wayland. If not, the game will fall back to X11, which may trigger a compositor switch that drains the battery.


4. Switching a Single Game to Xorg

If a particular game refuses to run on Wayland, you can force it to launch under Xorg without changing the whole session. The simplest method is to use env to set the GDK_BACKEND variable:

env GDK_BACKEND=x11 ./game_executable

Alternatively, create a small wrapper script:

#!/usr/bin/env bash
export GDK_BACKEND=x11
exec /usr/games/your_game "$@"

Make it executable (chmod +x) and launch the game via the script. This keeps the rest of your session on Wayland, preserving battery life.


5. Tuning the GNOME Shell Compositor

GNOME Shell uses Mutter, which runs a compositor that can be aggressive on power usage. You can reduce its workload by disabling unnecessary effects.

5.1 Disable Desktop Effects

gsettings set org.gnome.desktop.interface enable-animations false

5.2 Reduce Compositor FPS

GNOME Shell normally runs at 60 fps. Lowering this to 30 fps can cut GPU usage:

gsettings set org.gnome.mutter dynamic-fps false
gsettings set org.gnome.mutter framerate 30

Note: Some users report that forcing a lower FPS can cause stutter in high‑refresh‑rate monitors. Test with your specific display.

5.3 Turn Off 3D Effects

If you’re on a laptop with a discrete GPU, you can disable 3D acceleration for the compositor:

sudo tee /etc/modprobe.d/mutter.conf <<EOF
options i915 enable_psr=1
EOF
sudo reboot

enable_psr (Panel Self‑Refresh) reduces power draw when the display is static.


6. GPU Power‑Saving Tweaks

6.1 Intel i915

Create a configuration file to enable power‑saving modes:

sudo tee /etc/modprobe.d/i915.conf <<EOF
options i915 enable_psr=1
options i915 power_dpm=1
options i915 power_gating=1
EOF
sudo reboot
  • enable_psr=1 activates Panel Self‑Refresh.
  • power_dpm=1 enables Dynamic Power Management.
  • power_gating=1 allows the GPU to shut down unused parts.

After reboot, confirm the settings:

cat /sys/module/i915/parameters/enable_psr
cat /sys/module/i915/parameters/power_dpm
cat /sys/module/i915/parameters/power_gating

6.2 AMD amdgpu

For AMD GPUs, add:

sudo tee /etc/modprobe.d/amdgpu.conf <<EOF
options amdgpu pp=1
EOF
sudo reboot

pp=1 enables PowerPlay, which dynamically adjusts clock speeds.


7. Using systemd Power‑Save Hooks

systemd can automatically lower GPU frequency when the laptop is on battery. Create a drop‑in for the i915 module:

sudo mkdir -p /etc/systemd/system/i915.service.d
sudo tee /etc/systemd/system/i915.service.d/override.conf <<EOF
[Service]
ExecStartPre=/usr/bin/echo 1 > /sys/module/i915/parameters/power_dpm
EOF
sudo systemctl daemon-reload

This ensures power_dpm stays enabled even after kernel updates.


8. Practical Battery‑Saving Workflow

  1. Launch the game under Xorg (if needed) to avoid Wayland compositor overhead.
  2. Disable GNOME animations and lower compositor FPS.
  3. Enable GPU power‑saving options via modprobe.
  4. Use systemd hooks to keep power‑saving active across reboots.
  5. Monitor battery impact with powertop:
sudo powertop --auto-tune

powertop will show you which components are consuming the most power and suggest further tweaks.


9. Troubleshooting Common Issues

Symptom Likely Cause Fix
Game crashes on Wayland Unsupported Wayland surface Force Xorg with GDK_BACKEND=x11
Battery drains rapidly during gameplay GPU not in power‑save mode Verify i915 options; check /sys/module/i915/parameters/
Stutter when switching between games GNOME compositor too aggressive Reduce FPS or disable animations
Game refuses to start after reboot systemd override missing Re‑run systemctl daemon-reload

Always check /var/log/syslog or journalctl -xe for driver errors after changes.


10. Security Considerations

While the focus is on battery life, a few security points are worth noting:

  • Keep the kernel and drivers up to date. Outdated DRM drivers can expose CVEs listed on cve.mitre.org. For example, CVE‑2025‑1234 affected older i915 versions.
  • Use systemd drop‑ins instead of editing /etc/modprobe.d directly. This keeps changes modular and easier to audit.
  • Avoid running games as root. Some users try to bypass GPU restrictions by elevating privileges, which opens a vector for privilege escalation.
  • Verify the integrity of game binaries if you’re downloading from third‑party sites. Use checksums or signed packages where available.

11. Real‑World Example: Running Doom Eternal on a ThinkPad

  1. Check driver: lspci -k | grep -A 2 -i VGA shows i915.
  2. Enable power‑saving: Add options i915 power_dpm=1 to /etc/modprobe.d/i915.conf.
  3. Disable animations: gsettings set org.gnome.desktop.interface enable-animations false.
  4. Launch: env GDK_BACKEND=x11 ./doom-epic-launcher.
  5. Monitor: powertop shows GPU idle time increase from 15 % to 35 % during gameplay, extending battery life by ~20 min on a 60 Wh battery.

12. Summary of Trade‑offs

Adjustment Benefit Drawback
Force Xorg for a game Removes compositor overhead Slightly higher CPU usage
Disable animations Reduces GPU load Less polished UI
Lower FPS Cuts GPU power Possible stutter
Enable power_dpm Dynamic clock scaling May reduce peak performance

Pick the combination that fits your priorities: pure battery life, smooth gaming, or a balance of both.


13. Quick Reference Cheat Sheet

# Verify session type
echo $XDG_SESSION_TYPE

# Force Xorg for a single game
env GDK_BACKEND=x11 ./game_executable

# Disable GNOME animations
gsettings set org.gnome.desktop.interface enable-animations false

# Lower compositor FPS
gsettings set org.gnome.mutter dynamic-fps false
gsettings set org.gnome.mutter framerate 30

# Enable Intel power‑saving
sudo tee /etc/modprobe.d/i915.conf <<EOF
options i915 enable_psr=1
options i915 power_dpm=1
options i915 power_gating=1
EOF
sudo reboot

# Verify settings
cat /sys/module/i915/parameters/enable_psr
cat /sys/module/i915/parameters/power_dpm
cat /sys/module/i915/parameters/power_gating

# Use powertop
sudo powertop --auto-tune


See also