Skip to content

High CPU usage of one core with custom module #5303

Description

@Spixmaster

Describe the bug
Enabling one of my custom modules lets one CPU core compute at 100 %. Related to #846 and #2631. The problem is only due to custom/package-updates from my testing.

To reproduce
Steps to reproduce the behaviour, including a minimal config that triggers it:

{
    "exclusive": true,
    "fixed-center": true,
    "height": 30,
    "id": "",
    "include": [
        "./modules/backlight.jsonc",
        "./modules/battery.jsonc",
        "./modules/clock.jsonc",
        "./modules/cpu.jsonc",
        "./modules/custom.jsonc",
        "./modules/disk.jsonc",
        "./modules/hyprland.jsonc",
        "./modules/keyboard-state.jsonc",
        "./modules/memory.jsonc",
        "./modules/network.jsonc",
        "./modules/privacy.jsonc",
        "./modules/systemd-failed-units.jsonc",
        "./modules/temperature.jsonc",
        "./modules/tray.jsonc",
        "./modules/wireplumber.jsonc"
    ],
    "ipc": false,
    "layer": "top",
    "margin": "0",
    "margin-bottom": "0",
    "margin-left": "0",
    "margin-right": "0",
    "margin-top": "0",
    "mode": "dock",
    "modifier-reset": "press",
    "modules-center": [
        "custom/package-updates", // TODO Disabling this solves the issue.
        "systemd-failed-units",
        "custom/new-e-mails",
        "privacy"
    ],
    "modules-left": [
        "hyprland/workspaces",
        "hyprland/window"
    ],
    "modules-right": [
        "wireplumber#source",
        "wireplumber#sink",
        "backlight",
        "disk",
        "cpu",
        //"cpu_graph",
        "temperature",
        "memory",
        "network",
        "battery",
        "keyboard-state",
        "clock",
        "tray"
    ],
    "name": "main",
    "on-sigusr1": "toggle",
    "on-sigusr2": "reload",
    "output": ["eDP-1"],
    "passthrough": false,
    "position": "top",
    "reload_style_on_change": true,
    "spacing": 4,
    "start_hidden": false,
    "width": 1920
}

modules/cusom.jsonc

{
    "custom/package-updates": {
        "datapoints": 20,
        "escape": false,
        "exec": "${HOME}/skripte/statusleiste/paketaktualisierungen.sh",
        "exec-if": "exit 0",
        "exec-on-event": false,
        "expand": false,
        "format": "{text}",
        "graph_type": "line",
        "hide-empty-text": false,
        "interval": 60,
        //"menu": "",
        "menu-actions": [],
        "menu-file": "",
        "on-click": "",
        "on-click-middle": "",
        "on-click-right": "",
        "on-scroll-down": "",
        "on-scroll-up": "",
        "on-update": "",
        "smooth-scrolling-threshold": 0.0,
        //"restart-interval": 0,
        "return-type": "",
        //"signal": "",
        "tooltip": false,
        "tooltip-format": ""
        //"width": "",
    },
    "custom/new-e-mails": {
        "datapoints": 20,
        "escape": false,
        "exec": "${HOME}/skripte/statusleiste/neue-e-post.sh",
        "exec-if": "exit 0",
        "exec-on-event": false,
        "expand": false,
        "format": "{text}",
        "graph_type": "line",
        "hide-empty-text": false,
        "interval": 30,
        //"menu": "",
        "menu-actions": [],
        "menu-file": "",
        "on-click": "",
        "on-click-middle": "",
        "on-click-right": "",
        "on-scroll-down": "",
        "on-scroll-up": "",
        "on-update": "",
        "smooth-scrolling-threshold": 0.0,
        //"restart-interval": 0,
        "return-type": "",
        //"signal": "",
        "tooltip": false,
        "tooltip-format": ""
        //"width": "",
    }
}

statusleiste/paketaktualisierungen.sh

#!/usr/bin/env bash
# This script counts the outdated packages including AUR packages.

