跳转到内容

平台支持矩阵

功能 Windows 10/11 GNOME 42+ KDE Plasma 5/6 XFCE Hyprland Sway 通用 X11
主题检测 ✅ ✅ ✅ ✅ ⚠️ ⚠️ ⚠️
强调色 ✅ ✅ ⚠️ ⚠️ ❌ ❌ ❌
壁纸 ✅ ✅ ✅ ✅ ✅ ✅ ✅
通知 ✅1 ✅ ✅ ✅ ⚠️ ⚠️ ⚠️
通知图标 ✅ ✅ ✅ ✅ ✅ ✅ ✅
通知按钮 ⚠️2 ✅ ✅ ✅ ✅ ✅ ✅
防休眠锁 ✅ ✅ ✅ ✅ ⚠️ ⚠️ ⚠️
系统托盘 ✅ ✅ ✅ ⚠️ ✅ ✅ ✅
媒体播控 ✅ ✅ ✅ ✅ ✅ ✅ ✅
会话锁屏 ✅ ✅ ✅ ✅ ✅ ✅ ✅
会话注销 ✅ ✅ ✅ ⚠️ ⚠️ ⚠️ ⚠️
睡眠 / 休眠 ✅ ✅ ✅ ✅ ✅ ✅ ✅
重启 / 关机 ✅ ✅ ✅ ✅ ✅ ✅ ✅

✅ 已验证对接真实后端 · ⚠️ 尽力而为,或依赖额外组件 · ❌ 平台无此概念。

表中的符号只是静态提示,运行时的真实答案始终通过 capabilities() / support_level() 获得,不要以本表作为假设依据:

条目 回退行为 上报结果
Hyprland / Sway / X11 上的主题检测 无系统级配色方案;若某个 GTK 应用写入过值则读取 GSettings 全部探测均无结果时返回 Theme::Unknown
平铺 WM / X11 上的通知 org.freedesktop.Notifications 可用,但动作按钮与图片取决于所装守护进程 守护进程过旧时按钮不渲染
平铺 WM / X11 上的防休眠锁 ScreenSaver 服务缺失时调用直接失败 返回 UdaError(连接失败);该模块没有分级上报
XFCE 上的托盘 SNI 通过 AppIndicator 兼容的 watcher 工作,但没有原生双击事件 DoubleClick 上报 SupportLevel::None
use uda_core::capability::SupportLevel;
use uda_core::tray::{TrayFeature, TrayManager};
let manager = uda_platform_linux::LinuxTrayManager::new();
let level = manager.support_level(TrayFeature::DoubleClick);
match level {
SupportLevel::Full => { /* 绘制双击动作 */ }
SupportLevel::Partial(reason) => { warn!("该后端上双击为降级行为:{reason}") }
SupportLevel::None => { /* 隐藏 */ }
}

C 宿主通过 uda_session_capabilities 与各模块的 capabilities() 函数获得同样的信息。

环境 后端
Windows 注册表 AppsUseLightTheme
GNOME Portal org.freedesktop.appearance → gsettings color-scheme
KDE kreadconfig6/5 读 Colors:Scheme
XFCE xfconf-query -c xsettings
Wayland 平铺 WM ⚠️ 无法可靠判定,返回 UNKNOWN

壁纸后端不使用 XDG Desktop Portal:org.freedesktop.portal.Wallpaper 存在但未被调用。

环境 实现
GNOME gsettings CLI,成对写入 picture-uri 与 picture-uri-dark
KDE D-Bus org.kde.plasmashell → /PlasmaShell → evaluateScript
Hyprland CLI hyprpaper,缺失时回退 swww
Sway CLI swww
通用 X11 CLI feh,缺失时回退 nitrogen
Windows SystemParametersInfoW(SPI_SETDESKWALLPAPER)
环境 后端 图标 按钮
任意 Linux DE org.freedesktop.Notifications ✅ ✅
Windows WinRT ToastNotificationManager ✅ ⚠️2

Wayland 平铺 WM 需要通知守护进程在跑(mako、swaync、dunst 等),否则 Notify 调用报 ServiceUnknown。

环境 后端 备注
Linux org.kde.StatusNotifierItem + com.canonical.dbusmenu GNOME 需 AppIndicator 扩展
Windows Shell_NotifyIconW(NOTIFYICON_VERSION_4) 专用工作线程 + 消息泵
环境 后端
Linux MPRIS v2 over session D-Bus
Windows WinRT SMTC
动作 Linux Windows
锁屏 ScreenSaver Lock → loginctl lock-session LockWorkStation()
注销 GNOME/KDE D-Bus 方法 ExitWindowsEx(EWX_LOGOFF)
睡眠/休眠 logind Suspend/Hibernate SetSuspendState
重启/关机 logind Reboot/PowerOff ExitWindowsEx + SeShutdownPrivilege

Linux 侧注销依赖具体 DE 提供 D-Bus 方法;未识别的桌面环境下该动作能力位为假。

SupportLevel 只有三态:Full、Partial(reason)、None。Partial 必须携带原因字符串——调用方要把降级原因展示给用户时,无需再猜“为什么”。

功能 × 环境 级别 原因
主题检测 × Wayland 平铺 Partial 无标准查询途径;所有探测手段均无结果
强调色 × KDE/XFCE None 无系统级强调色
通知按钮 × Windows 未打包 Partial 需 MSIX 注册 COM 激活器
托盘 × XFCE None SNI 无双击事件,该特性未被上报
防休眠 × Wayland 平铺 None ScreenSaver 服务缺失时调用直接失败,无 CLI 回退
环境 最低版本
Windows 10(toast 功能在 10/11 上完整)
GNOME 42
KDE Plasma 5
XFCE 4.14+
Rust 1.70
Python 3.9
Node.js 16

全局快捷键、带变更监听的多格式剪贴板、音频端点路由与显示器亮度正在开发中,见 plans/phase3_plan.md。

  1. 商店安装的运行时(商店版 Python/Node.js)会把通知来源显示为宿主包族名,见 docs/internals/notification_specs.md §3.1。 ↩

  2. 未打包宿主中动作按钮降级为只读文本,见 §3.2。 ↩ ↩2