Primero de los dos huecos que dejaban a KDE POR DEBAJO de una instalación estándar. El perfil declaraba `powerdevil` —el gestor de energía de Plasma— pero no a `upower`, que es con quien powerdevil habla para leer la batería y aplicar perfiles. Medido: upower sólo existía en la cola de GNOME, y las colas no se ven entre sí (HERMANO→corpus, nunca de reojo). En un portátil eso es un escritorio sin indicador de batería, y el arranque no falla ⇒ no se ve hasta usarlo. Cuesta TRES recetas y no siete, y la diferencia es una perilla: `-Dintrospection=disabled`. GNOME la necesita ENCENDIDA porque su shell hace `imports.gi.UPowerGlib` desde JavaScript, o sea que carga el typelib. powerdevil NO: habla D-Bus con `org.freedesktop.UPower`. Apagarla saca de la frontera gobject-introspection, gi-foreign-girs, glib-introspected y py3-setuptools, que sólo viven en la cola de GNOME. ⚠ Y NO SE PROMUEVEN AL CORPUS, aunque era lo primero que intenté. Al mover `libgudev` allá su ArtifactHash CAMBIÓ (7404bc8d → 87ca5e73) y eso no es una mudanza: `glib` existe en las DOS colas y son recetas distintas, así que desde `incoming-gnome/` se construye contra la glib de GNOME y desde el corpus contra la del corpus. Promoverla habría arrastrado a GNOME a la glib del corpus — el cuadro de las «dos glib» que este repo ya pagó caro. Revertido y verificado que vuelve al hash de antes (7404bc8d), o sea GNOME intacto. Se COPIAN a la cola de KDE. `udev-pc` sí comparte artefacto (sus deps son sólo pkgconf ⇒ mismo hash desde las dos colas, un solo directorio en el store). `libgudev` es otro a propósito, por la glib. VERIFICADO sobre el artefacto sellado, no supuesto: trae `usr/libexec/upowerd`, el `org.freedesktop.UPower.service` de system-services y su política en `system.d` — que es exactamente lo que powerdevil necesita para que el demonio arranque por activación D-Bus. El perfil pasa a 49 raíces, 301/301 listo, deuda 0. Queda el segundo hueco: KDE no tiene backend de portal (ni `xdg-desktop-portal` en su cola), o sea que no hay compartir pantalla — y en particular la captura de obs-studio, que la imagen ya trae, no tiene con quién hablar en Plasma. Eso es más caro: pide traer el portal a la cola y ESCRIBIR `xdg-desktop-portal-kde`, que no existe como receta en ninguna cola. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LCt3ettR4Z7b6wPCBmbvEV
75 lines
4.4 KiB
TOML
75 lines
4.4 KiB
TOML
# ⚠ VARIANTE PARA LA COLA KDE (2026-09-09) — el original está en `incoming-gnome/`.
|
|
#
|
|
# POR QUÉ EXISTE. La imagen de KDE declara `powerdevil` pero NO traía upower, y powerdevil es quien
|
|
# habla con él para la BATERÍA y los perfiles de energía. Medido el 2026-09-09: `upower` no está en
|
|
# la cola de KDE ni en el corpus, así que en un portátil la imagen quedaba sin indicador de batería
|
|
# —y sin que nada fallara al arrancar, que es el modo de fallo caro—. Las colas no se ven entre sí
|
|
# (HERMANO→corpus, nunca de reojo a otra cola), de ahí la copia.
|
|
#
|
|
# ⚠ Y LA DIFERENCIA CON LA DE GNOME NO ES COSMÉTICA: `-Dintrospection=disabled`.
|
|
# GNOME la necesita ENCENDIDA porque su shell hace `imports.gi.UPowerGlib` desde JavaScript — o sea
|
|
# que carga el typelib. **powerdevil no**: habla D-Bus con `org.freedesktop.UPower`, que es la
|
|
# interfaz de red del demonio y no tiene nada que ver con la introspección.
|
|
# Apagarla saca CUATRO recetas de la frontera —gobject-introspection, gi-foreign-girs,
|
|
# glib-introspected y py3-setuptools— que sólo viven en la cola de GNOME y habría que copiar acá.
|
|
# Es la diferencia entre 3 recetas y 7.
|
|
# upower 1.90.10 — el servicio de energía (batería, carga, suspensión por batería crítica) y su
|
|
# librería cliente `libupower-glib`, de donde sale el typelib `UPowerGlib-1.0`.
|
|
#
|
|
# POR QUÉ ENTRA: gnome-shell lo importa desde JavaScript sin condicional
|
|
# (`js/misc/dependencies.js`: `import 'gi://UPowerGlib?version=1.0'`). O sea que **es dep de RUNTIME
|
|
# del shell** aunque no aparezca en su meson.build — el indicador de batería del panel se apoya en
|
|
# esto. Se destapó arrancando la sesión, no compilando.
|
|
#
|
|
# FUENTE: el archivo de gitlab.freedesktop.org y no `upower.freedesktop.org/releases/`, que hoy sirve
|
|
# un índice generado por `tree` sin los tarballs de la serie 1.90. Es el mismo patrón que ya usan
|
|
# cairo, libdrm, libinput, pixman y modemmanager en este repo.
|
|
#
|
|
# LAS TRES PERILLAS QUE HAY QUE FIJAR A MANO, y las tres por el mismo motivo — el `auto` de upower
|
|
# significa «preguntale a un pkg-config de systemd», que acá no existe:
|
|
#
|
|
# -Dudevrulesdir / -Dudevhwdbdir: con `auto` hace `udev_dep.get_variable(pkgconfig: 'udev_dir')`
|
|
# (meson.build:97 y :103). Nuestro `udev-pc` declara la variable **`udevdir`**, no `udev_dir` —
|
|
# el nombre con guión bajo es de systemd-udev; el sin guión es el histórico de eudev, que es el que
|
|
# copiamos. En vez de tocar `udev-pc` (que arrastraría a libudev-zero y sus 51 dependientes) se
|
|
# fijan los dos directorios acá, que es lo que la opción existe para permitir.
|
|
#
|
|
# -Dsystemdsystemunitdir=no: con la cadena vacía hace `dependency('systemd')` DURA
|
|
# (meson.build:120-122). El valor `no` está contemplado por upstream y saltea la instalación de la
|
|
# unit (src/meson.build:107). Acá PID1 es arje-zero.
|
|
#
|
|
# -Dintrospection=enabled es el punto de todo esto. `-Didevice=disabled` saca libimobiledevice (el
|
|
# soporte de batería de iPhone), que no está en el corpus. `-Dpolkit=enabled` porque polkit YA está
|
|
# sellada y es lo que decide quién puede suspender.
|
|
#
|
|
# ISLA DINÁMICA: el typelib nombra `libupower-glib.so.3` y gjs la dlopea.
|
|
name = "upower"
|
|
version = "1.90.10"
|
|
license = "GPL-2.0-or-later"
|
|
|
|
[source]
|
|
tarball = "https://gitlab.freedesktop.org/upower/upower/-/archive/v1.90.10/upower-v1.90.10.tar.gz"
|
|
sha256 = "7fcd51bece2526dbee5170feb3ffd1adab5b0cd023575f1fd119d969b73f4b90"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
|
|
[build.phases]
|
|
configure = '''
|
|
set -e
|
|
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output \
|
|
--prefix=/usr --buildtype=release --wrap-mode=nodownload \
|
|
-Ddefault_library=both -Dos_backend=linux -Dintrospection=disabled \
|
|
-Didevice=disabled -Dpolkit=enabled -Dman=false -Dgtk-doc=false \
|
|
-Dudevrulesdir=/usr/lib/udev/rules.d -Dudevhwdbdir=/usr/lib/udev/hwdb.d \
|
|
-Dsystemdsystemunitdir=no -Dc_args=-Wno-error=date-time
|
|
'''
|
|
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
|
|
install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
|
|
|
|
[deps]
|
|
# Sin las cuatro de introspección: las saca `-Dintrospection=disabled` (ver cabecera).
|
|
build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "libgudev", "udev-pc", "libudev-zero", "polkit", "libffi", "pcre2", "zlib-shared", "expat", "dbus-shared"]
|