Featured image of post Windows 11 26H2 睡眠後藍牙鍵盤無法自動重連

Windows 11 26H2 睡眠後藍牙鍵盤無法自動重連

Windows 11 26H2 睡眠醒來後,藍牙鍵盤若無法自動重連,多半是藍牙接收器被電源管理關掉。關閉接收器節電與 USB 選擇性暫停,重開機後即可恢復。

最後更新
約 1395 字

Windows 11 26H2 睡眠之後,藍牙鍵盤有時不會自己連回來。畫面已經醒了,鍵盤卻要重新配對,或先關掉藍牙再開一次才會動。滑鼠若走同一顆接收器,也可能一起斷掉。

原因通常不是鍵盤壞了。Windows 在睡眠時會把 USB 藍牙接收器掛起省電,醒來後這條連線沒有被拉回來。把接收器的節電關掉,並停用目前電源配置的 USB 選擇性暫停,重開機後再睡一次,鍵盤就能自動重連。

做法不綁廠牌,也不綁某一支鍵盤。Intel、Realtek 或其他 USB 藍牙接收器都用同一組步驟:先找出正在使用的接收器,再只改那顆接收器。

什麼情況適用

適用:Windows 11 26H2,周邊是藍牙鍵盤或藍牙滑鼠,睡眠醒來後裝置還在,但不會自動重連。

不適用:裝置在裝置管理員裡消失、驅動報錯,或從來沒有配對成功。那種要先處理驅動或重新配對,不是這篇的節電設定。

處理順序

  1. 用系統管理員 PowerShell 找出狀態為 OK、執行個體路徑以 USB\ 開頭的藍牙接收器。
  2. 把該接收器的 PnPCapabilities 設為 24。這會取消「允許電腦關閉這個裝置以節省電源」。
  3. 把接收器的選擇性暫停與加強電源管理設為 0。
  4. 把目前電源配置的 USB 選擇性暫停,AC 與 DC 都設為停用。
  5. 重開機,進入睡眠再醒來,確認鍵盤會自己連上。

找出 USB 藍牙接收器

以系統管理員開啟 PowerShell。正在使用的接收器,Status 是 OK,InstanceId 以 USB\ 開頭。

1
2
3
4
$radio = Get-PnpDevice -Class Bluetooth |
  Where-Object { $_.Status -eq 'OK' -and $_.InstanceId -like 'USB\*' } |
  Select-Object -First 1
$radio | Select-Object FriendlyName, InstanceId

電腦上若有兩顆以上的接收器,拿掉 -First 1,改指定實際在用的那一個 InstanceId。後面的 $radio 必須是這個物件,否則會寫到錯誤的登錄機碼。

關閉藍牙接收器的節電

PnPCapabilities = 24(十六進位 0x18)對應裝置管理員裡那一格「允許電腦關閉這個裝置以節省電源」。設成 24 就是取消勾選。

1
2
3
4
5
6
7
8
$enum = "HKLM:\SYSTEM\CurrentControlSet\Enum\$($radio.InstanceId)"
New-ItemProperty -Path $enum -Name PnPCapabilities -PropertyType DWord -Value 24 -Force

$dp = Join-Path $enum 'Device Parameters'
New-ItemProperty -Path $dp -Name SelectiveSuspendEnabled -PropertyType DWord -Value 0 -Force
New-ItemProperty -Path $dp -Name EnhancedPowerManagementEnabled -PropertyType DWord -Value 0 -Force
New-ItemProperty -Path $dp -Name AllowIdleIrpInD3 -PropertyType DWord -Value 0 -Force
New-ItemProperty -Path $dp -Name DeviceSelectiveSuspended -PropertyType DWord -Value 0 -Force

四個 Device Parameters 都設 0:不允許選擇性暫停,不使用加強電源管理,不允許在 D3 閒置,並把目前的選擇性暫停狀態清掉。

藍牙鍵盤節點若存在,也只對它設 PnPCapabilities。找不到就略過,接收器那一段已經夠用。

1
2
3
4
5
6
7
8
9
Get-PnpDevice -Class Bluetooth, Keyboard, HIDClass |
  Where-Object { $_.Status -eq 'OK' -and $_.FriendlyName -match 'Keyboard|鍵盤' -and $_.InstanceId -match 'BTH' } |
  ForEach-Object {
    $key = "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.InstanceId)"
    if (Test-Path $key) {
      New-ItemProperty -Path $key -Name PnPCapabilities -PropertyType DWord -Value 24 -Force | Out-Null
      $_.FriendlyName
    }
  }

停用 USB 選擇性暫停

改的是目前作用中的電源配置,插電與電池都停用。兩個 GUID 是 Windows 電源選項裡的「USB 設定」與「USB 選擇性暫停設定」,不是某一張硬體的編號。

1
2
3
powercfg /SETACVALUEINDEX SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg /SETDCVALUEINDEX SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg /SETACTIVE SCHEME_CURRENT

重開機後確認藍牙鍵盤會自動重連

有些接收器不能用 Disable-PnpDevice 重新載入,系統會回報不支援。登錄寫入後直接重開機,不要假設不重開就會生效。

重開機後用同一組變數核對。$enum 與 $dp 要還在這個 PowerShell 工作階段裡;若已關掉視窗,先重跑找出接收器的那段。

1
2
3
4
Get-ItemProperty $enum | Select-Object PnPCapabilities
Get-ItemProperty $dp |
  Select-Object DeviceSelectiveSuspended, SelectiveSuspendEnabled, EnhancedPowerManagementEnabled, AllowIdleIrpInD3
powercfg /q SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226

對得上的結果:PnPCapabilities 是 24;四個暫停相關值是 0;AC 與 DC 的 Current Power Setting Index 都是 0x00000000。接著讓電腦睡眠再醒來。Windows 11 26H2 上的藍牙鍵盤若會自動重連,這組設定就已經生效。

不要一併改到其他 USB 裝置

只寫藍牙接收器,以及名稱符合鍵盤的藍牙節點。同一組登錄不要套到隨身碟、加密鑰匙或其他 USB 裝置。

USB 選擇性暫停關掉之後,閒置耗電會高一點。若重開機、睡眠醒來後鍵盤仍要手動重連,再更新該接收器的藍牙驅動。驅動問題和節電問題是兩件事,這篇只處理後者。


使用 Hugo 建立
主題 Stack 由 Jimmy 設計