Skip to content

jgomezbau/O365LinuxDesktop

Repository files navigation

O365 Linux Desktop

Aplicación de escritorio basada en Electron para trabajar con Microsoft 365 desde Linux con una interfaz de pestañas propia, integración con bandeja del sistema y soporte para abrir documentos y aplicaciones de Microsoft 365 sin depender de un navegador tradicional.

Versión actual: 2.7.3

Resumen

O365 Linux Desktop abre Microsoft 365 dentro de una ventana nativa con una barra de pestañas personalizada. La aplicación está orientada principalmente a Linux y en la configuración actual de desarrollo usa X11 por defecto, con una opción explícita para probar Wayland.

El proyecto incluye:

  • una pestaña principal fija para Microsoft 365
  • apertura de documentos y aplicaciones en pestañas internas
  • desacople de pestañas a ventanas separadas
  • menú de bandeja con accesos rápidos y favoritos
  • modales flotantes para configuración, lanzador de aplicaciones y tarjeta contextual de pestaña
  • arquitectura modular inicial con bootstrap limpio, servicios separados y worker para integración nativa Linux

Funcionalidades actuales

Navegación y pestañas

  • Barra de pestañas personalizada con una pestaña principal fija (M365 Copilot).
  • Creación de nuevas pestañas desde el botón +.
  • Cambio, recarga y cierre de pestañas.
  • Reordenamiento de pestañas mediante drag and drop.
  • Desacople de pestañas a una ventana separada:
    • desde la tarjeta de información de pestaña
    • o arrastrando una pestaña fuera de la barra
  • Reacople de pestañas desacopladas al arrastrar la ventana separada de vuelta sobre la zona superior de la ventana principal, conservando el contenido vivo de la pestaña.
  • Sistema de overflow horizontal para pestañas con navegación por flechas cuando no entran todas en pantalla.
  • La pestaña activa se mantiene visible dentro de la ventana de overflow.

Integración con Microsoft 365

  • Apertura interna de enlaces y documentos de Microsoft 365, Office, OneDrive, SharePoint, Outlook, Teams y OneNote.
  • Normalización de URLs de lanzamiento para aplicaciones de Microsoft 365.
  • Manejo de popups internos para flujos de Outlook y otras ventanas necesarias.
  • Apertura de enlaces externos en el navegador del sistema cuando no corresponden al dominio/flujo interno.

Tarjeta de información de pestaña

  • Tarjeta contextual flotante al pasar el mouse sobre una pestaña.
  • Muestra icono, título, servicio, ubicación y dato de “Última vez guardado”.
  • Para documentos Word, Excel y PowerPoint abiertos desde OneDrive o SharePoint, la tarjeta intenta leer metadata real de Microsoft 365 desde _wopiContextJson.
  • Cuando Microsoft 365 expone metadata WOPI, la tarjeta usa:
    • nombre real del archivo
    • carpeta padre desde ParentFolderFullUrl
    • última modificación desde LastModified
  • La ubicación cloud se muestra como breadcrumb (OneDrive > Carpeta > Subcarpeta) y los niveles con URL confiable se pueden abrir en una pestaña nueva.
  • Para OneDrive personal y OneDrive empresarial sobre SharePoint se generan URLs de carpeta compatibles con los patrones de navegación web de Microsoft 365.
  • Si Microsoft 365 no expone una fecha real de modificación, la tarjeta muestra No disponible de forma explícita.
  • Permite:
    • marcar o desmarcar favoritos
    • desacoplar la pestaña a una ventana
  • La pestaña principal no muestra esta tarjeta.

Favoritos y bandeja del sistema

  • Los favoritos se guardan de forma persistente.
  • El menú de bandeja incluye:
    • mostrar/ocultar la ventana principal
    • recargar la aplicación
    • submenú Favoritos
    • submenú Aplicaciones
    • salir
  • Los favoritos del tray se agrupan por tipo usando iconos y separadores entre grupos no vacíos.
  • El submenú Aplicaciones muestra el icono de cada aplicación y abre accesos directos a:
    • Word
    • Excel
    • PowerPoint
    • Outlook
    • OneDrive
    • Teams
    • OneNote

