From 3913e1cce8547d0ff49a469576e574f4b1ac987e Mon Sep 17 00:00:00 2001 From: Eddy Date: Mon, 20 Apr 2026 17:10:56 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20HiDPI-Scaling=20im=20Nix-Launcher=20?= =?UTF-8?q?=E2=80=94=20liest=20Xft.dpi,=20erzwingt=20Xwayland?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GTK3 kann unter Wayland kein natives fractional Scaling. Der Launcher liest jetzt Xft.dpi aus xrdb, setzt GDK_DPI_SCALE entsprechend (fuer scharfe Fonts) und erzwingt unter Wayland GDK_BACKEND=x11, damit der Compositor die Fenstergroesse skaliert. Override per CLAUDE_DESKTOP_SCALE oder abschaltbar mit CLAUDE_DESKTOP_SCALE=off. Funktioniert transparent auf X11-VM und KDE-Wayland-Desktop. Co-Authored-By: Claude Opus 4.7 (1M context) --- nix/default.nix | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/nix/default.nix b/nix/default.nix index a6b1b4c..faec47b 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -80,6 +80,29 @@ pkgs.stdenv.mkDerivation { export CLAUDE_DESKTOP_NIX_WRAPPER=1 export CLAUDE_DESKTOP_BIN="$BIN" + # HiDPI/Fractional-Scaling — GTK3 unter Wayland kann kein natives fractional + # scaling. Workaround: Xwayland erzwingen (der Compositor skaliert das Fenster) + # und GDK_DPI_SCALE aus Xft.dpi ableiten, damit Fonts scharf bleiben. + # Override-bar ueber CLAUDE_DESKTOP_SCALE (z.B. "1.5") oder komplett + # deaktivierbar mit CLAUDE_DESKTOP_SCALE=off. + if [ "''${CLAUDE_DESKTOP_SCALE:-}" != "off" ]; then + SCALE="''${CLAUDE_DESKTOP_SCALE:-}" + if [ -z "$SCALE" ] && command -v xrdb >/dev/null 2>&1 && [ -n "''${DISPLAY:-}" ]; then + DPI="$(xrdb -query 2>/dev/null | awk -F':\\s*' '/^Xft.dpi:/ {print $2; exit}')" + if [ -n "$DPI" ] && [ "$DPI" -gt 96 ] 2>/dev/null; then + # bash-only float-Division: auf 2 Stellen runden + SCALE="$(awk -v d="$DPI" 'BEGIN { printf "%.2f", d/96 }')" + fi + fi + if [ -n "$SCALE" ] && [ "$SCALE" != "1.00" ] && [ "$SCALE" != "1.0" ]; then + export GDK_DPI_SCALE="$SCALE" + # Unter Wayland: Xwayland nutzen, damit der Compositor-Scale greift + if [ "''${XDG_SESSION_TYPE:-}" = "wayland" ]; then + export GDK_BACKEND="''${GDK_BACKEND:-x11}" + fi + fi + fi + exec "$BIN" "$@" LAUNCHER chmod +x $out/bin/claude-desktop