https://bugs.kde.org/show_bug.cgi?id=518176
Bug ID: 518176
Summary: Klipper clipboard history cannot be disabled by any
documented or discoverable method — 9 reproducible
failure modes
Classification: Plasma
Product: plasmashell
Version First 5.27.12
Reported In:
Platform: Ubuntu
OS: Linux
Status: REPORTED
Severity: normal
Priority: NOR
Component: Clipboard widget & pop-up
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Target Milestone: 1.0
Klipper clipboard history cannot be disabled by any documented or discoverable
user method. Every UI control, configuration file edit, autostart override,
session management change, binary permission change, and DBus approach either
has no effect or is silently reversed on reboot. This has been reproduced
exhaustively across a full session of debugging. Nine documented failure modes
are detailed below in the order they were attempted.
This report covers the UI and system-level disable problem. A companion report
covers the DBus scripted-clearing failure.
Reported by: Jonathan Brown (GitHub: github.com/black-vajra)
ENVIRONMENT
OS: Kubuntu 24.04 LTS (deliberately chosen as the stable LTS release to rule
out bleeding-edge regressions)
Plasma version: 5.27.12 (also reproduced on Plasma 6.x in subsequent testing)
Klipper: present both as /usr/bin/klipper binary and as
org.kde.plasma.clipboard plasmoid embedded in plasmashell
User: standard non-root user
DOCUMENTED FAILURE MODES (REPRODUCIBLE)
FAILURE 1 — Configure System Tray → Entries → Clipboard → Disabled
Steps:
1. Right-click the system tray upward arrow
2. Select "Configure System Tray"
3. Select the "Entries" tab
4. Find "Clipboard" in the list
5. Change dropdown from "Shown when relevant" to "Disabled"
6. Click Apply / OK
7. Reboot
Expected: Klipper icon does not appear. Clipboard history is not recorded.
Actual: Setting has no effect on Klipper behavior or icon appearance within the
current session. On reboot, the setting silently reverts to "Shown when
relevant" and Klipper returns with full prior history intact.
FAILURE 2 — System Settings Clipboard Toggle
Steps:
1. Open System Settings → Clipboard
2. Uncheck "Save clipboard history"
3. Apply
Expected: History recording stops for the current session and persists across
reboots.
Actual: No effect on current session. Klipper continues recording history.
Setting reverts on reboot.
FAILURE 3 — Autostart override with Hidden=true
Steps:
<pre>
cp /etc/xdg/autostart/klipper.desktop ~/.config/autostart/
echo "Hidden=true" >> ~/.config/autostart/klipper.desktop
</pre>
Verified with:
<pre>
grep Hidden ~/.config/autostart/klipper.desktop
# Returns: Hidden=true
</pre>
Reboot.
Expected: User-space autostart override suppresses system-level klipper.desktop
entry. Klipper does not launch.
Actual: Klipper returns after reboot with history intact. The Hidden=true
override is ignored.
FAILURE 4 — kquitapp5 + loginMode=default + ksmserver wipe
Steps:
<pre>
kwriteconfig5 --file ksmserverrc --group General --key loginMode default
rm -rf ~/.local/share/ksmserver/
kquitapp5 klipper
</pre>
Verified loginMode:
<pre>
kreadconfig5 --file ksmserverrc --group General --key loginMode
# Returns: default
</pre>
Logged out immediately (Klipper not running at logout). Rebooted.
Expected: Empty session on login. Klipper not session-restored. Klipper not
autostarted.
Actual: Klipper returns after reboot with history intact.
FAILURE 5 — kwriteconfig5 KeepClipboardContents false
Steps:
<pre>
kwriteconfig5 --file klipperrc --group General --key KeepClipboardContents
false
</pre>
Expected: Klipper stops persisting clipboard contents to disk.
Actual: No observable effect. History continues to accumulate and persist
across reboots.
FAILURE 6 — sudo chmod -x /usr/bin/klipper
Steps:
<pre>
sudo chmod -x /usr/bin/klipper
</pre>
Reboot.
Expected: Binary is non-executable. Klipper cannot launch.
Actual: Klipper returns after reboot. In Plasma 5.27+ / Plasma 6, Klipper's
clipboard functionality is implemented as the org.kde.plasma.clipboard plasmoid
embedded directly in plasmashell. The /usr/bin/klipper binary is a secondary
entry point; the plasmoid path is entirely independent of it and unaffected by
binary permissions.
FAILURE 7 — Editing plasma-org.kde.plasma.desktop-appletsrc
The plasmoid was identified in the panel configuration:
<pre>
grep -i "clipboard\|klipper" ~/.config/plasma-org.kde.plasma.desktop-appletsrc
# Returns lines containing org.kde.plasma.clipboard in plugin=, extraItems=,
knownItems=
</pre>
Steps:
<pre>
cp ~/.config/plasma-org.kde.plasma.desktop-appletsrc
~/.config/plasma-org.kde.plasma.desktop-appletsrc.bak
sed -i '/^plugin=org\.kde\.plasma\.clipboard$/d'
~/.config/plasma-org.kde.plasma.desktop-appletsrc
sed -i 's/org\.kde\.plasma\.clipboard,//g'
~/.config/plasma-org.kde.plasma.desktop-appletsrc
</pre>
Verified removal with grep (returned empty). Restarted plasmashell. Rebooted.
Expected: Clipboard plasmoid removed from system tray configuration. Does not
reappear.
Actual: Klipper / clipboard plasmoid returns after reboot. Plasma rewrites the
appletsrc configuration, restoring org.kde.plasma.clipboard to all three
locations.
FAILURE 8 — systemctl stop / disable klipper
Steps:
<pre>
sudo systemctl stop klipper
sudo systemctl disable klipper
systemctl --user list-units | grep -i klipper
systemctl --user list-units | grep -i clip
</pre>
Actual output:
<pre>
Failed to stop klipper.service: Unit klipper.service not loaded.
Failed to disable unit: Unit file klipper.service does not exist.
</pre>
User-level systemctl returned no results either.
Result: No systemd unit exists for Klipper. This avenue is a complete dead end
and is not documented anywhere visible to users.
FAILURE 9 — xsel / xclip clipboard clearing
Steps:
<pre>
xsel --primary --clear
xsel --clipboard --clear
xsel --secondary --clear
echo -n "" | xclip -selection clipboard
</pre>
Expected: Clipboard contents cleared, including Klipper history.
Actual: X11 clipboard buffer is cleared. Klipper's history store
(~/.local/share/klipper/history2.lst) is completely unaffected. These tools
operate at the X11 selection layer and have no awareness of or interaction with
Klipper's independent persistent store. This is not documented anywhere in
Klipper's UI or standard clipboard management guidance.
WHAT ACTUALLY WORKS (for the record)
The only functional method discovered after exhaustive testing is a shell
script combining explicit DBus session bus export with a direct DBus call, run
as the normal user (not root), executed as the last command in the script to
avoid Klipper recapturing terminal output before the wipe completes:
<pre>
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
shred -u ~/.local/share/klipper/history2.lst
touch ~/.local/share/klipper/history2.lst
qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory
</pre>
This clears history for the current session only. It does not disable Klipper.
It does not prevent future accumulation. It must be run manually each time. The
DBUS_SESSION_BUS_ADDRESS export is required because without it the DBus call
silently fails with exit code 0 — see companion bug report for that issue.
IMPACT ASSESSMENT
This combination of failures means that a user who copies a password, token,
API key, or any sensitive content to the clipboard and then attempts to clear
it using any reasonable, documented, or discoverable method has no reliable way
to do so. The data remains in ~/.local/share/klipper/history2.lst, persisted
across reboots, with no indication to the user that their clearing attempts
have failed.
This is a significant privacy and security issue for a desktop operating system
whose user base has a strong expectation of data control.
Jonathan Brown
GitHub: github.com/black-vajra Email: [email protected]
--
You are receiving this mail because:
You are watching all bug changes.