Configuración y estado persistente

  • Modal flotante de configuración.
  • Panel Acerca de desde configuración con logo, versión de la aplicación y versiones de Electron, Chromium y Node.js.
  • Configuración persistente para:
    • URL principal: define la página que se abrirá al iniciar la aplicación y la que se usará para crear o recrear la pestaña principal.
    • User-Agent personalizado: permite cambiar cómo se identifica la aplicación ante los sitios web; no cambia la URL cargada. Si se deja vacío, la aplicación usa por defecto un User-Agent de Firefox en Linux. Ejemplos útiles: Firefox (predeterminado actual): Mozilla/5.0 (X11; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0 Chrome en Linux: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edge en Linux: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0
    • tema (system, light, dark)
    • reapertura de pestañas/documentos al iniciar
  • Restauración opcional de pestañas al arrancar.
  • Persistencia del tamaño, posición y estado maximizado de la ventana principal.
  • Validación de bounds para evitar reabrir la ventana fuera de pantalla en cambios de monitor.

Interacción del sistema

  • Soporte de permisos para:
    • cámara y micrófono
    • notificaciones
    • portapapeles
    • fullscreen
  • Soporte para getDisplayMedia / compartir pantalla mediante desktopCapturer.
  • Atajos de portapapeles manejados también a nivel de vista:
    • Ctrl+C, Ctrl+V
    • Shift+Insert
    • Shift+Delete
  • Diagnóstico manual de pestaña activa con Ctrl+Shift+D, que exporta un JSON local con información del DOM, scripts, recursos y estado visible de la pestaña para análisis de compatibilidad. El volcado solo se genera al invocar explícitamente el atajo o la API de diagnóstico desde DevTools.
  • Registro del protocolo personalizado ms365://.
  • Bloqueo de múltiples instancias con recuperación de foco en la ventana existente.
  • La aplicación no se registra como manejador de archivos locales de Dolphin; los documentos locales deben abrirse con una app nativa o desde los flujos web de Microsoft 365.

Menú contextual y apertura con aplicaciones nativas

  • Menú contextual personalizado dentro de las vistas web.
  • Para enlaces a documentos compatibles, el menú contextual puede ofrecer apertura con aplicaciones nativas detectadas en Linux.
  • La detección de aplicaciones, descargas y apertura externa se encapsulan detrás de nativeAppService y un worker dedicado basado en worker_threads.
  • Para imágenes se ofrecen acciones como copiar y guardar.
  • En desarrollo, también se expone inspección de elementos desde el menú contextual.

Arquitectura y mantenibilidad

  • main.js es un bootstrap mínimo que carga src/main/index.js.
  • Las constantes, rutas, logging, navegación, favoritos, tray, IPC, persistencia de pestañas, integración nativa, ventanas auxiliares y workers viven en módulos dedicados bajo src/main/.
  • El documento src/ARCHITECTURE.md describe la estructura modular, responsabilidades y el contrato del worker.
  • El proyecto mantiene CommonJS para alinearse con el código existente y reducir riesgo durante la migración.
  • La carpeta heredada src/utils/ se eliminó: las reglas de URL viven en src/main/navigation/ y la integración nativa vive en src/main/native/ + src/main/workers/.

Plataforma objetivo

Soportada en la configuración actual

  • Linux
  • Entornos X11 como ruta estable recomendada
  • Wayland como ruta de prueba explícita en desarrollo

Notas importantes

  • npm start y npm run start:x11 fuerzan X11.
  • npm run start:wayland permite probar la aplicación en Wayland.
  • La configuración de empaquetado actual genera artefactos Linux:
    • AppImage
    • deb
    • tar.gz
  • Los artefactos Linux empaquetados fuerzan X11 para evitar incompatibilidades con las ventanas auxiliares flotantes.
  • Aunque parte del código es portable por Electron, este repositorio está preparado y documentado actualmente como objetivo Linux.

Requisitos

  • Node.js 18 o superior
  • npm 8 o superior
  • Linux moderno con entorno gráfico compatible con Electron

Desarrollo

Instalar dependencias

npm install

Ejecutar la aplicación

npm start

Esto ejecuta:

electron . --enable-features=UseOzonePlatform --ozone-platform=x11

Scripts disponibles

npm start
npm run start:x11
npm run start:wayland
npm run build
npm run build:linux
npm run build:appimage
npm run build:deb

Tests y CI

npm test

El test local valida JSON, sintaxis de los archivos JavaScript y consistencia entre package.json, package-lock.json, README y CHANGELOG.

GitHub Actions ejecuta CI en cada push y pull request:

  • instala dependencias con npm ci
  • ejecuta npm test
  • valida el empaquetado Linux con npm run build:dir

Para hacer un commit y que se ejecuten los test

npm test git status git diff --stat git add . git commit -m "Release 2.7.3" git push origin V2.7.3

Empaquetado

La configuración de electron-builder actual genera builds Linux con estos formatos:

  • AppImage
  • deb
  • tar.gz

Los artefactos se escriben en dist/.

Publicación automática

Al subir un tag con formato Vx.y.z o vx.y.z, GitHub Actions ejecuta tests, genera los artefactos Linux y publica una Release en GitHub.

Ejemplo:

git tag V2.7.3
git push origin V2.7.3

Estructura principal del proyecto

O365LinuxDesktop/
├── main.js
├── package.json
├── icons/
├── src/
│   ├── ARCHITECTURE.md
│   ├── assets/
│   │   └── icons/
│   ├── config/
│   │   └── configManager.js
│   ├── main/
│   │   ├── app/
│   │   ├── favorites/
│   │   ├── ipc/
│   │   ├── logging/
│   │   ├── native/
│   │   ├── navigation/
│   │   ├── tabs/
│   │   ├── tray/
│   │   ├── windows/
│   │   ├── workers/
│   │   ├── index.js
│   │   ├── appSession.js
│   │   ├── floatingModal.js
│   │   └── windowState.js
│   ├── preload/
│   │   ├── main-preload.js
│   │   └── modal-preload.js
│   ├── ui/
│   │   ├── main-window/
│   │   │   ├── index.html
│   │   │   └── renderer.js
│   │   ├── modal/
│   │   │   ├── index.html
│   │   │   ├── modal.css
│   │   │   └── modal.js
│   │   └── shared/
│   │       └── styles.css
└── dist/

Configuración persistente

La aplicación almacena configuración y estado mediante electron-store, incluyendo:

  • preferencias de tema
  • URL principal: página de arranque y referencia para la pestaña principal
  • User-Agent: identificador del navegador que la app envía a los sitios web; si no se personaliza, actualmente se usa Firefox en Linux por defecto
  • favoritos
  • pestañas restaurables
  • estado y bounds de ventana

Limitaciones y alcance actual

  • La documentación y el empaquetado están orientados a Linux.
  • La restauración de pestañas depende de URLs restaurables; si un documento ya no está disponible, la aplicación lo omite en sesiones posteriores.
  • La información mostrada en la tarjeta de pestaña se infiere desde título, URL y metadatos disponibles; no todas las fuentes exponen la misma calidad de datos.
  • La detección de aplicaciones nativas para “Abrir con…” está orientada a Linux.
  • Los documentos Office locales (.docx, .xlsx, .pptx, etc.) no se abren directamente desde Dolphin dentro de la app web; deben estar disponibles en OneDrive/SharePoint o abrirse con una aplicación nativa.
  • La migración modular es incremental: el siguiente bloque grande pendiente es extraer tabManager, creación de WebContentsView y navegación por pestaña desde src/main/index.js.

Licencia

MIT

Aviso

Este proyecto no está afiliado oficialmente con Microsoft. Microsoft 365, Office 365, OneDrive, Outlook, Teams, Word, Excel, PowerPoint y OneNote son marcas de sus respectivos propietarios.

About

Electron-based Microsoft 365 desktop wrapper for Linux with native integration and multi-tab support.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors