gamescale
Your screen’s real resolution, for one game at a time.
How it works
Games get the screen’s real resolution. The desktop gets its scaling back when they quit.
With GNOME’s fractional scaling on, an X11 game is handed a whole-number multiple of your scaled resolution, never the screen’s own. At 133% on a 2560×1600 laptop no multiple lands on the hardware, so a borderless game renders too small and gets stretched, or too big and gets shrunk.
| What the game is given | Resolution | What you see |
|---|---|---|
| The screen itself | 2560×1600 | what the hardware has |
| Scaled, XWayland factor 1 | 1920×1200 | stretched to fit, and soft |
| Scaled, XWayland factor 2 | 3840×2400 | 2.25× the pixels, then shrunk |
| With gamescale | 2560×1600 | the screen’s own pixels, one to one |
gamescale %command%
Scaling drops to 100% for as long as that one game runs. Text and cursor sizes are bumped to match, so the desktop stays usable behind it, and everything goes back when the game exits.
Even when it doesn’t exit cleanly: a watchdog, a state file on disk and a check at
login mean a crash or a SIGKILL still gives you your desktop back.
The script, its top-bar indicator, and the reconcile unit ship in the image at a pinned tag. Flatpak Steam runs the image’s copy with no setup; other Flatpak launchers need one grant from gamescale’s installer.
What ships in the image
gamescale (pinned, hash-verified):
/usr/bin/gamescale, its top-bar indicator, and a unit that restores your scale if
a game crashes. That’s all native launchers and terminal use need.
Flatpak Steam needs nothing
Flatpak apps can’t see the host’s /usr:
$ flatpak run --command=sh --filesystem=/usr/bin/gamescale:ro com.valvesoftware.Steam
F: Not sharing "/usr/bin/gamescale" with sandbox: Path "/usr" is reserved by Flatpak
At every boot pulsar-steam-grants.service gives Steam a read-only view of the
host OS and puts a directory holding only gamescale, gg and
ggm on its PATH. Steam runs the image’s copies, which update with the
image. If you set gamescale up for Steam on an older image, run
pulsar setup gamescale once: it points Steam back at the image’s copies and removes
old copies in ~/.local/bin that match them.
Other Flatpak launchers need one step
Heroic, Faugus, Bottles and other launchers get gamescale under $HOME:
pulsar setup gamescale --platform <name>
This runs the image’s pinned installer, offline. (Upstream’s curl | sh installs
the latest instead.) It also adds gg and ggm, the
launch options.
The user install replaces the image copy: ~/.local/bin, the user extension and the
user unit take precedence. gamescale --version shows which copy runs.
Written with help from AI and reviewed by a person before publishing. Spotted a mistake? Let us know.