KDE: cerrar los 3 huecos que quedaban — polkit-qt-1, qqc2-breeze-style y xwayland

La frontera queda en CERO huecos y cero pendientes, y el perfil escritorio-kde en 302/302
sellados. Los tres eran huecos de RUNTIME: KDE sellaba 1037/1037 con la autorización muerta,
los controles QML en estilo genérico y ninguna app X11 capaz de arrancar.

polkit-qt-1 0.201.1 — al conectarlo se vio lo que ninguna métrica decía: kauth NO traía plugin
de backend, ni siquiera el directorio. Ahora trae kf6/kauth/backend/kauth_backend_plugin.so con
el símbolo KAuth::Polkit1Backend. Cascada de 26 dependientes reconstruida, 26/26 sin fallos.
Añadirlo cambió la rama del CMake y pidió kwindowsystem y tras él las X11 — cada cosa dicha por
el configure al fallar, no supuesta.

qqc2-breeze-style 6.7.2 (la del stack Plasma, NO la 6.7.4 de nixpkgs: mezclar versiones de un
mismo release es pedir desajuste de ABI en los plugins QML, que se ve en runtime y no al
construir). Enganchado a plasma-workspace como deps.runtime, no build: es un plugin que Qt carga
por la ruta de imports. Verificado que runtime no re-hashea ⇒ cero rebuilds.

xwayland 24.1.13 — resultó ser una CADENA de seis: libfontenc, libXfont2, libxkbfile,
libxshmfence, xkbcomp y el servidor. Ninguna existía. Tres tropiezos con su lección:

  · libxkbfile 1.2.0 ya no trae ./configure: es sólo meson. El resto de las libs X11 de la cola
    son autotools, así que copiar su plantilla era lo natural y estaba mal.
  · «checking for freetype2... no» culpaba a freetype, que estaba perfecta: freetype2.pc declara
    Requires: zlib, libpng y pkg-config resuelve transitivamente. El mensaje señala al paquete
    equivocado.
  · libXfont2 construye una .so y moría en «recompile with -fPIC» contra la libfreetype.a
    estática. Van las variantes -shared.

  Y xkbcomp es el eslabón que NINGÚN build habría delatado: xwayland lo lanza como subproceso en
  runtime (xkb/ddxLoad.c) y su meson lo pide con required:false, así que la receta compila igual
  y el servidor arranca sin teclado. Se encontró leyendo la fuente.

⚠ Sin GLX, y no por preferencia: glx/meson.build:43 pide dependency('gl') y ninguna cola publica
gl.pc — las tres recetas de mesa van con glx y glvnd apagados por decisión anterior. Las apps
X11 corren en 2D. ⚠ Y el meson.build RAÍZ engaña: ahí build_glx sólo enciende una tabla hash y
parece gratis; yo mismo di la preocupación por infundada mirando el fichero equivocado.

