目錄表

Ubuntu筆記

隨手紀錄一下使用Ubuntu遇到的問題跟如何應對
……要說是否有解決問題倒不一定……

注意:以下內容都是基於下述相對舊型號的主機規格而寫的,新版的硬體不一定適用文中描述

系統規格

這是目前(2026年08月)使用的主機規格,硬體購置組裝是在2012年12月左右。
2023年底才重灌系統自 Windows10專業版 轉到 Ubuntu 。

作業系統 Ubuntu 22.04.5 LTS
系統類型 64位元
內核版本 Linux 5.15.0-186-generic
GNOME版本1) GNOME Shell 42.9
視窗系統 X11
————— ———————————————————
硬體型號 ASUS All Series
主機板 B85M-G
處理器 Intel® Core™ i5-4570 CPU @ 3.20GHz × 4
記憶體 8GiB DIMM DDR3 Synchronous 1600 MHz
顯示卡 NVIDIA Corporation GK106 [GeForce GTX 660]
硬 碟 120GB INTEL SSDSC2BW12
1TB WDC WD10EZEX-00U

基礎訊息

感覺之後會很長,總之先塞到其它頁面

視窗系統的部分先參考這邊整理

問題說明

由於 NVIDIA GTX 660 使用舊的 Kepler 架構,這使得其與後續針對新的 Maxwell 架構 下開發的 535、550及580 驅動並不相容,而 470 驅動 NVIDIA 官方已於2024年07月停止維護,使得官方驅動無法再針對2022年後推出的 Linux 6.x 內核作調整。

附上可以使用 470 驅動顯示卡的 NVIDIA 官方資料:連結

就算想強制顯示卡使用 535 以後的驅動,硬體也無法識別只會有黑畫面或是根本不載入使用只以內顯運行。

除了驅動程式外,當用到較新視窗系統及系統內核時也會造成奇怪的衝突。這邊遇到的情況如下:

  1. 睡眠喚醒後呈現黑畫面無法操作,
    1. 無法叫出文字界面重啟 gdm3。
    2. 除實體開關外只能透過 MagicSysRq 組合鍵2) 重新啟動。
    3. 因不明原因重新啟動有機會在開機畫面閃爍後再次黑畫面。
    4. 目前經驗上再次重新啟動即可進入系統,但使用指令 journalctl 無法看到對應訊息3)
  2. Google 地圖街景觀看時,CPU 及記憶體使用率飆升致使系統崩潰無回應。
    1. 觀看平面地圖不一定有問題,但觀看街景使用率馬上飆升。
    2. 瀏覽器使用 Firefox 及 Vivaldi 4)有相同情況。
    3. 關閉硬體加速後可以延遲崩潰的時間。

最後總結起來,問題徵節點如下:

  1. Ubuntu 核心動作太快:
    1. 當喚醒電腦時,現代的 Linux 核心(如 5.15+)是用現今硬體的速度在跑。它一發出喚醒訊號,就預期 PCIe 裝置要在幾毫秒(ms)內立刻從 D3cold(完全斷電)恢復到 D0(全速運作)狀態。
    2. GTX 660 動作太慢:GTX 660 是一張 2012 年設計的老顯示卡,電路架構和硬體電容在接收到主機板重新供電的訊號後,硬體晶片本身的「冷啟動與初始化」需要比較長的反應時間。
    3. 判定失敗,直接死鎖:當 Ubuntu 核心發出指令後,在極短的時間內沒有收到 GTX 660 回傳的「我醒來了」訊號,核心就會認為這個 PCIe 裝置已經壞掉或遺失,隨即噴出 D3cold to D0 failed 的錯誤,並直接放棄與這張顯卡的通訊。此時顯示卡雖然風扇在轉,但因為核心已經拒絕與它溝通,螢幕就徹底黑掉,再也點不亮。

解決方案

嘗試列出有使用過的解決方式,並會註明是否有效。

前置作業


欺騙 ACPI(進階組態與電源介面)

嘗試解決黑畫面查看 log 的過程中注意到了「can't change power state from D3cold to D0」這一段,改關閉核心的 PCIe 動態電源控制,避免卡死在 D3cold。

其餘依錯誤訊息總結問題點如下:

  1. B85M 主機板(Haswell 架構,約 2013-2015 年產物)搭配 GTX 660(Kepler 架構)發生 D3cold to D0 錯誤,主因是舊版主機板 BIOS 的 ACPI 規範與新版 Linux 核心衝突。
    1. B85M 誕生時還是 Windows 7 ,當時的主機板 BIOS 根本沒有現代完善的 PCIe 動態深度睡眠(D3cold)規範,但現在的 Linux 核心預設會用 Windows 10/11 的 ACPI 規範去命令硬體。當核心發送現代的深度省電指令,會導致硬體直接在開機初始化時死鎖。
  2. 核心的 Runtime PM(動態電源管理)會強制將沒在運作的 GTX 660 推入 D3cold 深度睡眠,但舊卡硬體無法正確回應喚醒訊號。
  3. NVIDIA 的電源優化服務,這些服務對新卡(RTX 系列)有用,但會直接停死 GTX 660。
  4. 顯示卡音效轉接器死鎖與畫面擁有權衝突:
    1. GTX 660 晶片上自帶的「NVIDIA High Definition Audio Controller」(HDMI/DP 音效輸出)在喚醒時被系統優先載入,佔用了 PCIe 通道。
    2. 當系統喚醒時,Ubuntu 的圖形桌面視窗管理員( GDM )佔據通道,導致 NVIDIA 驅動程式無法接管螢幕的控制權(Modeset Ownership)。結果就是顯示卡雖然醒了,但驅動程式沒辦法把畫面送進螢幕,導致一片漆黑。

下列過程一樣是在 470 版本驅動下執行,由 GRUB 直接對主機板和顯示卡下「禁用 PCIe 動態電源管理」指令。目前觀察下來似乎是解決了睡眠喚醒黑畫面的問題。操作流程如下:


自 NVIDIA 官方網站安裝驅動

由於 Ubuntu 22.04 官方軟體庫似乎移除了支援,無法透過 apt install 指令安裝 470 驅動,故需改用 NVIDIA 官方為 Linux 提供的獨立 NVIDIA-Linux-x86_64-470.256.02.run 安裝檔10),終端機的操作流程如下:

指令最後面可加 2>/dev/null ,這是一個 Linux 的標準錯誤重導向操作
它的功能是:「如果前面這條指令產生了任何錯誤訊息,請直接丟棄並隱藏,不要顯示在畫面上。」
這通常是為了避免腳本被不必要的警告干擾,或是保持終端機畫面乾淨


建立規則鎖定 470 驅動


指定 470 的核心模組,強迫 apt 繞過套件綑綁


切換至 Nouveau 開源驅動


盲操重啟圖形介面

1)
gnome-shell –version
2)
按住 Alt 與 SysRq ,後依序按 R、E、I、S、U、B
3)
大概是因為還沒進入系統無法被紀錄吧?
4)
153.0(64位元)及8.1.4087.61(正式版本)(64 位元)
5)
硬體啟用
6)
明確同步
7)
GNOME 登入管理程式
8)
例如 B85 晶片組
9)
裝置低電源狀態