if [[ "$#" -ne "0" ]]; then
    echo "Wrong amount of arguments!" >&2
    exit 1
fi

declare packages_outdated
packages_outdated="$(checkupdates 2> /dev/null | wc -l || true)"
readonly packages_outdated
declare packages_outdated_aur
packages_outdated_aur="$(paru -Qmu --devel 2> /dev/null | wc -l || true)"
readonly packages_outdated_aur

echo "$((packages_outdated + packages_outdated_aur))"

Expected behaviour
Low CPU usage.

Screenshots
There are already documentations in #846 and #2631.

Environment

  • Waybar version (waybar --version): Waybar v0.15.0
  • Installed from (distro package / source / other): Arch Linux
  • Compositor and version (Sway, Hyprland, River, …): Hyprland

Debug output
Run waybar -l debug and paste any relevant output:

❯ waybar -l debug
[2026-09-05 09:11:18.142] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/config
[2026-09-05 09:11:18.142] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/config.jsonc
[2026-09-05 09:11:18.142] [debug] Found config file: /home/matheus/.config/waybar/config.jsonc
[2026-09-05 09:11:18.142] [info] Using configuration file /home/matheus/.config/waybar/config.jsonc
[2026-09-05 09:11:18.146] [info] Including resource file: ./modules/backlight.jsonc
[2026-09-05 09:11:18.147] [debug] Try expanding: ./modules/backlight.jsonc
[2026-09-05 09:11:18.147] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/backlight.jsonc
[2026-09-05 09:11:18.147] [debug] Found config file: /home/matheus/.config/waybar/./modules/backlight.jsonc
[2026-09-05 09:11:18.147] [info] Including resource file: ./modules/battery.jsonc
[2026-09-05 09:11:18.147] [debug] Try expanding: ./modules/battery.jsonc
[2026-09-05 09:11:18.147] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/battery.jsonc
[2026-09-05 09:11:18.148] [debug] Found config file: /home/matheus/.config/waybar/./modules/battery.jsonc
[2026-09-05 09:11:18.148] [info] Including resource file: ./modules/clock.jsonc
[2026-09-05 09:11:18.148] [debug] Try expanding: ./modules/clock.jsonc
[2026-09-05 09:11:18.148] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/clock.jsonc
[2026-09-05 09:11:18.148] [debug] Found config file: /home/matheus/.config/waybar/./modules/clock.jsonc
[2026-09-05 09:11:18.148] [info] Including resource file: ./modules/cpu.jsonc
[2026-09-05 09:11:18.149] [debug] Try expanding: ./modules/cpu.jsonc
[2026-09-05 09:11:18.149] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/cpu.jsonc
[2026-09-05 09:11:18.149] [debug] Found config file: /home/matheus/.config/waybar/./modules/cpu.jsonc
[2026-09-05 09:11:18.149] [info] Including resource file: ./modules/custom.jsonc
[2026-09-05 09:11:18.149] [debug] Try expanding: ./modules/custom.jsonc
[2026-09-05 09:11:18.149] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/custom.jsonc
[2026-09-05 09:11:18.149] [debug] Found config file: /home/matheus/.config/waybar/./modules/custom.jsonc
[2026-09-05 09:11:18.149] [info] Including resource file: ./modules/disk.jsonc
[2026-09-05 09:11:18.149] [debug] Try expanding: ./modules/disk.jsonc
[2026-09-05 09:11:18.149] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/disk.jsonc
[2026-09-05 09:11:18.149] [debug] Found config file: /home/matheus/.config/waybar/./modules/disk.jsonc
[2026-09-05 09:11:18.150] [info] Including resource file: ./modules/hyprland.jsonc
[2026-09-05 09:11:18.150] [debug] Try expanding: ./modules/hyprland.jsonc
[2026-09-05 09:11:18.150] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/hyprland.jsonc
[2026-09-05 09:11:18.150] [debug] Found config file: /home/matheus/.config/waybar/./modules/hyprland.jsonc
[2026-09-05 09:11:18.150] [info] Including resource file: ./modules/keyboard-state.jsonc
[2026-09-05 09:11:18.150] [debug] Try expanding: ./modules/keyboard-state.jsonc
[2026-09-05 09:11:18.150] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/keyboard-state.jsonc
[2026-09-05 09:11:18.150] [debug] Found config file: /home/matheus/.config/waybar/./modules/keyboard-state.jsonc
[2026-09-05 09:11:18.150] [info] Including resource file: ./modules/memory.jsonc
[2026-09-05 09:11:18.150] [debug] Try expanding: ./modules/memory.jsonc
[2026-09-05 09:11:18.150] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/memory.jsonc
[2026-09-05 09:11:18.150] [debug] Found config file: /home/matheus/.config/waybar/./modules/memory.jsonc
[2026-09-05 09:11:18.151] [info] Including resource file: ./modules/network.jsonc
[2026-09-05 09:11:18.151] [debug] Try expanding: ./modules/network.jsonc
[2026-09-05 09:11:18.151] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/network.jsonc
[2026-09-05 09:11:18.151] [debug] Found config file: /home/matheus/.config/waybar/./modules/network.jsonc
[2026-09-05 09:11:18.151] [info] Including resource file: ./modules/privacy.jsonc
[2026-09-05 09:11:18.151] [debug] Try expanding: ./modules/privacy.jsonc
[2026-09-05 09:11:18.151] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/privacy.jsonc
[2026-09-05 09:11:18.152] [debug] Found config file: /home/matheus/.config/waybar/./modules/privacy.jsonc
[2026-09-05 09:11:18.152] [info] Including resource file: ./modules/systemd-failed-units.jsonc
[2026-09-05 09:11:18.152] [debug] Try expanding: ./modules/systemd-failed-units.jsonc
[2026-09-05 09:11:18.152] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/systemd-failed-units.jsonc
[2026-09-05 09:11:18.152] [debug] Found config file: /home/matheus/.config/waybar/./modules/systemd-failed-units.jsonc
[2026-09-05 09:11:18.153] [info] Including resource file: ./modules/temperature.jsonc
[2026-09-05 09:11:18.153] [debug] Try expanding: ./modules/temperature.jsonc
[2026-09-05 09:11:18.153] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/temperature.jsonc
[2026-09-05 09:11:18.153] [debug] Found config file: /home/matheus/.config/waybar/./modules/temperature.jsonc
[2026-09-05 09:11:18.153] [info] Including resource file: ./modules/tray.jsonc
[2026-09-05 09:11:18.153] [debug] Try expanding: ./modules/tray.jsonc
[2026-09-05 09:11:18.153] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/tray.jsonc
[2026-09-05 09:11:18.153] [debug] Found config file: /home/matheus/.config/waybar/./modules/tray.jsonc
[2026-09-05 09:11:18.154] [info] Including resource file: ./modules/wireplumber.jsonc
[2026-09-05 09:11:18.154] [debug] Try expanding: ./modules/wireplumber.jsonc
[2026-09-05 09:11:18.154] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/./modules/wireplumber.jsonc
[2026-09-05 09:11:18.154] [debug] Found config file: /home/matheus/.config/waybar/./modules/wireplumber.jsonc
[2026-09-05 09:11:18.158] [info] Discovered appearance 'dark'
[2026-09-05 09:11:18.189] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/style-dark.css
[2026-09-05 09:11:18.189] [debug] Found config file: /home/matheus/.config/waybar/style-dark.css
[2026-09-05 09:11:18.189] [info] Using CSS file /home/matheus/.config/waybar/style-dark.css
[2026-09-05 09:11:18.191] [debug] Parsing imports for file: /home/matheus/.config/waybar/style-dark.css
[2026-09-05 09:11:18.192] [debug] Adding file to watch list: /usr/share/waybar-mechabar-git/themes/catppuccin-frappe.css
[2026-09-05 09:11:18.192] [debug] Adding file to watch list: /home/matheus/.config/waybar/style-dark.css
[2026-09-05 09:11:18.197] [debug] Output detection done: eDP-1 (BOE 0x0687 )
[2026-09-05 09:11:18.199] [info] Hyprland IPC starting
[2026-09-05 09:11:18.200] [debug] Initializing workspaces
[2026-09-05 09:11:18.201] [debug] Initializing persistent workspaces
[2026-09-05 09:11:18.201] [info] Loading persistent workspaces from Hyprland workspace rules
[2026-09-05 09:11:18.214] [debug] Cmd exited with code 0
[2026-09-05 09:11:18.219] [debug] [wireplumber]: preparing object manager: 'Audio/Source'
[2026-09-05 09:11:18.219] [debug] [wireplumber]: connecting to pipewire: 'Audio/Source'...
[2026-09-05 09:11:18.219] [debug] [wireplumber]: Audio/Source connected!
[2026-09-05 09:11:18.219] [debug] [wireplumber]: loading default nodes api module
[2026-09-05 09:11:18.221] [debug] [wireplumber]: preparing object manager: 'Audio/Sink'
[2026-09-05 09:11:18.221] [debug] [wireplumber]: connecting to pipewire: 'Audio/Sink'...
[2026-09-05 09:11:18.221] [debug] [wireplumber]: Audio/Sink connected!
[2026-09-05 09:11:18.221] [debug] [wireplumber]: loading default nodes api module
[2026-09-05 09:11:18.226] [debug] network: new default route via 192.168.178.1 on if3 metric 600
[2026-09-05 09:11:18.226] [debug] battery: worker interval is 2000
[2026-09-05 09:11:18.226] [debug] network: wlo1, new addr /0
[2026-09-05 09:11:18.226] [debug] network: wlo1, new addr /0
[2026-09-05 09:11:18.226] [debug] network: wlo1, new addr /0
[2026-09-05 09:11:18.226] [debug] network: wlo1, new addr /0
[2026-09-05 09:11:18.390] [info] Found device Razer Razer DeathAdder Essential at '/dev/input/event6'
[2026-09-05 09:11:18.437] [debug] Cmd exited with code 0
[2026-09-05 09:11:18.459] [info] Found device AT Translated Set 2 keyboard at '/dev/input/event3'
[2026-09-05 09:11:18.503] [debug] GTK widget tree:
window#waybar.background.top.eDP-1.main.mode-dock.solo.Alacritty:dir(ltr)
  decoration:dir(ltr)
  box.horizontal:dir(ltr)
    box.horizontal.modules-left:dir(ltr)
      widget:dir(ltr)
        box#workspaces.horizontal.module:dir(ltr)
      widget:dir(ltr)
        box#window.horizontal.module:dir(ltr)
          image:dir(ltr)
          label:dir(ltr)
    box.horizontal.modules-center:dir(ltr)
      widget:dir(ltr)
        label#systemd-failed-units.module:dir(ltr)
      widget:dir(ltr)
        label#custom-new-e-mails.module:dir(ltr)
      widget:dir(ltr)
        box#privacy.horizontal:dir(ltr)
          revealer:dir(ltr)
            box#privacy-item.horizontal.audio-in:dir(ltr)
              image:dir(ltr)
          revealer:dir(ltr)
            box#privacy-item.horizontal.audio-out:dir(ltr)
              image:dir(ltr)
          revealer:dir(ltr)
            box#privacy-item.horizontal.screenshare:dir(ltr)
              image:dir(ltr)
    box.horizontal.modules-right:dir(ltr)
      widget:dir(ltr)
        label#wireplumber.module.source:dir(ltr)
      widget:dir(ltr)
        label#wireplumber.module.sink:dir(ltr)
      widget:dir(ltr)
        label#backlight.module:dir(ltr)
      widget:dir(ltr)
        label#disk.module:dir(ltr)
      widget:dir(ltr)
        label#cpu.module:dir(ltr)
      widget:dir(ltr)
        label#temperature.module:dir(ltr)
      widget:dir(ltr)
        label#memory.module:dir(ltr)
      widget:dir(ltr)
        label#network.module:dir(ltr)
      widget:dir(ltr)
        label#battery.module:dir(ltr)
      widget:dir(ltr)
        box#keyboard-state.horizontal.module:dir(ltr)
          label.scrolllock:dir(ltr)
          label.capslock:dir(ltr)
          label.numlock:dir(ltr)
      widget:dir(ltr)
        label#clock.module:dir(ltr)
      widget:dir(ltr)
        box#tray.horizontal.module:dir(ltr)