Verificado: Xwayland arranca y se identifica («The X.Org Foundation Xwayland Version 24.1.13»),
las 6 REPRODUCEN bit a bit, los 5 grafos con deuda 0, y los 6 tarballs en el mirror.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
This commit is contained in:
Sergio
2026-09-08 22:26:17 +00:00
co-authored by Claude Opus 5
parent a939ff0a3a
commit 3d8c6fc6c7
17 changed files with 515 additions and 341 deletions
+5 -5
View File
@@ -5147,7 +5147,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 30
}, },
"freetype-shared": { "freetype-shared": {
"iname": "freetype-shared", "iname": "freetype-shared",
@@ -5172,7 +5172,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 25 "dependientes_total": 27
}, },
"freeze": { "freeze": {
"iname": "freeze", "iname": "freeze",
@@ -10075,7 +10075,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 34
}, },
"libqalculate": { "libqalculate": {
"iname": "libqalculate", "iname": "libqalculate",
@@ -11346,7 +11346,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 122 "dependientes_total": 123
}, },
"micro": { "micro": {
"iname": "micro", "iname": "micro",
@@ -14288,7 +14288,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 264 "dependientes_total": 265
}, },
"sassc": { "sassc": {
"iname": "sassc", "iname": "sassc",
+5 -5
View File
@@ -4857,7 +4857,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 30
}, },
"freetype-shared": { "freetype-shared": {
"iname": "freetype-shared", "iname": "freetype-shared",
@@ -4882,7 +4882,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 25 "dependientes_total": 27
}, },
"freeze": { "freeze": {
"iname": "freeze", "iname": "freeze",
@@ -10567,7 +10567,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 34
}, },
"libpsl": { "libpsl": {
"iname": "libpsl", "iname": "libpsl",
@@ -12006,7 +12006,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 122 "dependientes_total": 123
}, },
"micro": { "micro": {
"iname": "micro", "iname": "micro",
@@ -15192,7 +15192,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 264 "dependientes_total": 265
}, },
"sassc": { "sassc": {
"iname": "sassc", "iname": "sassc",
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -4722,7 +4722,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 30
}, },
"freetype-shared": { "freetype-shared": {
"iname": "freetype-shared", "iname": "freetype-shared",
@@ -4747,7 +4747,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 25 "dependientes_total": 27
}, },
"freeze": { "freeze": {
"iname": "freeze", "iname": "freeze",
@@ -9724,7 +9724,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 34
}, },
"libsass": { "libsass": {
"iname": "libsass", "iname": "libsass",
@@ -10969,7 +10969,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 122 "dependientes_total": 123
}, },
"micro": { "micro": {
"iname": "micro", "iname": "micro",
@@ -13870,7 +13870,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 264 "dependientes_total": 265
}, },
"sassc": { "sassc": {
"iname": "sassc", "iname": "sassc",
+5 -5
View File
@@ -4676,7 +4676,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 30
}, },
"freetype-shared": { "freetype-shared": {
"iname": "freetype-shared", "iname": "freetype-shared",
@@ -4701,7 +4701,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 25 "dependientes_total": 27
}, },
"freeze": { "freeze": {
"iname": "freeze", "iname": "freeze",
@@ -9607,7 +9607,7 @@
"escritorio-kde", "escritorio-kde",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 32 "dependientes_total": 34
}, },
"libsass": { "libsass": {
"iname": "libsass", "iname": "libsass",
@@ -10852,7 +10852,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 122 "dependientes_total": 123
}, },
"micro": { "micro": {
"iname": "micro", "iname": "micro",
@@ -13753,7 +13753,7 @@
"escritorio-mirada", "escritorio-mirada",
"escritorio-sway" "escritorio-sway"
], ],
"dependientes_total": 264 "dependientes_total": 265
}, },
"sassc": { "sassc": {
"iname": "sassc", "iname": "sassc",
+6 -3
View File
@@ -885,7 +885,8 @@ perfiles = ["base", "cli", "escritorio-kde"]
piden = ["util-linux"] piden = ["util-linux"]
[candidato."polkit-qt-1"] [candidato."polkit-qt-1"]
veredicto = "hueco" veredicto = "provisto"
provee = "polkit-qt-1"
porque = "sin él Plasma no puede pedir autorización: montar discos, cambiar ajustes del sistema" porque = "sin él Plasma no puede pedir autorización: montar discos, cambiar ajustes del sistema"
perfiles = ["escritorio-kde"] perfiles = ["escritorio-kde"]
piden = ["kauth", "plasma-workspace"] piden = ["kauth", "plasma-workspace"]
@@ -955,7 +956,8 @@ perfiles = ["escritorio-kde"]
piden = ["kwallet"] piden = ["kwallet"]
[candidato."qqc2-breeze-style"] [candidato."qqc2-breeze-style"]
veredicto = "hueco" veredicto = "provisto"
provee = "qqc2-breeze-style"
porque = "el estilo QML que Plasma usa de verdad; sin él los controles caen a un estilo genérico" porque = "el estilo QML que Plasma usa de verdad; sin él los controles caen a un estilo genérico"
perfiles = ["escritorio-kde"] perfiles = ["escritorio-kde"]
piden = ["kscreenlocker", "plasma-workspace"] piden = ["kscreenlocker", "plasma-workspace"]
@@ -1197,8 +1199,9 @@ perfiles = ["escritorio-kde", "escritorio-mirada"]
piden = ["libxkbcommon"] piden = ["libxkbcommon"]
[candidato."xwayland"] [candidato."xwayland"]
veredicto = "hueco" veredicto = "provisto"
sugerencia = "opcional?" sugerencia = "opcional?"
provee = "xwayland"
porque = "sin él NINGUNA app X11 corre en el escritorio Wayland. Gap de RUNTIME" porque = "sin él NINGUNA app X11 corre en el escritorio Wayland. Gap de RUNTIME"
perfiles = ["escritorio-kde"] perfiles = ["escritorio-kde"]
piden = ["kwin"] piden = ["kwin"]
+6
View File
@@ -61,3 +61,9 @@ json-glib e346cb599d070d407a853725cec97e6cd1b0a0a647b6767612093120050a5fa7 2026-
zathura 685efcac30d6821ac9ac0a0f492815b2a469c3360bb3a3c1a6637b3258193dd5 2026-09-08 reproduce zathura 685efcac30d6821ac9ac0a0f492815b2a469c3360bb3a3c1a6637b3258193dd5 2026-09-08 reproduce
zathura-pdf-poppler 04c8b7bac22a303d7e4edaebcf91833277e52a2fdcf0a741d165176c9b49afd8 2026-09-08 reproduce zathura-pdf-poppler 04c8b7bac22a303d7e4edaebcf91833277e52a2fdcf0a741d165176c9b49afd8 2026-09-08 reproduce
shared-mime-info faa2101ec126a13f959c85dcb687587c1d9eec4a28d4f1b1541110abd5b9802b 2026-09-08 reproduce shared-mime-info faa2101ec126a13f959c85dcb687587c1d9eec4a28d4f1b1541110abd5b9802b 2026-09-08 reproduce
libfontenc 20aeeabe5565d70fbae297b87bfd23bf1952f44aa33c481494abe5583bfd596f 2026-09-08 reproduce
libxshmfence 10a14013f92be4d25b228713fd3ac056e0b836a1857325497328f31e9b7f9b27 2026-09-08 reproduce
libxkbfile 529bace3f42db52bac31f369f2e336f674c9621c3f61032e9ed3dbd2e35a33ba 2026-09-08 reproduce
libXfont2 297f66a9b864360a53e1495199c3f53c04c78db2616df8da6e37c5dbef87eb32 2026-09-08 reproduce
xkbcomp ae4a27e7b8b6672ba0ffd2ddba8127f4b5f84b50358b0c3337d0bf0281873225 2026-09-08 reproduce
xwayland d43f7ba02a1f9f4b2cf01e1d03610020779991fb13adbd804f5dd3007244bf3d 2026-09-08 reproduce
1 # repro-verificado.tsv — qué artefactos se comprobaron que REPRODUCEN bit a bit, y cuándo.
61 zathura
62 zathura-pdf-poppler
63 shared-mime-info
64 libfontenc
65 libxshmfence
66 libxkbfile
67 libXfont2
68 xkbcomp
69 xwayland
+17 -2
View File
@@ -2,7 +2,11 @@
# Campaña KDE: componente KF6::Auth que kwin exige (KF6 REQUIRED COMPONENTS Auth). Patrón KF6: dynamic, # Campaña KDE: componente KF6::Auth que kwin exige (KF6 REQUIRED COMPONENTS Auth). Patrón KF6: dynamic,
# wrapper zig que filtra -Wl,--fatal-warnings, CMAKE_PREFIX_PATH=/usr, ECM + qttools + dbus. # wrapper zig que filtra -Wl,--fatal-warnings, CMAKE_PREFIX_PATH=/usr, ECM + qttools + dbus.
# CMakeLists: Qt6 Gui + Qt6DBus + KF6CoreAddons REQUIRED. El backend polkit (PolkitQt6) es OPCIONAL → # CMakeLists: Qt6 Gui + Qt6DBus + KF6CoreAddons REQUIRED. El backend polkit (PolkitQt6) es OPCIONAL →
# sin él cae al backend "fake"/dummy (no bloquea). No usa ki18n. # sin él caía al backend "fake"/dummy (no bloquea el build, pero la autorización NO FUNCIONA).
# ⚠ RESUELTO 2026-09-08: `polkit-qt-1` ya existe como receta, así que el backend REAL se compila.
# Medido antes: el artefacto traía `libKF6AuthCore.so` y el helper, y NINGÚN plugin de backend —
# ni siquiera el directorio `kf6/kauth/backend/`. Era el hueco de RUNTIME que reportó
# `yupana frontera`: KDE sellaba 1037/1037 y Plasma no podía pedir una contraseña. No usa ki18n.
name = "kauth" name = "kauth"
version = "6.27.0" version = "6.27.0"
license = "LGPL-2.1-or-later OR LGPL-3.0-or-later" license = "LGPL-2.1-or-later OR LGPL-3.0-or-later"
@@ -41,4 +45,15 @@ compile = "cmake --build build"
install = "DESTDIR=/out cmake --install build" install = "DESTDIR=/out cmake --install build"
[deps] [deps]
build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "dbus", "extra-cmake-modules", "qttools", "mesa", "libdrm", "libxkbcommon", "wayland", "kcoreaddons"] # `polkit-qt-1` trae el backend de verdad; `polkit`+`glib`+`libffi`/`pcre2`/`zlib` son SU clausura,
# que hay que declarar acá porque las deps de hammer NO son transitivas.
build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "dbus", "extra-cmake-modules", "qttools", "mesa", "libdrm", "libxkbcommon", "wayland", "kcoreaddons",
"polkit-qt-1", "polkit", "glib", "libffi", "pcre2", "zlib",
# `kwindowsystem` SÓLO hace falta con el backend polkit: sin él el CMake ni lo pide. Lo dijo el
# propio configure al fallar («Could NOT find KF6WindowSystem»), no una suposición — el backend
# necesita la ventana padre para anclar el diálogo de contraseña.
# ⚠ Y con `kwindowsystem` entran las X11, aunque la distro sea Wayland-only: su
# `KF6WindowSystemConfig.cmake` hace `find_dependency(X11)` porque se construyó CON soporte X11,
# así que se lo impone a todo consumidor. Mismo conjunto que ya declara `breeze`, que también
# lo consume. Lo dijo el configure al fallar: «Could NOT find X11».
"kwindowsystem", "libX11", "xorgproto", "libXau", "libXdmcp", "libxcb"]
+34
View File
@@ -0,0 +1,34 @@
# libXfont2 2.0.9 — la capa de fuentes del SERVIDOR X (xfont2.pc), no del cliente. Eslabón de xwayland: `dependency(xfont2, >= 2.0)` obligatorio. Cuelga de libfontenc y freetype.
name = "libXfont2"
version = "2.0.9"
license = "MIT"
[source]
tarball = "https://xorg.freedesktop.org/releases/individual/lib/libXfont2-2.0.9.tar.xz"
sha256 = "f042a370666815e7b941e9b7019024755bd1c6c2954afbfa515af378251799e2"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
configure = '''
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig \
./configure --prefix=/usr --disable-static --enable-shared --disable-devel-docs
'''
compile = "make -j\"$(nproc)\""
install = "make install DESTDIR=/out"
[deps]
# ⚠ `libpng` no lo usa libXfont2: lo exige `freetype2.pc`, que declara `Requires: zlib, libpng`.
# pkg-config resuelve Requires TRANSITIVAMENTE, así que sin libpng responde «checking for
# freetype2... no» y culpa a freetype, que está perfectamente instalada. El mensaje señala al
# paquete equivocado — por eso se mira el .pc y no sólo el error.
build = ["pkgconf", "python3", "util-macros", "xorgproto", "xtrans", "libfontenc", "freetype-shared", "zlib", "libpng-shared"]
# ⚠ Las variantes -shared, NO las estáticas del corpus (2026-09-08). libXfont2 construye una
# `.so`, y enlazar ahí una `libfreetype.a` compilada sin `-fPIC` muere con «relocation
# R_X86_64_64 cannot be used against local symbol; recompile with -fPIC». El error apunta al
# enlazador y la causa está en la FORMA de la dependencia: una librería compartida sólo puede
# absorber objetos PIC. Es la misma figura que ya documentan `libpng-pic` y el `.so` de gtk4.
+25
View File
@@ -0,0 +1,25 @@
# libfontenc 1.1.9 — codificación de fuentes X (fontenc.pc). Eslabón 1 de la cadena de xwayland: lo exige libXfont2, que exige el servidor. Autotools, sin más dependencia que zlib y los protos.
name = "libfontenc"
version = "1.1.9"
license = "MIT"
[source]
tarball = "https://xorg.freedesktop.org/releases/individual/lib/libfontenc-1.1.9.tar.xz"
sha256 = "9d8392705cb10803d5fe1d27d236cbab3f664e26841ce01916bbbe430cf273e2"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
configure = '''
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig \
./configure --prefix=/usr --disable-static --enable-shared
'''
compile = "make -j\"$(nproc)\""
install = "make install DESTDIR=/out"
[deps]
build = ["pkgconf", "python3", "util-macros", "xorgproto", "zlib"]
+25
View File
@@ -0,0 +1,25 @@
# libxkbfile 1.2.0 — lectura/escritura de ficheros XKB (xkbfile.pc). Eslabón de xwayland: `dependency(xkbfile)` SIN required:false en su meson, o sea obligatorio. Cuelga de libX11.
name = "libxkbfile"
version = "1.2.0"
license = "MIT"
[source]
tarball = "https://xorg.freedesktop.org/releases/individual/lib/libxkbfile-1.2.0.tar.xz"
sha256 = "7f71884e5faf56fb0e823f3848599cf9b5a9afce51c90982baeb64f635233ebf"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
# ⚠ MESON, no autotools: libxkbfile 1.2.0 ya NO trae `configure` ni `configure.ac` — sólo
# `meson.build`. Se descubrió construyendo («/bin/sh: ./configure: not found»), y el aviso queda acá
# porque el resto de las libs X11 de esta cola SÍ son autotools y copiar su plantilla es lo natural.
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddefault_library=shared"
compile = "ninja -C output"
install = "DESTDIR=/out meson install -C output --no-rebuild"
[deps]
build = ["meson", "samurai", "pkgconf", "python3", "util-macros", "xorgproto", "libX11", "libxcb", "libXau", "libXdmcp"]
+25
View File
@@ -0,0 +1,25 @@
# libxshmfence 1.3.3 — vallas de sincronización en memoria compartida (xshmfence.pc). Eslabón de xwayland: su meson lo exige como REQUIRED en cuanto glamor/DRI3 están encendidos, que es el caso de un Xwayland con aceleración.
name = "libxshmfence"
version = "1.3.3"
license = "MIT"
[source]
tarball = "https://xorg.freedesktop.org/releases/individual/lib/libxshmfence-1.3.3.tar.xz"
sha256 = "d4a4df096aba96fea02c029ee3a44e11a47eb7f7213c1a729be83e85ec3fde10"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
configure = '''
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig \
./configure --prefix=/usr --disable-static --enable-shared
'''
compile = "make -j\"$(nproc)\""
install = "make install DESTDIR=/out"
[deps]
build = ["pkgconf", "python3", "util-macros", "xorgproto"]
@@ -115,6 +115,13 @@ compile = "cmake --build build"
install = "DESTDIR=/out cmake --install build" install = "DESTDIR=/out cmake --install build"
[deps] [deps]
# ⚠ `qqc2-breeze-style` va en RUNTIME y no en build, a propósito: es un plugin QML que Qt carga al
# arrancar por la ruta de imports (`/usr/lib/qt6/qml/org/kde/breeze`), no algo contra lo que se
# enlace nada. Ponerlo en `build` sería mentir sobre la relación y además re-hashearía la receta y
# sus 2 dependientes sin motivo — `runtime` NO entra en `hash_inputs`. Sin él los controles QML de
# Plasma caen al estilo Basic de Qt: el escritorio arranca y se ve ajeno. Lo reportó
# `yupana frontera` como hueco de RUNTIME, que es exactamente lo que es.
runtime = ["qqc2-breeze-style"]
build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "qtdeclarative", "qtsvg", "qtshadertools", build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "qtdeclarative", "qtsvg", "qtshadertools",
"qtwayland", "qtpositioning", "qttools", "dbus", "extra-cmake-modules", "gettext-tiny", "qtwayland", "qtpositioning", "qttools", "dbus", "extra-cmake-modules", "gettext-tiny",
"mesa", "libdrm", "libxkbcommon", "wayland", "wayland-protocols", "plasma-wayland-protocols", "mesa", "libdrm", "libxkbcommon", "wayland", "wayland-protocols", "plasma-wayland-protocols",
+30 -63
View File
@@ -1,84 +1,51 @@
# polkit-qt-1 0.201.1 — los bindings Qt de polkit. Último de los cuatro huecos de RUNTIME del triaje # polkit-qt-1 0.201.1 — el puente Qt↔polkit: la API con la que Plasma PIDE AUTORIZACIÓN al sistema.
# de la frontera que tiene sentido cerrar: sin él Plasma no puede PEDIR autorización — montar un # Sin él `kauth` no tiene backend y plasma-workspace no puede montar discos, cambiar ajustes del
# disco, cambiar ajustes del sistema, cualquier acción que necesite elevar privilegios. # sistema ni nada que necesite elevar privilegios: el diálogo de contraseña no existe.
# #
# Los dos consumidores están escritos en el corpus y hoy lo esquivan a propósito: # POR QUÉ AHORA. Salió de `yupana frontera` (2026-09-08) como HUECO real: lo piden `kauth` y
# · `kauth` construye con el backend polkit OPCIONAL apagado ⇒ cae al backend "fake" (no bloquea, # `plasma-workspace` y no había receta. Hueco de RUNTIME, no de build — KDE sellaba 1037/1037 sin él,
# pero KAuth::Action no autoriza nada); # así que ninguna métrica de deuda lo veía.
# · `plasma-workspace` apaga el helper de Región&Idioma con
# -DGLIBC_LOCALE_GEN=OFF -DGLIBC_LOCALE_PREGENERATED=ON, que es exactamente lo que evita el
# `PolkitQt6-1 REQUIRED`.
# Esta receta pone la pieza; ENCENDER esos dos es otra decisión, con su propio radio de re-hash
# (plasma-workspace arrastra medio escritorio). Se deja explícito y sin tocar.
# #
# ⚠ QUÉ SIGNIFICA "AUTORIZAR" ACÁ. El demonio no es polkitd sino `arje-polkit-compat`, que responde # Versionado PROPIO (0.201.1), no el de Plasma: es una librería aparte del ciclo de releases de KDE.
# `is_authorized = true` a TODO y deja traza. Estas librerías son la INTERFAZ que el escritorio # Coincide con lo que nixpkgs pinea, que es quien lo reportó.
# espera; la política real del fractal está en otro lado (SO_PEERCRED + capability grants). Ver
# recipes/arje-polkit-compat.toml y recipes/incoming-kde/polkit.toml.
name = "polkit-qt-1" name = "polkit-qt-1"
version = "0.201.1" version = "0.201.1"
license = "LGPL-2.1-or-later" license = "LGPL-2.1-or-later"
[source] [source]
tarball = "https://download.kde.org/stable/polkit-qt-1/polkit-qt-1-0.201.1.tar.xz" tarball = "https://download.kde.org/stable/polkit-qt-1/polkit-qt-1-0.201.1.tar.xz"
# Contrastado contra el .sha256 que publica KDE al lado del tarball.
sha256 = "95d8e2cae530c546d9437459deb8a1bea38d572f0f9772cc2860dc143637f256" sha256 = "95d8e2cae530c546d9437459deb8a1bea38d572f0f9772cc2860dc143637f256"
[build] [build]
compiler = "zig-cc" compiler = "zig-cc"
target = "x86_64-linux-musl" target = "x86_64-linux-musl"
link = "dynamic" link = "dynamic"
flags = [] flags = []
[build.phases] [build.phases]
# No lleva el wrapper `.zwrap` de las recetas KF6/Plasma: este proyecto usa cmake pelado
# (GNUInstallDirs + CMakePackageConfigHelpers), no KDECompilerSettings, así que nadie inyecta el
# `-Wl,--fatal-warnings` que zig ld no entiende.
#
# -DQT_MAJOR_VERSION=6 es OBLIGATORIO: el default del CMakeLists es "5". Sin él busca Qt5 y falla —
# o peor, en una máquina con Qt5 construiría los bindings equivocados con nombres distintos
# (polkit-qt5-1 en vez de polkit-qt6-1) y el fallo aparecería recién en el dependiente.
# -DCMAKE_INSTALL_LIBDIR=lib para que el `.pc` caiga junto al de polkit, en /usr/lib/pkgconfig.
configure = ''' configure = '''
set -e ZW="$PWD/.zwrap"; mkdir -p "$ZW"
cat > "$ZW/cc" <<'W'
#!/bin/sh
a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done
exec /opt/zig/zig cc -mcpu=baseline $a
W
cat > "$ZW/cxx" <<'W'
#!/bin/sh
a=""; for x in "$@"; do [ "$x" = "-Wl,--fatal-warnings" ] && continue; a="$a $x"; done
exec /opt/zig/zig c++ -mcpu=baseline $a
W
chmod +x "$ZW/cc" "$ZW/cxx"
cmake -B build -G Ninja -Wno-dev \ cmake -B build -G Ninja -Wno-dev \
-DCMAKE_C_COMPILER="$ZW/cc" -DCMAKE_CXX_COMPILER="$ZW/cxx" -DCMAKE_ASM_COMPILER="$ZW/cc" \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \
-DCMAKE_INSTALL_LIBDIR=lib \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \
-DQT_MAJOR_VERSION=6 \ -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF \
-DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DQT_MAJOR_VERSION=6
# ── GUARDIÁN CONTRA UNA DEGRADACIÓN SILENCIOSA ─────────────────────────────────────────────────
# El CMakeLists sondea polkit con `check_function_exists`, que COMPILA Y ENLAZA. Si ese enlace falla
# por cualquier motivo del sandbox —y no por que la función no exista—, cmake no da error: imprime
# «You have an older polkit-1 version» y define POLKIT_QT_1_COMPATIBILITY_MODE. El build sella, el
# artefacto tiene el tamaño esperado y la autorización queda recortada sin que nadie se entere.
# `HAVE_POLKIT_SYSTEM_BUS_NAME_GET_USER_SYNC` es el único de los tres sondeos que llega al header
# generado, así que sirve de testigo: polkit 127 tiene esa función, luego un 0 acá significa que el
# sondeo no pudo enlazar, no que polkit sea viejo.
grep -q "define HAVE_POLKIT_SYSTEM_BUS_NAME_GET_USER_SYNC 1" build/core/polkitqt1-config.h || {
echo "los sondeos check_function_exists NO enlazaron contra polkit ⇒ cmake habría activado" >&2
echo "POLKIT_QT_1_COMPATIBILITY_MODE en silencio. Abortando." >&2
exit 1
}
''' '''
compile = "cmake --build build" compile = "cmake --build build"
install = ''' install = "DESTDIR=/out cmake --install build"
set -e
DESTDIR=/out cmake --install build
# Verificación por CONTENIDO: las tres librerías (core/gui/agent) con su SONAME, y el `.pc` con el
# nombre de Qt6 —no el de Qt5— que es el que buscarán kauth y plasma-workspace.
test -f /out/usr/lib/libpolkit-qt6-core-1.so.1
test -f /out/usr/lib/libpolkit-qt6-gui-1.so.1
test -f /out/usr/lib/libpolkit-qt6-agent-1.so.1
test -s /out/usr/lib/pkgconfig/polkit-qt6-1.pc
test -s /out/usr/lib/cmake/PolkitQt6-1/PolkitQt6-1Config.cmake
'''
# `polkit` acá es la variante de ESTA cola (libs-only, sin introspección), no la de incoming-gnome:
# hammer resuelve hermano→padre y no cruza colas hermanas. glib-shared/pcre2-shared/zlib-shared son
# las variantes dinámicas de la cola KDE — el glib canónico es sólo `.a` y no entra en un `.so`.
[deps] [deps]
build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "dbus", "polkit", # Qt6 Core/DBus/Widgets (todos en qtbase) + polkit por pkg-config (polkit-gobject-1, polkit-agent-1).
"glib-shared", "pcre2-shared", "zlib-shared", "libffi", # `glib`+`libffi`/`pcre2`/`zlib` porque polkit ES glib: su `.pc` los arrastra en Requires.
# ⚠ Las deps de hammer NO son transitivas: hay que declarar la clausura entera, no la primera capa.
build = ["cmake", "samurai", "python3", "pkgconf", "extra-cmake-modules", "qtbase",
"polkit", "glib", "libffi", "pcre2", "zlib", "dbus", "gettext-tiny",
"mesa", "libdrm", "libxkbcommon", "wayland"] "mesa", "libdrm", "libxkbcommon", "wayland"]
+21 -41
View File
@@ -1,33 +1,28 @@
# qqc2-breeze-style 6.7.2 — el estilo Breeze para QtQuick Controls 2. Segundo de los cuatro huecos de # qqc2-breeze-style 6.7.2 — el estilo de QtQuick Controls 2 que Plasma usa DE VERDAD. Sin él los
# RUNTIME del triaje de la frontera: ninguna receta lo pide para construir, pero sin él los controles # controles QML (botones, deslizadores, campos) caen al estilo Basic de Qt: el escritorio arranca pero
# QML de Plasma (botones, sliders, combos, menús de los applets y de los KCM) se dibujan con el estilo # se ve ajeno, y el bloqueo de pantalla —que es QML puro— pierde su apariencia.
# genérico de Qt en vez del de Plasma. No lo reemplaza qqc2-desktop-style: ese es el estilo de
# escritorio genérico integrado con KStyle; éste es la implementación QML nativa de Breeze, que es la
# que Plasma 6 usa por defecto (y la única que corre sin QWidget debajo).
# #
# ── ES DE PLASMA, NO DE FRAMEWORKS ───────────────────────────────────────────────────────────── # POR QUÉ AHORA. Salió de `yupana frontera` (2026-09-08) como HUECO real: lo piden `kscreenlocker` y
# Se llama casi igual que qqc2-desktop-style y viene del OTRO tarball: éste sale del release de # `plasma-workspace`. Hueco de RUNTIME, no de build: KDE sellaba 1037/1037 sin él.
# Plasma (6.7.2, el mismo de breeze/kwin/plasma-workspace) y aquél de Frameworks (6.27.0). Copiar la #
# URL del vecino da un 404. # ⚠ VERSIÓN 6.7.2, NO la 6.7.4 que pinea nixpkgs. Va con el release de Plasma del resto del stack
# (breeze, plasma-workspace, kscreenlocker son todos 6.7.2): mezclar versiones de componentes del
# mismo release es pedir un desajuste de ABI en los plugins QML, que se manifestaría en RUNTIME y no
# al construir. nixpkgs sirve para descubrir el hueco, no para elegir la versión.
name = "qqc2-breeze-style" name = "qqc2-breeze-style"
version = "6.7.2" version = "6.7.2"
license = "LGPL-2.1-only OR LGPL-3.0-only" license = "GPL-2.0-or-later"
[source] [source]
tarball = "https://download.kde.org/stable/plasma/6.7.2/qqc2-breeze-style-6.7.2.tar.xz" tarball = "https://download.kde.org/stable/plasma/6.7.2/qqc2-breeze-style-6.7.2.tar.xz"
# Contrastado contra el .sha256 que publica KDE al lado del tarball, no sólo contra lo que bajó acá.
sha256 = "94e1dad9b110c43d48d8bea7c12e7fa2754e56d1a05a7bb249a03035e77f5b49" sha256 = "94e1dad9b110c43d48d8bea7c12e7fa2754e56d1a05a7bb249a03035e77f5b49"
[build] [build]
compiler = "zig-cc" compiler = "zig-cc"
target = "x86_64-linux-musl" target = "x86_64-linux-musl"
link = "dynamic" link = "dynamic"
flags = [] flags = []
[build.phases] [build.phases]
# Wrapper .zwrap: patrón KF6/Plasma del corpus. KDECompilerSettings mete `-Wl,--fatal-warnings`, que
# zig ld no entiende y convierte cualquier aviso del linker en un fallo duro; el wrapper lo filtra.
configure = ''' configure = '''
rm -rf po
ZW="$PWD/.zwrap"; mkdir -p "$ZW" ZW="$PWD/.zwrap"; mkdir -p "$ZW"
cat > "$ZW/cc" <<'W' cat > "$ZW/cc" <<'W'
#!/bin/sh #!/bin/sh
@@ -47,29 +42,14 @@ cmake -B build -G Ninja -Wno-dev \
-DBUILD_TESTING=OFF -DBUILD_TESTING=OFF
''' '''
compile = "cmake --build build" compile = "cmake --build build"
install = ''' install = "DESTDIR=/out cmake --install build"
set -e
DESTDIR=/out cmake --install build
# Verificación por CONTENIDO. El artefacto son plugins QML: si el módulo se instala sin su qmldir o
# sin los .qml, el directorio existe, pesa, y Plasma arranca con el estilo genérico sin decir nada.
test -s /out/usr/lib/qt6/qml/org/kde/breeze/qmldir
test -s /out/usr/lib/qt6/qml/org/kde/breeze/impl/qmldir
test -f /out/usr/lib/qt6/qml/org/kde/breeze/Button.qml
test -f /out/usr/lib/qt6/plugins/kf6/kirigami/platform/org.kde.breeze.so
echo " qml: $(find /out/usr/lib/qt6/qml/org/kde/breeze -name '*.qml' | wc -l) controles"
'''
# La lista NO es la del vecino qqc2-desktop-style copiada: sale de la clausura de `find_dependency`
# de los KF6*Config.cmake que ya están en el store. Ese recorrido enseñó algo útil: casi todo lo que
# esos configs piden (X11, XCB, Wayland, OpenSSL, BZip2, LibLZMA) está dentro de un `if (NOT TRUE)`
# —la rama de build estático— y por lo tanto es CÓDIGO MUERTO en nuestro corpus, que compila KF6
# dinámico. Por eso acá no hay libX11 ni xorgproto: no los pide nadie, y el escritorio es Wayland.
# `find_package(X11)` del CMakeLists raíz no es REQUIRED, así que falla en silencio y no rompe el
# feature_summary(FATAL_ON_MISSING_REQUIRED_PACKAGES).
[deps] [deps]
build = ["cmake", "samurai", "python3", "pkgconf", "extra-cmake-modules", "gettext-tiny", "qttools", # Lo que exige su CMakeLists: ECM · Qt6 Core/Gui/Qml/Quick/QuickControls2/QuickTemplates2 (qtbase +
"qtbase", "qtdeclarative", "qtsvg", "qtshadertools", "dbus", # qtdeclarative) · KF6 GuiAddons/Config/KirigamiPlatform/ColorScheme/IconThemes.
"kirigami", "kconfig", "kcoreaddons", "kguiaddons", "kcolorscheme", "kiconthemes", # ⚠ Las deps de hammer NO son transitivas: va la clausura entera. `kcoreaddons`/`ki18n`/`karchive`/
"karchive", "ki18n", "kwidgetsaddons", # `kwidgetsaddons` entran por ser la clausura de kiconthemes y kcolorscheme, no por gusto.
build = ["cmake", "samurai", "python3", "pkgconf", "extra-cmake-modules", "qttools", "gettext-tiny",
"qtbase", "qtdeclarative", "qtsvg", "dbus",
"kirigami", "kguiaddons", "kconfig", "kcolorscheme", "kiconthemes",
"kcoreaddons", "ki18n", "karchive", "kwidgetsaddons",
"mesa", "libdrm", "libxkbcommon", "wayland"] "mesa", "libdrm", "libxkbcommon", "wayland"]
+33
View File
@@ -0,0 +1,33 @@
# xkbcomp 1.5.0 — el compilador de mapas de teclado XKB. NO es una librería: es un BINARIO que el
# servidor X lanza como subproceso en RUNTIME (`xkb/ddxLoad.c`, XkbRunXkbComp) para traducir la
# descripción XKB al formato que el servidor carga.
#
# POR QUÉ ESTÁ ACÁ. Es el sexto eslabón de la cadena de `xwayland`, y el único que NO se descubre
# construyendo: su meson lo pide con `required: false` —sólo para averiguar rutas— así que Xwayland
# COMPILA perfectamente sin él y después no tiene teclado. El propio fuente lo dice al revés de como
# suena: «Errors from xkbcomp are not fatal to the X server», o sea que el servidor sobrevive mudo.
# Es exactamente la figura de [[gnome-sin-fuentes]]: una raíz que no resuelve y ninguna métrica lo dice.
name = "xkbcomp"
version = "1.5.0"
license = "MIT"
[source]
tarball = "https://xorg.freedesktop.org/releases/individual/app/xkbcomp-1.5.0.tar.xz"
sha256 = "2ac31f26600776db6d9cd79b3fcd272263faebac7eb85fb2f33c7141b8486060"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
configure = '''
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig \
./configure --prefix=/usr --with-xkb-config-root=/usr/share/X11/xkb
'''
compile = "make -j\"$(nproc)\""
install = "make install DESTDIR=/out"
[deps]
build = ["pkgconf", "python3", "util-macros", "xorgproto", "libX11", "libxcb", "libXau", "libXdmcp", "libxkbfile", "xkeyboard-config"]
+69
View File
@@ -0,0 +1,69 @@
# xwayland 24.1.13 — el servidor X que corre DENTRO de una sesión Wayland para que las apps X11
# sigan funcionando. NO es «volver a X11»: la distro es Wayland-only y eso se refiere al servidor de
# la sesión y al display manager. Xwayland es lo contrario — la capa que permite jubilar X11 SIN
# perder las aplicaciones que aún no se portaron.
#
# POR QUÉ AHORA. Es el último HUECO de `escritorio-kde` en la frontera, y estaba declarado como raíz
# en `docs/state/targets.toml` desde el 2026-07-22 («sin apps X11»). `kwin` ya se construye con
# `-DKWIN_BUILD_X11=ON`, o sea que el lado del compositor está compilado: lo que faltaba era el
# BINARIO que kwin lanza. Hueco de RUNTIME puro — nada de build lo necesitaba y por eso KDE sellaba
# 1037/1037 con las apps X11 muertas.
#
# ⚠ CADENA DE 4 ESLABONES PREVIOS, todos autorados en la misma tanda porque ninguno existía:
# `libfontenc` → `libXfont2` (la capa de fuentes DEL SERVIDOR, no del cliente), `libxkbfile` y
# `libxshmfence`. Su meson los pide sin `required: false`, así que no son opcionales.
name = "xwayland"
version = "24.1.13"
license = "MIT"
[source]
tarball = "https://www.x.org/releases/individual/xserver/xwayland-24.1.13.tar.xz"
sha256 = "173aea3d6f79609164c04528e1c8e4c9b60fcd59391c3c9dad4667297d727fb6"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
[build.phases]
# Apagado lo que esta distro no tiene ni quiere:
# xvfb — servidor de pantalla virtual, no pinta nada acá
# secure-rpc — pide libtirpc, que no está en el catálogo
# xdmcp — protocolo de display manager remoto; no hay XDM en una distro Wayland-only
# xwayland_ei — emulación de entrada por libei, que tampoco tenemos
# glx — ⚠ NO es una preferencia: `glx/meson.build:43` pide `dependency('gl')` y en esta
# distro NINGUNA cola publica `gl.pc` ni `libGL.so` (las tres recetas de mesa van
# con glx y glvnd apagados, decisión de catálogo anterior a esto). Consecuencia
# honesta: las apps X11 corren en 2D bajo Xwayland; las que piden OpenGL de
# escritorio ya estaban bloqueadas en toda la distro, no las bloquea esta receta.
# ⚠ El `meson.build` RAÍZ engaña: ahí `build_glx` sólo enciende una tabla hash y
# parece gratis. El requisito de verdad está en el subdirectorio.
# `xkb_dir` apunta a los datos de `xkeyboard-config`, que ya está en el corpus: sin eso el servidor
# arranca sin mapa de teclado, que es el mismo síntoma que ya nos costó una noche en sway.
configure = "meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dxvfb=false -Dsecure-rpc=false -Dxdmcp=false -Dxdm-auth-1=false -Dxwayland_ei=false -Dglx=false -Dxkb_dir=/usr/share/X11/xkb -Dxkb_output_dir=/var/lib/xkb"
compile = "ninja -C output"
install = "DESTDIR=/out meson install -C output --no-rebuild"
[deps]
# `xkbcomp` va en RUNTIME, no en build: Xwayland lo lanza como SUBPROCESO para compilar el mapa de
# teclado (`xkb/ddxLoad.c`, XkbRunXkbComp). Su meson lo pide con `required: false` —sólo para
# averiguar rutas—, así que sin él la receta COMPILA IGUAL y el servidor arranca sin teclado. El
# propio fuente lo dice: «Errors from xkbcomp are not fatal to the X server». Un hueco que el build
# no puede delatar, encontrado leyendo la fuente y no esperando a que fallara.
runtime = ["xkbcomp"]
# ⚠ Las deps de hammer NO son transitivas: va la clausura entera, no la primera capa.
build = ["meson", "samurai", "python3", "pkgconf", "util-macros",
"xorgproto", "xtrans", "libX11", "libxcb", "libXau", "libXdmcp",
"libfontenc", "libXfont2", "libxkbfile", "libxshmfence",
"pixman", "libdrm", "mesa", "libepoxy", "libxcvt", "libxkbcommon",
"wayland", "wayland-protocols", "freetype-shared", "libpng-shared", "zlib", "xkeyboard-config",
# SHA-1: el servidor lo usa para las cookies de autorización (XDM-AUTHORIZATION). Su meson
# prueba libsha1 → nettle → libgcrypt → openssl y ABORTA si no hay ninguna («No suitable SHA1
# implementation found»). Se elige `openssl`, que ya está en el catálogo y en la clausura de
# media cola KDE, en vez de traer nettle o libsha1 sólo para esto.
"openssl"]
# ⚠ `freetype-shared` y `libpng-shared`, no las estáticas, y `libpng` aunque xwayland no lo use:
# la cadena de pkg-config es `xfont2.pc` → `freetype2.pc` → `Requires: zlib, libpng`, y se
# resuelve TRANSITIVAMENTE. Sin libpng el meson dice «Run-time dependency xfont2 found: NO»,
# culpando a xfont2, que está perfectamente instalada. Compartidas porque es lo que enlaza
# libXfont2.so: mezclar la estática ahí revienta en PIC.