https://bugs.kde.org/show_bug.cgi?id=526302
Bug ID: 526302
Summary: 注销时若未关闭firefox会导致下次登录时显示错误弹窗
Classification: I don't know
Product: kde
Version First unspecified
Reported In:
Platform: Kubuntu
OS: Linux
Status: REPORTED
Severity: normal
Priority: NOR
Component: general
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
Created attachment 196611
--> https://bugs.kde.org/attachment.cgi?id=196611&action=edit
Crach Log
### 关键加载模块(部分)
| 模块 | 版本 |
|------|------|
| libQt6Core.so.6 | 6.10.2 |
| libQt6Gui.so.6 | 6.10.2 |
| libQt6WaylandClient.so.6 | 6.10.2 |
| libQt6XcbQpa.so.6 | 6.10.2 |
| libkCrash.so.6 | 6.6.6 |
| libKF6Crash.so.6 | 6.22.0 |
| libxcb.so.1 | 1.17.0 |
| libwayland-client.so.0 | 1.23.1 |
(完整模块列表共 90+ 个,详见原始崩溃日志附件)
## 原因分析
### 1. 会话生命周期冲突
注销时 `ksmserver` 开始终止所有客户端进程并释放显示服务器资源。drkonqi 作为 KDE 的崩溃报告工具,在检测到 Firefox
崩溃后尝试启动并创建 GUI 窗口,但此时 X11/Wayland 连接已被会话管理器关闭,导致 Qt 无法创建事件分发器。
### 2. Qt6 致命错误处理
`QGuiApplicationPrivate::createEventDispatcher()` 在无法初始化平台插件时调用
`QMessageLogger::fatal()`,进而触发 `abort()`。这是 Qt
的预期行为,但在会话注销场景下属于不恰当的崩溃处理方式——drkonqi 本应优雅降级而非自毁。
### 3. 注销按钮无响应的连锁反应
首次注销流程被 drkonqi 崩溃中断后,`ksmserver` 可能停留在"正在注销"的中间状态,IPC
通道僵死,导致后续注销请求无法被处理。`plasmashell` 的注销按钮通过 D-Bus 与 ksmserver 通信,当 ksmserver
无响应时按钮表现为"点击无效"。
## 建议修复方向
### 上游(KDE / drkonqi)
1. **会话状态检测**:drkonqi 在启动时应检查当前是否处于会话注销/关机流程中(可通过监听 `org.kde.ksmserver` 的 D-Bus
信号),若是则跳过 GUI 弹窗,仅将崩溃信息写入日志
2. **优雅降级**:当无法创建 GUI 事件分发器时,drkonqi 应回退到非交互式模式(如写入 syslog 或 coredump 目录),而非直接
abort
3. **超时保护**:为 drkonqi 的启动和窗口创建设置超时,超时后自动退出而不阻塞会话管理器
### 下游(Kubuntu / KDE Plasma)
1. **ksmserver 容错**:在注销流程中捕获子进程崩溃,确保即使 drkonqi 异常退出也能继续完成注销
2. **注销按钮状态重置**:当注销流程异常中断时,plasmashell 应能检测到 ksmserver 状态异常并重置按钮可用性
3. **默认禁用注销时的崩溃弹窗**:在 Ubuntu/Kubuntu 打包中考虑将 drkonqi 配置为在检测到会话终止时自动抑制弹窗
## 附件
- 原始崩溃日志:`文本_74q0.txt`
- Core dump
文件:`/var/lib/systemd/coredump/core.drkonqi-coredum.1000.68bb03e1796749ad805c04b028ba5a85.11420.1790480758000000.zst`(766
KB,可按需上传)
--
You are receiving this mail because:
You are watching all bug changes.