cosmic: pop-launcher — el lanzador eran DOS programas, y ahora Super abre
cosmic-launcher sólo dibuja: manda lo tecleado por stdin a un proceso hijo, pop-launcher, que es quien busca. Sin ese binario la ventana no tiene qué mostrar y no se muestra — mismo modo de falla que el panel sin applets: falta un HIJO, no una librería, y el log del padre se lee sano. Vive en otro repo (pop-os/launcher), fuera del pin epoch-N. La versión la fija el Cargo.lock de cosmic-launcher (rev a332a3a7 de la 1.2.7), no el último tag: el lock es lo que garantiza que hablen el mismo protocolo. Tarball por commit, porque no hay tag que nombre esa rev. Selló a la primera, b3:64a5cbaa, con un solo NEEDED: libc.so. Verificado de punta a punta: Super abre el lanzador, «?» lista los seis plugins con su sintaxis (o sea que la enumeración y el IPC JSON-sobre-stdio andan) y «=2+2» LANZA el plugin, que contesta «qalc command is not installed». Esa respuesta es la mejor prueba disponible: el hijo corrió, evaluó y devolvió fila. Falta libqalculate, que es un paquete, no un problema. Cola 27/27, escritorio-cosmic 63/63. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semantic delta
No definition changed: this change is text, documentation or data.
8 files · +117 −11
- docs/evidencia/cosmic-pop-launcher-calc-qemu-2026-08-04.png +— −—
- docs/evidencia/cosmic-pop-launcher-plugins-qemu-2026-08-04.png +— −—
- docs/evidencia/cosmic-super-lanzador-qemu-2026-08-04.png +— −—
- docs/runbooks/cosmic-desktop.md +36 −6
- docs/state/build-state-cosmic.json +7 −5
- docs/state/targets.toml +3 −0
- recipes/incoming-cosmic/pop-launcher.toml +68 −0
- scripts/cosmic/hydrate-cosmic.sh +3 −0
diff --git a/docs/evidencia/cosmic-pop-launcher-calc-qemu-2026-08-04.png b/docs/evidencia/cosmic-pop-launcher-calc-qemu-2026-08-04.png
new file mode 100644
index 00000000..6fbef199
Binary files /dev/null and b/docs/evidencia/cosmic-pop-launcher-calc-qemu-2026-08-04.png differ
diff --git a/docs/evidencia/cosmic-pop-launcher-plugins-qemu-2026-08-04.png b/docs/evidencia/cosmic-pop-launcher-plugins-qemu-2026-08-04.png
new file mode 100644
index 00000000..c6bf5193
Binary files /dev/null and b/docs/evidencia/cosmic-pop-launcher-plugins-qemu-2026-08-04.png differ
diff --git a/docs/evidencia/cosmic-super-lanzador-qemu-2026-08-04.png b/docs/evidencia/cosmic-super-lanzador-qemu-2026-08-04.png
new file mode 100644
index 00000000..80c5816a
Binary files /dev/null and b/docs/evidencia/cosmic-super-lanzador-qemu-2026-08-04.png differ
diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md
index d50b1c29..c315a3ce 100644
--- a/docs/runbooks/cosmic-desktop.md
+++ b/docs/runbooks/cosmic-desktop.md
@@ -106,8 +106,9 @@ Más `cosmic-settings-daemon` y `xdg-desktop-portal-cosmic` fuera de esa lista.
| `cosmic-app-library` | ✅ sellado | `b3:b2a163e7` |
| `cosmic-workspaces-epoch` | ✅ sellado (necesitó `mesa`, ver gotcha 11) | `b3:a031249e` |
| **`cosmic-applets`** (19 binarios en uno) | ✅ **sellado** (necesitó `dbus-shared`, ver gotcha 10) | `b3:3e53a325` |
+| `pop-launcher` 1.2.7 (otro repo, ver abajo) | ✅ sellado a la primera | `b3:64a5cbaa` |
-**La cola está COMPLETA: 26 recetas, `escritorio-cosmic` 62/62.**
+**La cola está COMPLETA: 27 recetas, `escritorio-cosmic` 63/63.**
**El mínimo viable de una sesión son cuatro**: `cosmic-comp` + `cosmic-settings-daemon` +
`cosmic-notifications` + `cosmic-panel` (los tres `.expect` de la tabla de arriba).
@@ -447,10 +448,36 @@ es de qué fichero son, no dónde más aparece esa palabra.*
**Es el riesgo del pin lockstep asomando desde adentro de upstream**: el dato y el parser del *mismo*
epoch no coinciden.
-**`Super` a secas sigue sin abrir nada, y no es un bug nuestro**: liga `System(Launcher)`, y
-`cosmic-launcher` es sólo la interfaz — el motor de búsqueda es **`pop-launcher`**, un binario aparte
-que el catálogo todavía no tiene (`pop-launcher failed to start: No such file or directory`). Los
-atajos andan; lo que falta es el paquete.
+**`Super` abre el lanzador** — pero hizo falta un paquete más, y de otro repo: ver abajo.
+
+### 🔎 `pop-launcher`: el lanzador es DOS programas
+
+`Super` no abría nada y el único rastro era una línea que no menciona ninguna tecla:
+`ERROR pop-launcher failed to start: No such file or directory`. **`cosmic-launcher` es sólo la
+interfaz**: dibuja la lista y manda lo tecleado por stdin a un proceso hijo, `pop-launcher`, que es
+quien busca. Sin ese binario la ventana no tiene qué mostrar, así que no se muestra — el mismo modo
+de falla que el panel sin applets: *lo que falta es un HIJO, no una librería, y el log del padre se
+lee sano.*
+
+Vive en **otro repo** (`pop-os/launcher`), no versiona por `epoch-N` y no entra en el pin lockstep.
+**La versión la fija el `Cargo.lock` de cosmic-launcher** —rev `a332a3a7` de la 1.2.7—, no el último
+tag del repo: el lock es lo que garantiza que hablen el mismo protocolo. El tarball se pide por
+commit (`/archive/<sha>.tar.gz`), porque no hay tag que nombre esa rev. Selló a la primera
+(`b3:64a5cbaa`) con **un solo `NEEDED`: `libc.so`**.
+
+Es otro **multiplexor por symlink**, como cosmic-applets: un binario, y cada plugin es un enlace con
+su nombre dentro de su propio directorio junto al `plugin.ron` que lo describe. El servicio enumera
+`plugins/*/`; si está el `.ron` y falta el enlace —o al revés— el plugin no existe para él, **sin
+error**. Ojo con el `sed 's/_/-/'` de upstream: cambia sólo el primer guión bajo, así que el
+directorio es `desktop_entries` y el ejecutable de adentro `desktop-entries`. Son dos nombres
+distintos a propósito.
+
+Verificado de punta a punta (`cosmic-super-lanzador-`, `cosmic-pop-launcher-plugins-`,
+`cosmic-pop-launcher-calc-qemu-2026-08-04.png`): `Super` abre el lanzador, `?` lista los seis plugins
+con su sintaxis —o sea que la enumeración y el IPC JSON-sobre-stdio andan— y `=2+2` **lanza el
+plugin, que contesta «qalc command is not installed»**. Esa respuesta es la mejor prueba que había
+disponible: el proceso hijo corrió, evaluó la consulta y devolvió una fila. Lo que falta ahora es
+`libqalculate` (el binario `qalc`), que es un paquete, no un problema.
### ⏱ El panel tiene un DEADLINE de arranque: con 4 vCPU sale mutilado
@@ -468,7 +495,10 @@ El número de procesos no distingue «arrancó» de «dibujó». El framebuffer
## Lo que falta, en orden
-1. `xdg-desktop-portal-cosmic` — sin él no hay captura de pantalla, ni file-chooser, ni compartir.
+1. **Aplicaciones.** No hay ni una: los 20 `.desktop` de la imagen son `NoDisplay=true`. El primer
+ candidato barato es `libqalculate` (el binario `qalc`), que es lo único que le falta al plugin de
+ la calculadora para dar un resultado en vez de decir que no está.
+2. `xdg-desktop-portal-cosmic` — sin él no hay captura de pantalla, ni file-chooser, ni compartir.
3. `cosmic-settings` (el panel de control) y `cosmic-files`: la suite tiene aplicaciones y el
catálogo todavía no.
4. `cosmic-greeter` (hoy `cosmic-session` lo lanza y falla con ENOENT, sin consecuencias) y
diff --git a/docs/state/build-state-cosmic.json b/docs/state/build-state-cosmic.json
index 9b2142a6..5b9ddc45 100644
--- a/docs/state/build-state-cosmic.json
+++ b/docs/state/build-state-cosmic.json
@@ -37,9 +37,9 @@
"sealed": 74
},
"escritorio-cosmic": {
- "raices": 18,
- "clausura": 62,
- "sealed": 62
+ "raices": 19,
+ "clausura": 63,
+ "sealed": 63
},
"escritorio-mirada": {
"raices": 14,
@@ -47,7 +47,7 @@
"sealed": 31
}
},
- "sin_perfil": 650,
+ "sin_perfil": 649,
"orphan_deps": [],
"topo_ok": true,
"nodes": {
@@ -10658,7 +10658,9 @@
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
- "perfiles": [],
+ "perfiles": [
+ "escritorio-cosmic"
+ ],
"dependientes_total": 0
},
"popeye": {
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 98c5f915..956f1728 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -101,6 +101,9 @@ paquetes = [
# Los applets del panel. No es un componente que la sesión lance: lo spawnea el PANEL, por AppID,
# y sin ellos arranca y no se dibuja. Un binario multiplexor con veinte symlinks.
"cosmic-applets",
+ # El MOTOR del lanzador, de otro repo y fuera del pin `epoch-N`: `cosmic-launcher` sólo dibuja y
+ # lanza a `pop-launcher` como proceso hijo por PATH. Sin él, `Super` no abre nada.
+ "pop-launcher",
# Datos, no binarios: el tema de iconos (y el hicolor del que hereda), las tablas de xkb y una
# tipografía. Ninguno es dep de build de nadie y sin ellos el escritorio arranca roto — sin puntero,
# sin teclado o con tofu.
diff --git a/recipes/incoming-cosmic/pop-launcher.toml b/recipes/incoming-cosmic/pop-launcher.toml
new file mode 100644
index 00000000..577a480a
--- /dev/null
+++ b/recipes/incoming-cosmic/pop-launcher.toml
@@ -0,0 +1,68 @@
+# pop-launcher — el MOTOR del lanzador. No es de la suite COSMIC y por eso casi se pasa por alto.
+#
+# ── POR QUÉ APARECE RECIÉN AHORA ────────────────────────────────────────────────────────────────
+# `cosmic-launcher` selló, arranca, se registra en el bus… y `Super` no abre nada. La razón está en
+# una línea del serial que no menciona ninguna tecla:
+# ERROR pop-launcher failed to start: No such file or directory (os error 2)
+# `cosmic-launcher` es **sólo la interfaz**: dibuja la lista y manda lo que tecleás por stdin a un
+# proceso hijo, `pop-launcher`, que es quien busca. Sin ese binario la ventana no tiene nada que
+# mostrar, así que no se muestra. Mismo modo de falla que el panel sin applets: **el componente que
+# falta es un HIJO, no una librería**, y el log del padre se lee sano.
+#
+# Vive en OTRO repo (`pop-os/launcher`), no versiona por `epoch-N` y no entra en el pin lockstep de
+# la suite: la versión la fija el `Cargo.lock` de cosmic-launcher, que pinea la rev exacta
+# `a332a3a7` de la 1.2.7. Ese lock es la fuente de verdad — no el último tag del repo, que podría
+# hablar otro protocolo con la interfaz que ya tenemos sellada.
+name = "pop-launcher"
+version = "1.2.7"
+
+[source]
+# Tarball por COMMIT, no por tag: la rev sale del Cargo.lock de cosmic-launcher y no hay tag que la
+# nombre. GitHub sirve `/archive/<sha>.tar.gz` igual que los de tag, y el sha256 de abajo lo ancla.
+tarball = "https://github.com/pop-os/launcher/archive/a332a3a73316a3595816dd02fe426a1d3543167a.tar.gz"
+sha256 = "adff78338a1680d9efa068741f6a95458b21e8278d96f4903f06004fda8ad7c6"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+# DINÁMICO, por la misma razón que todo cliente de la suite: el plugin `cosmic_toplevel` entra con
+# `cctk`/`sctk`, que traen `wayland-client` con la feature `dlopen`. Un musl estático no la honra.
+link = "dynamic"
+# El binario se llama `pop-launcher-bin` (paquete `bin/` del workspace) y se INSTALA como
+# `pop-launcher`. Los tres nombres —paquete, binario compilado, binario instalado— no coinciden, y el
+# que importa para que la interfaz lo encuentre es el último. `-p` además de `--bin` porque el
+# workspace tiene cuatro miembros y `cargo rustc` exige un único target cuando hay flags tras `--`.
+flags = ["-p", "pop-launcher-bin", "--bin", "pop-launcher-bin"]
+
+[build.phases]
+# El `just install` traducido, con `rootdir=/` (o sea `/usr`, no `~/.local`).
+#
+# ⚠ EL DISEÑO ES UN MULTIPLEXOR POR SYMLINK, igual que cosmic-applets: hay UN binario y cada plugin
+# es un enlace con su nombre dentro de su propio directorio, junto al `plugin.ron` que lo describe.
+# El servicio enumera `plugins/*/` y ejecuta el enlace; si el `.ron` está y el enlace no —o al revés—
+# el plugin simplemente no existe para él, sin error. Por eso van los dos, y por eso el bucle no se
+# puede "simplificar" a copiar los .ron sueltos.
+#
+# El `sed 's/_/-/'` de upstream cambia SÓLO el primer guión bajo, y así queda: `desktop_entries` es
+# el directorio y `desktop-entries` el ejecutable de adentro. No es un descuido: son dos nombres
+# distintos a propósito.
+install = '''
+mkdir -p /out/usr/bin /out/usr/lib/pop-launcher/plugins /out/usr/lib/pop-launcher/scripts
+cp target/release/pop-launcher-bin /out/usr/bin/pop-launcher
+chmod 755 /out/usr/bin/pop-launcher
+for p in calc desktop_entries files find pop_shell pulse recent scripts terminal web cosmic_toplevel; do
+ mkdir -p /out/usr/lib/pop-launcher/plugins/$p
+ cp plugins/src/$p/*.ron /out/usr/lib/pop-launcher/plugins/$p/
+ ln -sf /usr/bin/pop-launcher "/out/usr/lib/pop-launcher/plugins/$p/$(echo $p | sed 's/_/-/')"
+done
+cp -r scripts/. /out/usr/lib/pop-launcher/scripts/ 2>/dev/null || true
+'''
+
+[deps]
+# El juego fijo de todo cliente de la suite. `sctk`/`cctk` (plugin cosmic_toplevel) enlazan
+# xkbcommon; udev/input llegan por la misma cadena. NO hace falta openssl: `reqwest` entra con
+# `default-features = false` y `rustls-tls`, o sea TLS en Rust puro — al revés que
+# cosmic-settings-daemon, que sí lo arrastra por native-tls.
+# Tampoco hace falta pulseaudio pese al plugin `pulse`: habla con el servidor por su protocolo, no
+# por libpulse.
+build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"]
diff --git a/scripts/cosmic/hydrate-cosmic.sh b/scripts/cosmic/hydrate-cosmic.sh
index 06d2bece..377530a2 100755
--- a/scripts/cosmic/hydrate-cosmic.sh
+++ b/scripts/cosmic/hydrate-cosmic.sh
@@ -49,6 +49,9 @@ else
# Los tres que esos botones abren al hacer clic. No matan la sesión si faltan (el botón queda
# muerto), pero un escritorio sin lanzador ni biblioteca de apps no se puede usar.
recipes/incoming-cosmic/cosmic-launcher.toml
+ # …y su MOTOR, que es otro binario y de otro repo: cosmic-launcher sólo dibuja, `pop-launcher`
+ # busca. Lo lanza como proceso hijo por PATH, así que —otra vez— ningún grafo de deps lo ve.
+ recipes/incoming-cosmic/pop-launcher.toml
recipes/incoming-cosmic/cosmic-app-library.toml
recipes/incoming-cosmic/cosmic-workspaces-epoch.toml
# Ni binario ni librería: DATOS. El tema de iconos de COSMIC — sin él el escritorio no se ve