Bug 506862 - D-Bus: desktop.reloadConfig() from Plasma desktop scripting does not visually update wallpaper until plasmashell is restarted
Summary: D-Bus: desktop.reloadConfig() from Plasma desktop scripting does not visually...
Status: CONFIRMED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Image & Slideshow wallpaper plugins (other bugs)
Version First Reported In: 6.4.2
Platform: Other Linux
: NOR normal
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords: multiscreen
Depends on:
Blocks:
 
Reported: 2025-07-10 13:28 UTC by Leona
Modified: 2025-12-12 21:16 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Leona 2025-07-10 13:28:03 UTC
SUMMARY
D-Bus: desktop.reloadConfig() fails to trigger visual refresh for wallpaper changes in Plasma 6 (Wayland)

STEPS TO REPRODUCE
1. On a multi-monitor system running Plasma 6 on Wayland, prepare two distinct image files for testing.
2. Create and run the following shell script, which uses the official D-Bus API to set a different wallpaper for each monitor. (Replace /path/to/image-1.png and /path/to/image-2.png with absolute paths to your test images).

#!/bin/bash

# Paths to the two test wallpapers
LEFT_IMG_PATH="file:///path/to/image-1.png"
RIGHT_IMG_PATH="file:///path/to/image-2.png"

JS_CODE="
var allDesktops = desktops();

// --- Configure Monitor 0 ---
var leftDesktop = allDesktops[0];
leftDesktop.wallpaperPlugin = 'org.kde.image';
leftDesktop.currentConfig = { 'Image': '${LEFT_IMG_PATH}', 'FillMode': 2 };
leftDesktop.reloadConfig();

// --- Configure Monitor 1 ---
var rightDesktop = allDesktops[1];
rightDesktop.wallpaperPlugin = 'org.kde.image';
rightDesktop.currentConfig = { 'Image': '${RIGHT_IMG_PATH}', 'FillMode': 2 };
rightDesktop.reloadConfig();
"

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "$JS_CODE"

3. After the script runs successfully, observe the desktop wallpapers.
4. To confirm the configuration was set correctly, manually run plasmashell --replace & disown in a terminal.

OBSERVED RESULT

The script in step 2 executes without any errors. However, the desktop wallpapers do not change visually.

After performing step 4 (plasmashell --replace), the new Plasma shell session starts and correctly displays the new wallpapers that were set by the script. This proves the D-Bus call successfully modified the configuration in memory, but the live visual refresh failed to trigger.

EXPECTED RESULT

The desktop wallpapers should change instantly and non-disruptively upon successful execution of the D-Bus script in step 2. The reloadConfig() method should trigger an immediate visual update without requiring a full shell restart.

SOFTWARE/OS VERSIONS
Linux/KDE Plasma:
Operating System: Garuda Linux x86_64
KDE Plasma Version: 6.4.2
KDE Frameworks Version: 6.15
Qt Version: 6.9.1
Kernel Version: 6.15.5-zen1-1-zen
Graphics Platform: Wayland

ADDITIONAL INFORMATION
This issue was observed on a multi-monitor setup (2x 3840x2160).
The system uses an NVIDIA GeForce RTX 4090 GPU, with the proprietary driver.
The core of the issue seems to be that desktop.reloadConfig() is not honored by the running plasmashell process for the wallpaper component, even though the configuration itself is successfully updated via D-Bus. This necessitates a disruptive workaround (plasmashell --replace) to see any changes.

Full script below

#!/bin/bash

#==============================================================================
# SCRIPT CONFIGURATION
#==============================================================================
LEFT_MONITOR_INDEX=0
RIGHT_MONITOR_INDEX=1

SOURCE_DIR="/home/zeebie/Pictures/Wallpapers/Dual_4K"
USER_HOME="/home/zeebie"
#==============================================================================
# STATIC CONFIGURATION & SCRIPT LOGIC (Find a random 8k wallpaper and split it in half to be two 4k images.)
#==============================================================================
TEMP_DIR="$USER_HOME/.local/share/wallpapers/temp_split"

# --- Main Logic ---
echo "--- Starting Spanned Slideshow ---"
mkdir -p "$TEMP_DIR"

WALLPAPER=$(find "$SOURCE_DIR" -type f \( -iname \*.jpg -o -iname \*.jpeg -o -iname \*.png \) | shuf -n 1)
if [ -z "$WALLPAPER" ]; then echo "[ERROR] No images found. Exiting."; exit 1; fi
echo "[INFO] Selected wallpaper: $WALLPAPER"
magick "$WALLPAPER" -crop 2x1@ +repage "$TEMP_DIR/split.png"

LEFT_IMG_PATH="file://${TEMP_DIR}/split-0.png"
RIGHT_IMG_PATH="file://${TEMP_DIR}/split-1.png"

echo "[INFO] Applying wallpapers via D-Bus ..."


JS_CODE="
var allDesktops = desktops();

// --- Configure the Left Monitor ---
var leftDesktop = allDesktops[${LEFT_MONITOR_INDEX}];
leftDesktop.wallpaperPlugin = 'org.kde.image';
leftDesktop.currentConfig = {
    'Image': '${LEFT_IMG_PATH}',
    'FillMode': 2
};
leftDesktop.reloadConfig();

// --- Configure the Right Monitor ---
var rightDesktop = allDesktops[${RIGHT_MONITOR_INDEX}];
rightDesktop.wallpaperPlugin = 'org.kde.image';
rightDesktop.currentConfig = {
    'Image': '${RIGHT_IMG_PATH}',
    'FillMode': 2
};
rightDesktop.reloadConfig();
"

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "$JS_CODE"

if [ $? -eq 0 ]; then
    echo "[SUCCESS] D-Bus command executed without error."
else
    echo "[ERROR] D-Bus command failed."
fi
echo "------------------------------------"

echo "[WARNING] D-Bus refresh is not working. Forcing shell reload... Disruptive..."
plasmashell --replace & disown

echo "[SUCCESS] Wallpaper update process completed."