[2026-09-05 09:11:18.504] [debug] Creating workspace 1
[2026-09-05 09:11:18.510] [debug] Creating workspace 10
[2026-09-05 09:11:18.512] [debug] Creating workspace 9
[2026-09-05 09:11:18.513] [debug] Creating workspace 2
[2026-09-05 09:11:18.514] [debug] Creating workspace 3
[2026-09-05 09:11:18.534] [debug] Received SIGCHLD in signalThread
[2026-09-05 09:11:18.534] [debug] Received SIGCHLD in signalThread
Full

** (waybar:131625): WARNING **: 09:11:18.651: Status Notifier Item with bus name ':1.14' and object path '/org/ayatana/NotificationItem/nm_applet' is already registered
[2026-09-05 09:11:18.705] [debug] Received SIGCHLD in signalThread
[2026-09-05 09:11:18.705] [debug] SNI tray id: nm-applet
[2026-09-05 09:11:18.705] [debug] hyprland IPC received openlayer>>main
[2026-09-05 09:11:18.735] [debug] [wireplumber]: callback loading default node api module
[2026-09-05 09:11:18.735] [debug] [wireplumber]: loaded default nodes api
[2026-09-05 09:11:18.735] [debug] [wireplumber]: loading mixer api module
[2026-09-05 09:11:18.735] [debug] [wireplumber]: callback loading default node api module
[2026-09-05 09:11:18.735] [debug] [wireplumber]: loaded default nodes api
[2026-09-05 09:11:18.735] [debug] [wireplumber]: loading mixer api module
[2026-09-05 09:11:18.738] [debug] [wireplumber]: loaded mixer API
[2026-09-05 09:11:18.738] [debug] [wireplumber]: activating plugins
[2026-09-05 09:11:18.738] [debug] [wireplumber]: onPluginActivated: mixer-api
[2026-09-05 09:11:18.738] [debug] [wireplumber]: loaded mixer API
[2026-09-05 09:11:18.738] [debug] [wireplumber]: activating plugins
[2026-09-05 09:11:18.738] [debug] [wireplumber]: onPluginActivated: mixer-api
[2026-09-05 09:11:18.741] [debug] [wireplumber]: onPluginActivated: default-nodes-api
[2026-09-05 09:11:18.741] [debug] [wireplumber]: onPluginActivated: default-nodes-api
[2026-09-05 09:11:18.742] [debug] [wireplumber]: onObjectManagerInstalled
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating volume
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating 'Audio/Source' node name with node.id 59
[2026-09-05 09:11:18.742] [debug] [wireplumber]: Updating 'Audio/Source' node name to: ALC236 Analog
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating source volume
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating source name with node.id 59
[2026-09-05 09:11:18.742] [debug] [wireplumber]: Updating source name to: ALC236 Analog
[2026-09-05 09:11:18.742] [debug] [wireplumber]: onObjectManagerInstalled
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating volume
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating 'Audio/Sink' node name with node.id 58
[2026-09-05 09:11:18.742] [debug] [wireplumber]: Updating 'Audio/Sink' node name to: ALC236 Analog
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating source volume
[2026-09-05 09:11:18.742] [debug] [wireplumber]: updating source name with node.id 59
[2026-09-05 09:11:18.742] [debug] [wireplumber]: Updating source name to: ALC236 Analog
Full

Additional context
/

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions