Skip to content

feat(linux): hacer funcional el escritorio y widget nativos #107

Open

Description

@egdev6

Objetivo y motivo

Ofrecer una experiencia de escritorio Linux utilizable dentro de la matriz aprobada en #105, no inferir paridad por compilar Tauri.

Alcance

  • Bandeja, widget y paneles: visibilidad, clic, foco, transparencia, anclaje a bordes, multimonitor y escala; comprobar comportamiento real del compositor.
  • Notificaciones, atajos globales y arranque al iniciar sesión con política de permisos/soporte definida para la matriz X11/Wayland.
  • Ajustes y estados de error en Linux sin textos ni rutas Windows engañosos; coordinar traducciones propias con #66.
  • Excluye prometer soporte universal Wayland/compositores, nuevos efectos/audio, rediseño UI, alterar Windows/macOS y distribución pública.

Dependencias

#105 integrado y matriz/contrato de escritorio aprobados. Independiente técnicamente de #106 tras #105; coordinar superficies compartidas.

Criterios de aceptación

  • Bandeja, widget y paneles accesibles, correctamente posicionados y recuperables en la sesión gráfica seleccionada, incluida segunda pantalla/escala cuando pertenezcan a la matriz.
  • Foco, transparencia y cierre/reapertura no dejan ventanas inaccesibles ni interrumpen el escritorio en los casos verificados.
  • Notificaciones, atajos y autostart se verifican o se declaran limitaciones claras por sesión/compositor; fallos no se presentan como activación exitosa.
  • Textos/rutas específicos de Linux no indican Windows; ajustes existentes conservan datos.
  • Tests deterministas de geometría/estado más comprobación visual/funcional real Linux; regresión Windows aplicable.

Orientación

src-tauri/src/lib.rs, src-tauri/tauri.conf.json, src/lib/dock.ts, src/Widget.tsx, src/Settings.tsx; conservar los contratos públicos de configuración y tratar las diferencias del compositor como resultados observados, no supuestos.

Comprobaciones y ODD

Observar widget/bandeja/servicios en la matriz #105 → decidir comportamiento y degradación explícita por compositor → desarrollar por superficies con pruebas RED/GREEN donde proceda → verificar en escritorio real con ventanas, bandeja, multimonitor/escala y permisos, además de npm test, tipos/build, cargo test y regresión Windows pertinentes. Salida: evidencia y límites documentados.

Coordinación y entrega

Planificada y bloqueada por #105. Puede avanzar en paralelo con #106 después de #105. Sin assignee inicial; revalidar issue, PR y responsables antes del inicio explícito. No desplazar el primer objetivo nuevo recomendado #66. Tests/docs junto al código; planificación no autoriza PR/merge/release.

Activity

  1. added this to the Linux portability milestone on Oct 13, 2026
  2. added
    oddTrabajo coordinado mediante planificación ODD aprobada
    on Oct 13, 2026
  3. sosan commented on Oct 17, 2026

    @sosan
    Contributor

    Preparación de PR (sin autoasignación)

    El trabajo de la unidad 2 está preparado en la rama
    sosan:feat-linux-l2-107 (fork privado, ya empujada). La PR se abrirá
    cuando se fusione #114 (#105), según la decisión coordenada de no
    tomar la issue como asignación.

    Alcance: degradación estructurada y explícita por superficie de escritorio
    (estado/nota para X11, GNOME/Mutter, KDE Wayland, Hyprland/WLR y Wayland
    genérico), bloque «Sesión de escritorio» en Ajustes (solo Linux), textos de
    almacén de secretos neutros, docs con límites y diagnóstico; incluye el fix
    del pánico de tao que la parte Linux necesita para arrancar. Sin
    distribución ni updater.

    Evidencia de validación ya ejecutada:

    • cargo test --locked en Linux CI: 171 passed / 0 failed (run 38961455193)
    • npm test 311/311; typecheck y build en verde
    • Bundling completo (deb + AppImage) + verify container con el fix de
      tao aplicado: run 38981116643

    Pendiente para cierre completo: verificación en sesión real (bandeja,
    foco, multimonitor/escala, atajos) y coordinación con el mantenedor sobre
    el orden #114 → #122 → #107.

  4. added a commit that references this issue on Oct 17, 2026
  5. 16 remaining items

  6. sosan commented on Oct 20, 2026

    @sosan
    Contributor

    @egdev6 @Rafaeldelinares,

    Complementando el smoke X11 (Arch/Xvfb), dejo evidencia de la matriz Wayland en CI (ubuntu-latest, runs 39333298554 y 39339723250) en el PR #151 (sosan:wayland-matrix-107, commit e8e4c0d).

    Workflow + doc

    • .github/workflows/w0-wayland.yml (nuevo): 4 jobs que instalan y lanzan compositores Wayland reales headless y capturan env vars + socket.
    • docs/wayland-evidence/W0-WAYLAND-EVIDENCE.md (nuevo): F11 + matriz con resultados.

    Matriz Wayland validada en CI

    Compositor Estado Env capturado
    Weston (Wayland genérico) ✅ VALIDADO wayland-0, XDG_SESSION_TYPE=wayland, weston
    Mutter (GNOME Wayland) ✅ VALIDADO wayland-0, XDG_SESSION_TYPE=wayland, XDG_CURRENT_DESKTOP=GNOME
    KWin (KDE Wayland) ✅ VALIDADO wayland-0, XDG_SESSION_TYPE=wayland, XDG_CURRENT_DESKTOP=KDE
    Hyprland ❌ self-hosted/PPA paquete ausente en ubuntu-24.04

    Los 3 validados corren compositor real headless:

    • Weston: --use-pixman --backend=headless-backend.so → Using Pixman renderer, Output 'headless' enabled, weston-keyboard + weston-desktop-shell lanzados, socket wayland-0.
    • Mutter: mutter --headless --wayland con dbus-run-session en background (fix del session bus) → socket wayland-0, env GNOME.
    • KWin: kwin_wayland --virtual --no-lockscreen (sin --headless, que 5.27 rechaza) → llvmpipe OK, socket wayland-0, env KDE.

    Pendiente

    Hyprland (self-hosted/PPA) y el smoke en sesión real (bandeja visible, atajos, click-through con WM/compositor real) siguen como criterio de cierre de #107.

  7. egdev6 commented on Oct 20, 2026

    @egdev6
    OwnerAuthor

    @egdev6 @Rafaeldelinares — revisé el comentario de @sosan y el PR #151 (e8e4c0d) contra la evidencia real. Veredicto: la contribución es válida y avanza #107, con cuatro ajustes menores antes de considerarla evidencia definitiva.

    Qué se sostiene ✅

    • Workflow y doc presentes en el PR: .github/workflows/w0-wayland.yml + docs/wayland-evidence/W0-WAYLAND-EVIDENCE.md.
    • Los jobs Weston, Mutter y KWin corrieron con éxito en el run iter 2 (39339723250): socket wayland-0 creado, env capturado, artefactos publicados.
    • Los checks del PR en este repo (Windows/Linux/macOS/seguridad) están todos en verde.

    Ajustes solicitados ⚠️

    1. El run citado está en failure, no en éxito. 39339723250 (fork sosan/quorb) falló por el job Hyprland (paquete ausente). Sugiero continue-on-error: true (o skip explícito con aviso) en ese job para que el run de evidencia quede verde y se cite limpio, documentando Hyprland como pendiente self-hosted/PPA.
    2. Los run IDs no son verificables desde egdev6/quorb (404 desde aquí: son runs del fork). Pediría aclararlo en el comentario/doc, o adjuntar los logs/artefactos directamente.
    3. Bug en el workflow (job weston): WESTON_PID se define en un step y se consulta en otro, donde está vacío → kill -0 falla siempre y raw/status.txt siempre dice "weston exited" aunque el compositor esté vivo. La evidencia de "weston alive" es inválida tal como está; basta persistir el PID en un archivo (echo $! > raw/weston.pid) y leerlo en el step siguiente.
    4. Doc desactualizada: el encabezado dice que la matriz completa "requiere self-hosted", pero el workflow ya la ejecuta en ubuntu-latest. Además conviene dejar explícito que XDG_CURRENT_DESKTOP/DESKTOP_SESSION (GNOME/KDE) se fijan manualmente vía GITHUB_ENV como simulación, no porque los emita el compositor.

    Alcance vs. criterios de #107

    Esto es evidencia de entorno (env vars + socket de compositor real), no valida bandeja/widget/atajos/notificaciones en sesión real. El propio comentario lo reconoce como pendiente, en línea con la matriz de #105. Con los 4 ajustes anteriores, considero la parte de matriz Wayland de CI lista para revisión/merge del PR #151.

  8. sosan commented on Oct 20, 2026

    @sosan
    Contributor

    Ajustes aplicados tras tu veredicto en PR #151 (commit 749283a, rama wayland-matrix-107):

    1. Hyprland → continue-on-error: true con comentario explícito: el paquete hyprland no existe en ubuntu-24.04 universe, el job falla en apt install y el run de evidencia queda en success con los 3 jobs validados (weston, Mutter, KWin).
    2. Run IDs aclarados como del fork: 39333298554 y 39339723250 se ejecutaron en sosan/quorb (donde se iteró el workflow antes del PR). Desde egdev6/quorb devuelven 404; en el doc quedó la URL de verificación github.com/sosan/quorb/actions/runs/<id> y la forma de re-ejecutarlos (gh workflow run w0-wayland.yml --repo sosan/quorb).
    3. Bug del PID corregido: echo $! > raw/weston.pid en el step de lanzado y WESTON_PID=$(cat raw/weston.pid 2>/dev/null || echo 0) + kill -0 "$WESTON_PID" en el de captura (persistencia entre steps por archivo, no env var).
    4. Doc actualizada: el encabezado ya no dice que la matriz completa requiere self-hosted (weston/Mutter/KWin corren en ubuntu-latest; solo Hyprland queda self-hosted/PPA) y queda explícito que XDG_CURRENT_DESKTOP/DESKTOP_SESSION (GNOME/KDE) se fijan manualmente vía $GITHUB_ENV como simulación — el compositor headless no los emite; lo que sí emite y captura es el socket Wayland real.

    He lanzado un run de validación del workflow en sosan/quorb (rama wayland-matrix-107) para confirmar los fixes; los 4 ajustes están en el PR #151.

  9. sosan commented on Oct 20, 2026

    @sosan
    Contributor

    Validación en CI real — run 39417560610 (fork sosan/quorb, rama wayland-matrix-107): run general ✅ success.

    Job Resultado
    Wayland (weston) headless ✅ success — raw/status.txt: weston alive (pid 3416) + socket srwxr-xr-x /run/user/1001/wayland-0 (el fix del PID funciona)
    Mutter (GNOME Wayland) ✅ success
    KWin (KDE Wayland) ✅ success
    Hyprland ❌ failure esperado — E: Unable to locate package hyprland en apt install; el run queda en success gracias a continue-on-error: true

    Artefacto w0-wayland-evidence descargado: env.txt con las 4 env vars (WAYLAND_DISPLAY=wayland-0, XDG_SESSION_TYPE=wayland, XDG_CURRENT_DESKTOP=weston, DESKTOP_SESSION=weston) + weston.pid = 3416 (coincide con el status.txt).

    Con esto quedan cubiertos los 4 ajustes del veredicto y la evidencia es reproducible desde el fork.

  10. SrStamm commented on Oct 25, 2026

    @SrStamm
    Contributor

    Dejo constancia de la toma de esta unidad para el smoke en sesión real, tal como
    se pidió para poder cerrar #107.

    Alcance: verificación de escritorio real, sin cambios de código. Ubuntu
    26.04.1 LTS + GNOME Wayland (Mutter), ejecutando main @ 404dca5 con
    npm run app:dev. Cobertura prevista: arranque, posicionamiento del widget,
    bloque «Sesión de escritorio», bandeja, siempre encima, click-through, atajos,
    notificaciones, monitor externo y cierre/reapertura.

    Fuera de alcance: sonido de alertas (requiere personalización con vídeo) y
    autostart XDG (escribe en ~/.config/autostart/), que quedarán declarados como
    no cubiertos.

    Baseline previo en verde: 669 vitest + 225 node + 265 cargo test (1 ignored,
    el smoke de Secret Service), typecheck y build limpios.

    GitHub: SrStamm. Dejo esta unidad sin asignar por ahora: primero reviso el
    cómo corregir cada hallazgo y después retomamos la toma formal si procede.
    Publico la evidencia en un segundo comentario con la tabla de criterios y las
    mediciones.

  11. SrStamm commented on Oct 25, 2026

    @SrStamm
    Contributor

    Evidencia de smoke en sesión real (Ubuntu 26.04.1 + GNOME Wayland, main @ 404dca5)

    Entorno: XDG_SESSION_TYPE=wayland, XDG_CURRENT_DESKTOP=ubuntu:GNOME,
    WebKitGTK 2.52.6 / GTK 3.24.52 / tao 0.37.1, lanzado con npm run app:dev.

    Criterios de aceptación

    Criterio Resultado Evidencia
    Bandeja, widget y paneles accesibles y bien posicionados ⚠️ parcial El widget no se ancla a borde: queda centrado con dockEdge: "right". Bandeja invisible (ver abajo).
    Foco, transparencia, cierre/reapertura sin ventanas inaccesibles ⚠️ parcial Cierre y relanzado limpios (PID 7671 → 16371), config byte-idéntica tras el ciclo. Siempre encima no funciona bajo Mutter.
    Notificaciones, atajos y autostart verificados o limitaciones declaradas ❌ Notificaciones ✅ (confetti visual). Atajos: sin efecto y sin mensaje mientras config.json queda en shortcuts.enabled: true. Autostart no probado.
    Textos/rutas Linux sin textos Windows y ajustes que conservan datos ✅ Sin textos de Windows en todo el recorrido; persistencia verificada por diff del config.json antes/después del ciclo.
    Tests deterministas + comprobación visual real ✅ Esta sesión es la comprobación real; baseline completo en verde antes de arrancar.

    Hallazgos

    1. Sin control de posición bajo Wayland. El widget queda centrado, el
      arrastre no lo mueve y no se puede llevar a una segunda pantalla. Cadena
      verificada: Widget.tsx:831 setPosition() → tao window.rs:472 →
      event_loop.rs:301 window.move_(x, y) → gtk_window_move(), que es no-op
      en Wayland. El origen del arrastre ya venía arreglado en fix(linux): gates de plataforma y cálculo del arrastre en Wayland (#168) #169, pero el lado
      de salida no puede surtir efecto en este backend. Esto contradice la matriz
      de docs/build-linux.md §6, que da Widget: sí para Ubuntu 26.04 Wayland.
    2. Contrapunto X11 de bug(linux/x11): la tira no alcanza el borde inferior de la pantalla al arrastrarla #179: con GDK_BACKEND=x11 el arrastre sí transporta
      la ventana (medido allí: 406×270 px). Misma codebase, mismo archivo de
      arrastre, distinto backend. El fallo se aísla en la vía Wayland.
    3. Bandeja sin host. Quorb crea el indicador, pero la sesión no tiene
      org.kde.StatusNotifierWatcher (verificado por D-Bus) y el aviso recomienda
      instalar una extensión que ya está instalada.
    4. Atajos en silencio. Sin efecto y sin mensaje; la config afirma que están
      activos.
    5. Auto-hide incumplible. Con autoHide: true no hay franja que retraer ni
      forma de quedar por encima, así que la recomendación del propio bloque no se
      cumple en este compositor.
    6. Monitor externo. Probado con una segunda pantalla: no hay selector en
      Settings.tsx y el arrastre tampoco llega.

    Lo que sí quedó verificado

    Arranque sin panic tao#1204 (los dos warnings del log son los documentados como
    benignos en build-linux.md §4). Bloque «Sesión de escritorio»: detecta
    Wayland · ubuntu y lista las siete superficies con estados ok/limited
    coherentes. Click-through no atraviesa, exactamente como lo declara el propio
    aviso («Mutter puede ignorar la región de input»), así que ahí la limitación
    está bien declarada. Notificaciones visuales correctas. Persistencia de
    ajustes correcta.

    Pendiente declarado

    Autostart XDG y sonido de alertas: no probados, con el motivo. Multimonitor solo
    probado en GNOME; KDE y Hyprland fuera de esta ronda.

    Coordinación

    El síntoma de arrastre en Wayland coincide con el punto 4 de #168 y su fix en
    #169 ya está en main; lo que queda es el lado de salida descrito arriba. La
    medición de #179 bajo X11 es la contraparte de este caso. Propongo cerrar esta
    unidad con los hallazgos 1 a 6 documentados en la matriz §6 y abrir dos issues
    de bug separadas (una por clase: posicionamiento y feedback), que enlazo aquí en
    cuanto estén creadas.

  12. SrStamm commented on Oct 25, 2026

    @SrStamm
    Contributor

    Las dos issues de clase creadas a partir de esta evidencia:

    Quedan sin asignar por ahora: primero reviso cómo corregir cada hallazgo y
    después retomamos la toma formal si procede. La matriz §6 de
    docs/build-linux.md habría que actualizarla con lo que diga el mantenedor una
    vez se decida el alcance de cada fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    oddTrabajo coordinado mediante planificación ODD aprobadatype:featureNew functionality

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions