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
systemdpower‑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=1activates Panel Self‑Refresh.power_dpm=1enables Dynamic Power Management.power_gating=1allows 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
- Launch the game under Xorg (if needed) to avoid Wayland compositor overhead.
- Disable GNOME animations and lower compositor FPS.
- Enable GPU power‑saving options via modprobe.
- Use
systemdhooks to keep power‑saving active across reboots. - 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 olderi915versions. - Use
systemddrop‑ins instead of editing/etc/modprobe.ddirectly. 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
- Check driver:
lspci -k | grep -A 2 -i VGAshowsi915. - Enable power‑saving: Add
options i915 power_dpm=1to/etc/modprobe.d/i915.conf. - Disable animations:
gsettings set org.gnome.desktop.interface enable-animations false. - Launch:
env GDK_BACKEND=x11 ./doom-epic-launcher. - Monitor:
powertopshows 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
- When a backup script keeps my CPU pegged: a quick ps, nice, ionice tweak to keep the terminal responsive.
- Why my headphone jack stopped working after the latest update—and how a single udev rule brought it back
- How I Configured Caddy as a Reverse Proxy for My Home Lab and Solved the HTTPS Redirect Bug
- How I Prevented a Rootless Podman Container From Filling My Disk With Logs
- Recovering a single config file from a corrupted Borg backup without restoring the whole archive