Machine translation from Turkish (Cloudflare Workers AI), not reviewed by the author. Read the Turkish original

← Posts

Quickshell Game Mode and HUD/OSD Integration for the Linux Gamer

Score —

Fullscreen detection in Steam and Proton games, automatic resource management, FPS/temperature OSD panel, and notification suppression.

· 2 min read
Contents

Summary: I explain how Quickshell detects a full-screen game and switches the desktop into game mode: muting notifications and hiding the top bar, setting CPU, GPU and I/O priorities with Feral GameMode, and a small FPS and temperature indicator opened with a shortcut.

Gaming on Linux has become a smooth experience after the advances in Proton and Wayland. However, desktop shells carelessly showing notifications during gameplay, drawing animations in the background and occupying GPU memory, or causing micro-stutters in frame time is a serious problem.

Quickshell instantly detects that a full-screen game has been launched at the Wayland protocol level and automatically switches the desktop into Game Mode.

1. Full-Screen Detection and Automatic “Do Not Disturb” (DND)

When full-screen windows are triggered on Hyprland, Quickshell’s event listener kicks in:

import QtQuick 2.15
import Quickshell.Hyprland 1.0

Item {
    id: gameDetector
    
    readonly property bool isGameActive: {
        const win = Hyprland.activeWindow;
        return win && win.fullscreen && (win.class.includes("steam_app") || win.class.includes("gamescope"));
    }
    
    onIsGameActiveChanged: {
        if (isGameActive) {
            console.log("[Quickshell] Game Mode aktif: Bildirimler bastırılıyor.");
            NotificationManager.mute();
            TopBar.exclusiveZone = 0;
            TopBar.visible = false;
        } else {
            console.log("[Quickshell] Game Mode pasif: Masaüstü panelleri geri yüklendi.");
            NotificationManager.unmute();
            TopBar.exclusiveZone = 36;
            TopBar.visible = true;
        }
    }
}

This way, pop-up notifications do not appear in the middle of the screen at the most exciting moment of the game; the top bar is completely disabled, and the graphics card transfers its entire drawing budget to the game.

2. Feral GameMode and CPU/GPU Management

When Game Mode is triggered, a handshake is performed in the background with gamemoded over D-Bus:

  • CPU Governor: Set to performance mode, core frequency fluctuations are prevented.
  • GPU Power Profile: Locked to the high performance level.
  • I/O Priority: Real-time (RT) priority is allocated to the game process.

3. MangoHud-Like Compact OSD Widget

A minimal QML telemetry window that can be opened in the corner of the screen with a keyboard shortcut when desired presents the in-game frame rate (FPS), GPU temperature and memory usage in a transparent layer.

My reading

  • The desktop should step back during gaming: Silencing notifications and closing the bar when full screen is detected leaves both attention and the drawing budget to the game.
  • Resource management is automatic: With GameMode, the processor is set to performance mode, the GPU is locked to a high profile and priority is given to the game; nothing needs to be done manually for these.
  • Measurement is always at hand: The OSD panel opened with a shortcut shows the frame rate, GPU temperature and memory usage without interrupting the game.