bootcampのMacbookに高精度タッチパッドを導入する方法
こちらの記事でWindowsのMacにWindows10の高精度タッチパッドを導入する方法を紹介している。
MacBookのBootCampのWindowsに高精度タッチパッドドライバを導入
SPI系のタッチパッドを持つMacbookではスリープ復帰に失敗する
このオープンソースの高精度タッチパッドにはスリープ復帰に失敗する問題がある。
Github Trackpad doesn't work after sleep 203
Windowsのスリープからの復帰時に高精度タッチパッドのドライバが停止して、Windowsを強制終了するしかない問題があり、非常に問題だった。
この問題が解決しない限り、Windowsを完全にシャットダウンしないといけないため、スリープまたは休止モードの利用ができなかった。
※ 正確には運よく復帰に成功することもあるので、復帰に失敗したら強制終了という運用。。。
Trackpad doesn't work after sleep は未解決(2020/12/01時点)
この問題は2019年初頭から報告されているが、解決されていない。
原因はSPIドライバが最新のMacbookでは採用されておらず、古いMacbookにしかない。
このため、修正意欲も弱かったり問題の再現性が乏しいということだった。
しかし、私はMacbook12をWindows機として使い倒す気満々だ。
今のところMacBook12以上に優れた小型のWindowsは存在しないと自負している。 高解像度でUSB type-C(PD)で 軽量薄型でUS配列を条件にすると市販のPCで該当するものが無くなる。
ということで何とかこの問題を解決できないか検討した結果、回避できたので共有させていただく。
タッチパッドのスリープ復帰時停止を回避する方法
スリープ復帰時に正常に停止しなかったタッチパッドがエラーを返すのが原因なので、 スリープに入る前に強制的にハードウェアを停止させる。
そしてスリープ復帰時に手動でハードウェアを復帰させることで回避する。
PowerShell で タッチパッドをOnOffするためにIDを取得
デバイスマネージャーで表示できるApple SPI Precision TouchPad Device
がOnOffする対象だ。
以下のコマンドを管理者権限のPowerShell ISE で実行する。
Get-PnpDevice -FriendlyName "Apple SPI Precision Touchpad Device" | ft -wrap -AutoSize instanceid
以下のような結果が得られればOKで、SPI
から始まるIDを控える。
OnOffするスクリプトを作成
PowerShellのスクリプトを作成する。
各スクリプトの一行目にあるif はPowerShellを管理者権限で実行しなおす処理だ。
二行目がタッチパッドをOnOffするコマンド。
touchpad_On.ps1
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit } Enable-PnpDevice -InstanceId "SPI\VID_05AC&PID_0275&MI_02\5&33D07321&0&02" -Confirm:$false
touchpad_Off.ps1
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit } Disable-PnpDevice -InstanceId "SPI\VID_05AC&PID_0275&MI_02\5&33D07321&0&02" -Confirm:$false
これらのスクリプトを手動で実行し、タッチパッドが無効化、有効化できるかを確認しておく。
スクリプトをWindowsのタスクスケジューラに登録する
最後にWindowsがスリープに入出するときにこれらのスクリプトが実行されるようにする。
タスク作成方法
- タスクスケジューラを起動
操作
からタスクの作成
- タスクの作成
全般
の最上位の特権で実行する
にチェックトリガー
の新規
からタスクの開始
で以下を選択- タッチパッドOffスクリプト ⇒
ワークステーション ロック時
- タッチパッドOnスクリプト ⇒
ワークステーション アンロック時
- タッチパッドOffスクリプト ⇒
操作
の新規
から作成したスクリプトを起動プログラムに指定
- 完了
実際に試してみる
スリープや休止モードを試してみて、問題なくタッチパッドが回復すれば良い。
私の環境ではこれで完全にタッチパッドが停止する問題を回避できた。