Powerdevil-related errors when trying to access i2c (Error EACCES(-13))

Looking through my journalctl logs, I’ve noticed these powerdevil-related errors when trying to access i2c for a while now:

Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: Initializing libddcutil. ddcutil version: 2.2.1-dev, shared library: /usr/lib/libddcutil.so.5.3.0 Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Options passed from client: Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Applying combined libddcutil options: Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-0 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-1 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-2 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-3 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-4 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-5 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-6 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-7 lacks R/W permissions Jun 18 11:05:57 n5z690 org_kde_powerdevil[1537]: [ 1537] Device /dev/i2c-8 lacks R/W permissions Jun 18 11:05:57 n5z690 plasmashell[1492]: kf.plasma.quick: Applet preload policy set to 1 Jun 18 11:05:57 n5z690 plasmashell[1492]: file:///usr/share/plasma/plasmoids/org.kde.desktopcontainment/contents/ui/main.qml:178:25: QML FolderViewDropArea (parent or ancestor of QQuickLayoutAttached): Binding loop > file:///usr/share/plasma/plasmoids/org.kde.desktopcontainment/contents/ui/main.qml:201:9 Jun 18 11:05:57 n5z690 plasmashell[1492]: Toolbox not loading, toolbox package is either invalid or disabled. Jun 18 11:05:58 n5z690 kernel: ixgbe 0000:04:00.0 enp4s0: NIC Link is Up 1 Gbps, Flow Control: None Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1752] device (enp4s0): carrier: link connected Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1752] device (enp4s0): state change: unavailable -> disconnected (reason 'carrier-changed', managed-type: 'full') Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1781] policy: auto-activating connection 'Kabelgebundene Verbindung 1' (7c0c62c6-f22c-3d72-b66f-284047c2444c) Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1782] device (enp4s0): Activation: starting connection 'Kabelgebundene Verbindung 1' (7c0c62c6-f22c-3d72-b66f-284047c2444c) Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1782] device (enp4s0): state change: disconnected -> prepare (reason 'none', managed-type: 'full') Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1783] manager: NetworkManager state is now CONNECTING Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1784] device (enp4s0): state change: prepare -> config (reason 'none', managed-type: 'full') Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1798] device (enp4s0): state change: config -> ip-config (reason 'none', managed-type: 'full') Jun 18 11:05:58 n5z690 NetworkManager[1105]: <info> [1750237558.1824] dhcp4 (enp4s0): activation: beginning transaction (timeout in 45 seconds) Jun 18 11:05:58 n5z690 avahi-daemon[1107]: Joining mDNS multicast group on interface enp4s0.IPv6 with address fe80::6180:d195:c539:21aa. Jun 18 11:05:58 n5z690 avahi-daemon[1107]: New relevant interface enp4s0.IPv6 for mDNS. Jun 18 11:05:58 n5z690 avahi-daemon[1107]: Registering new address record for fe80::6180:d195:c539:21aa on enp4s0.*. Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Library initialization complete. Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Watching for DPMS state changes unimplemented Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Watching for DPMS state changes unimplemented Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Watching for display connection changes, resolved watch mode = Watch_Mode_Xevent, poll loop interval = 100 millisec Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] extra_stabilization_millisec: 0, stabilization_poll_millisec: 100 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] libddcutil recheck thread 0x555e77405dd0 started Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] libddcutil watch thread 0x555e773dab40 started Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error(s) opening ddc devices Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-0 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-1 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-2 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error(s) opening ddc devices Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-3 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-4 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-5 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-6 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-7 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: Error EACCES(-13): Keine Berechtigung opening /dev/i2c-8 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-0 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-1 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-2 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-3 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-4 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-5 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-6 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-7 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1537] Error EACCES(-13): Keine Berechtigung opening /dev/i2c-8 Jun 18 11:05:58 n5z690 org_kde_powerdevil[1537]: [ 1689] (dw_recheck_displays_func) Recheck interval: Sleeping for 200 milliseconds

Debugging this issue with openAI O3 came up with this report (shortened for brevity):

