git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit43a91087526b53c6f0e1dd8defdf76340f08ab3a
parente057d4e49f
authorLucas Galante <[email protected]>
date2026-09-11 09:58
startcce: --logging no longer means debug level; drop WLR_NO_HARDWARE_CURSORS

Two of the idle-cost recommendations from 2026-09-10, both in the session
launcher:

- The wayland-session entry launches `startcce --logging`, which set
  `--log-level debug` on the compositor: every transaction, key press and
  xwm property was a formatted line on the main thread, tens of MB a
  session, for a log read only when something breaks. `--logging` now just
  announces the log paths (the compositor's stderr has always gone to
  $CCE_RUN/cce.log); a new `--verbose` gives the old debug level, and
  `--debug` still adds WAYLAND_DEBUG=1. The root-owned session entry can
  stay as it is.
- `WLR_NO_HARDWARE_CURSORS=1` had been exported since the script's first
  commit with no recorded reason. The session is pinned to the Intel card,
  whose cursor plane works, and a software cursor is a scene node that
  makes every pointer motion re-composite. wlroots falls back to software on
  its own if the plane refuses an image, so the export is only for a cursor
  that visibly misbehaves.

Takes effect at the next login.

Co-Authored-By: Claude Fable 5.1 <[email protected]>

 scripts/startcce | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/scripts/startcce b/scripts/startcce
index 211e575..8de1c92 100755
--- a/scripts/startcce
+++ b/scripts/startcce
@@ -1,12 +1,26 @@
 #!/bin/sh
 # Launch cce-server with cce-client
-# Usage: startcce [--logging] [--debug]
+# Usage: startcce [--logging] [--verbose] [--debug]
+#
+#   --logging  announce the log paths. The compositor's stderr goes to
+#              $CCE_RUN/cce.log regardless; this flag no longer raises the
+#              log level. The session entry in /usr/share/wayland-sessions
+#              passes it, and it used to mean `--log-level debug`: every
+#              transaction, key press and xwm property became a formatted
+#              line on the compositor's main thread, tens of MB per session,
+#              for a log that is only read when something goes wrong. Start
+#              with --verbose when it is.
+#   --verbose  compositor at `--log-level debug` (what --logging did before
+#              2026-09-11).
+#   --debug    --verbose plus WAYLAND_DEBUG=1 on the client.
 
 LOGGING=false
+VERBOSE=false
 DEBUG=false
 for arg in "$@"; do
     case "$arg" in
         --logging) LOGGING=true ;;
+        --verbose) VERBOSE=true ;;
         --debug) DEBUG=true ;;
     esac
 done
@@ -24,7 +38,13 @@ export XCURSOR_THEME="cce"
 # libXcursor and libxcb-cursor, so exporting it here made every X11 app ask for
 # a 24-pixel cursor and get one drawn at half size.
 export XCURSOR_PATH="${XDG_DATA_HOME:-$HOME/.local/share}/icons:$HOME/.icons:/usr/share/icons"
-export WLR_NO_HARDWARE_CURSORS=1
+# No WLR_NO_HARDWARE_CURSORS. It was exported from the first day this script
+# existed with no recorded reason (likely the NVIDIA era), and with the
+# session pinned to the Intel card below the cursor plane works. A software
+# cursor is a scene node: every pointer motion damaged the scene and ran a
+# full scenefx composite. wlroots still falls back to a software cursor by
+# itself if the plane refuses an image, so restoring the export is only for
+# a cursor that visibly misbehaves (lag, wrong scale, corruption).
 export WLR_DRM_DEVICES=/dev/dri/card1
 # The session renders on the Intel GPU, so Vulkan is pinned to the Intel ICD.
 # This is not only a compositor concern: an app that also loads the NVIDIA
@@ -113,10 +133,12 @@ LAUNCH_EOF
 chmod +x "$CCE_LAUNCH"
 
 LOG_LEVEL_FLAG=""
-if [ "$LOGGING" = true ] || [ "$DEBUG" = true ]; then
+if [ "$VERBOSE" = true ] || [ "$DEBUG" = true ]; then
     LOG_LEVEL_FLAG="--log-level debug"
+fi
+if [ "$LOGGING" = true ] || [ "$VERBOSE" = true ] || [ "$DEBUG" = true ]; then
     echo "Starting cce-server with cce..."
-    echo "  Logs: $CCE_LOG + $CCE_CLIENT_LOG"
+    echo "  Logs: $CCE_LOG + $CCE_CLIENT_LOG (compositor level: ${LOG_LEVEL_FLAG:---log-level info})"
     if [ "$DEBUG" = true ]; then
         echo "  Wayland debug logging enabled (WAYLAND_DEBUG=1)"
     fi