Ubuntu 使用者常遇到「檢測到系統程式錯誤」彈窗,這是 Apport 錯誤收集機制在背景偵測到程式崩潰(如 Segfault)後提示使用者回報。本文解析 Apport 運作原理,提供停用、調優與正確處理流程,徹底解決彈窗干擾。


一、Apport 運作機制
- 核心元件:
apport 服務監聽核心崩潰訊號(SIGSEGV、SIGABRT 等)
- 觸發條件:用戶空間程式異常終止產生 core dump
- 處理流程:收集崩潰資訊 → 寫入
/var/crash/ → 顯示 GUI 提示 → 使用者選擇回報 → 開啟瀏覽器登入 Launchpad 提交 Bug
- 目的:協助開發者收集崩潰堆疊、環境資訊修復 Bug
二、為什麼不建議直接點「回報錯誤」?
- 流程繁瑣:需登入/註冊 Launchpad → 填寫表單 → 提交(4+ 步驟)
- 多為已知 Bug:重複回報無助於修復
- 隱私考量:崩潰報告可能含敏感路徑、環境變數
- 點擊後仍會再次彈出「內部錯誤」對話框

三、解決方案對比
| 方案 | 指令/操作 | 優點 | 缺點 | 推薦度 |
| 暫時停用(當前 session) | sudo service apport stop即時生效、不修改配置 | 重啟後恢復 | ★★☆ |
| 永久停用(推薦桌面用戶) | sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport徹底禁用、升級保持 | 失去自動崩潰收集 | ★★★★★ |
| 僅停用 GUI 彈窗 | gsettings set org.gnome.desktop.interface enable-apport false保留後端收集、無干擾 | 需 GNOME 環境 | ★★★★☆ |
| 調整核心模式保留 core dump | echo 'core' | sudo tee /proc/sys/kernel/core_pattern自行分析 core dump | 需專業知識、佔磁碟 | ★★★ |
| 清理舊崩潰報告 | sudo rm /var/crash/*釋放空間、避免重複提示 | 治標不治本 | ★★☆ |
四、推薦最佳實踐:永久停用 Apport
# 1. 停用服務
sudo systemctl stop apport
sudo systemctl disable apport
# 2. 修改配置檔(防止套件更新重新啟用)
sudo sed -i 's/^enabled=1$/enabled=0/' /etc/default/apport
# 3. 清理現有崩潰報告
sudo rm -f /var/crash/*
# 4. 驗證
cat /etc/default/apport
# 應顯示 enabled=0
五、進階:保留 Apport 但調優行為
1. 僅收集特定套件的崩潰
# 編輯 /etc/apport/crashdb.conf
# 設定只提交特定套件至 Launchpad
2. 自定義崩潰處理腳本
# /etc/apport/crashhook.py
# 可整合發送至內部錯誤追蹤系統(Sentry、Jira、自建 API)
3. 開發者模式:保留 core dump 供除錯
# /etc/security/limits.conf
* soft core unlimited
* hard core unlimited
# /etc/sysctl.d/60-core-pattern.conf
kernel.core_pattern = /var/crash/core.%e.%p.%h.%t
kernel.core_uses_pid = 1
sudo sysctl --system
六、常見誤區澄清
| 誤區 | 事實 |
| 「系統壞了」 | 僅是背景程式崩潰,系統通常正常運作 |
| 「必須回報才能修好」 | 回報僅幫助上游開發者,不影響當前系統 |
| 「停用 Apport 會讓系統不穩定」 | Apport 只是收集器,不參與系統運行 |
| 「這是病毒」 | Apport 是 Ubuntu 官方元件,開源透明 |
七、若需協助上游修復 Bug,正確回報流程
- 確認套件名:
apport-cli -p <套件名> /var/crash/_usr_bin_xxx.1000.crash
- 查看報告內容:
cat /var/crash/_usr_bin_xxx.1000.crash
- 檢查 Launchpad 是否已有相同 Bug:
https://bugs.launchpad.net/ubuntu/+source/<套件名>
- 若無,執行
ubuntu-bug <套件名> 依嚮導提交
- 訂閱 Bug 進度,配合上游測試修復版本
對於多數桌面使用者,永久停用 Apport 是性價比最高的選擇;伺服器環境建議保留後端收集並整合至監控系統,避免 GUI 干擾無頭環境。