1. Executive Summary

KDE’s power-management daemon (powerdevil) repeatedly attempts to access DDC/CI interfaces exposed as /dev/i2c-* to control external-monitor brightness.
All nine I²C character devices return EACCES (permission denied). The daemon then enters a tight re-check loop every 200 ms, generating log noise and a small but measurable CPU wake-up penalty (~0.3–0.7 % on typical systems).
No functional brightness control is delivered and future features relying on DPMS signals are marked “unimplemented”.


2. Timeline (18 Jun 11:05:57–11:05:58)

T-offset Component Log excerpt Meaning
+0 ms powerdevil Initializing libddcutil … DDC/CI support enabled
+2 ms powerdevil Device /dev/i2c-N lacks R/W permissions (N=0-8) udev permissions incorrect
+1 s powerdevil Error EACCES(-13) … opening /dev/i2c-N access attempt failed
+1 s powerdevil Recheck interval: Sleeping for 200 ms falls back to polling

No crashes occur, but the daemon never succeeds.


3. Technical Root-Cause Analysis

  1. Missing user/group ownership
    • Default udev rule from ddcutil (e.g. /usr/lib/udev/rules.d/60-ddcutil.rules) should set
    GROUP="i2c", MODE="0660".
    • Either the ruleset is absent, overridden, or the session user is not in group i2c.

  2. libddcutil built from “-dev” branch (2.2.1-dev)
    • Development snapshot may install rules under /usr/share/libddcutil/data/ but not deploy them automatically.
    • It also enables verbose “watch” + “recheck” threads which amplify the log rate.

  3. Secondary observations (non-blocking)
    Watching for DPMS state changes unimplemented → Feature stub in your current plasma/powerdevil build; harmless.
    QML FolderViewDropArea … Binding loop and Toolbox not loading belong to plasmashell UI; unrelated.


4. Impact Assessment

Area Impact
User experience External monitor brightness keys / sliders have no effect.
Power efficiency ~3–5 wakeups/s by powerdevil watch thread; negligible on desktop but wastes battery on laptops.
Log hygiene Rapid, repeating EACCES messages clutter /var/log/journal, hampering troubleshooting.
Security None (permission denied prevents potentially dangerous I²C writes).

I then implemented O3’s suggestions (seen below) and the errors are indeed gone. Could this issue be fixed in CachyOS by default? That would be great!

────────────────────────────────────────
Option A – one-liner with echo/tee
────────────────────────────────────────

echo 'SUBSYSTEM=="i2c-dev", KERNEL=="i2c-[0-9]*", MODE="0660", GROUP="i2c", TAG+="uaccess"' \
| sudo tee /etc/udev/rules.d/99-i2c-permissions.rules

────────────────────────────────────────
Option B – open with $EDITOR (recommended)
────────────────────────────────────────

sudoedit /etc/udev/rules.d/99-i2c-permissions.rules

Then paste exactly:

# Broader rule: allow seat users + i2c group access to ALL i2c-dev nodes
SUBSYSTEM=="i2c-dev", KERNEL=="i2c-[0-9]*", MODE="0660", GROUP="i2c", TAG+="uaccess"

Save & exit.

────────────────────────────────────────
Reload rules and re-trigger
────────────────────────────────────────

sudo udevadm control --reload-rules
sudo udevadm trigger -s i2c-dev

────────────────────────────────────────
Quick verification
────────────────────────────────────────

ls -l /dev/i2c-6    # pick any bus
# expect: crw-rw---- 1 root i2c ...
ddcutil detect      # should list your monitor(s) without EACCES

Thanks! I was actually having this same issue with Powerdevil permissions on Kubuntu. Some googling and this showed up. Since powerdevil is a KDE utility, this is actually very helpful to anyone using KDE regardless of the distro. Now my journalctl logs only show the incessant ACPI error because I am using an MSI laptop. I haven’t had any of these issues on my main PC with CachyOS, though.

Goddammit, why does my reply sound like AI.