スリープしない問題についてキーボードやマウス、その他の入力機器が関係しているので直接の電源スリープ管理とは異なる事もあったので個別にまとめてみました。


入力機器とスリープの関係


基本的にWindowsの自動スリープの機能は入力機器、主にUSB(過去にはPS/2)などのキーボードとマウスの入力状態を監視して一定時間の「無操作」時間によって機能します。



設定>システム>電源とスリープに記載している「次の時間経過後」とは「無操作」を示しています。


ヘルプなどで「デバイスを使用していないとき」と記載してあるのは、PCの外部機器については主に「入力機器デバイス」を示しています。PCの内部機器やデバイス以外についてはpowercfgに記載されるものとなります。


「無操作」時間とは、入力が無くなってから内部のタイマーがカウントされた累積時間を示しています。2時間と設定すれば1時間59分で入力があればタイマーはリセットされます。


例外としてはディスプレイ機器本体が持つスリープ機能はこれと連動しないので、「無操作」でPCからの画面信号がOFFされた後、信号OFFによるディスプレイ機器本体のスリープ機能が働いて電源がOFFされた場合には、ディスプレイは再点灯せずにPCのみ電源が入っているといった状況になります。


ですので、何かしらかの「無操作」の状態をUSBなどから受け取る必要があるので、キーボードやマウスはその情報を返す必要があります。Bluetooth入力機器においても同様の仕組みとなります。



入力機器の接続について


通常のPC環境からのスリープ時間の変化として、入力機器が新たに接続される、使っていてこんな事をしたなどのケースは以下のようなものがあります。


  • キーボードやマウスを購入して接続した
  • タブレットを購入して接続した
  • ゲームパッドを購入して接続した
  • 昔購入したUSBゲームパッドを久しぶりに接続した
  • PS2ゲームパッド用のUSB変換ケーブルを久しぶりに接続した
  • マウスの調子が最近悪い
  • マウスパッドを交換したり、パッドが無いので直置きしている
  • レイアウト変更などで延長用にHUBを追加した


キーボード


ゲーミングキーボードは入力の監視が多い?


ゲーミングキーボードは同時入力キーが多いですよね?

けどキーボードのUSB通信仕様は共通仕様のため最大でも「6キー+特殊キー」となっています。

(USB仕様による。データ数を増やす(7以上)ことも可能らしいが特殊デバイス扱いとなるためか、データ量を増やすことによるレスポンス低下を懸念してか実例の有無は不明)


Byteデータ内容b0b1b2b3b4b5b6b7
0特殊キー
CTRL

SHIFT

ALT

GUI

CTRL

SHIFT

ALT

GUI
1予備0x00
2キーコード1現在押されているキー入力データ1(UsageID)
3キーコード2現在押されているキー入力データ2(UsageID)
4キーコード3現在押されているキー入力データ3(UsageID)
5キーコード4現在押されているキー入力データ4(UsageID)
6キーコード5現在押されているキー入力データ5(UsageID)
7キーコード6現在押されているキー入力データ6(UsageID)

USB HID キーボード入力データ

参考:USB仕様書 - Device Class Definition for HID 1.11(pdf英語)

参考:USB仕様書 - HID Usage Tables 1.3(pdf英語)


そこで1つのキーボードに複数の通信を行わせるといった「1台でN役」のような作りになっています。


これにより「6キー」の倍数で内部のUSB通信を別に増やすことでNキー同時入力を実現しています。「24キー対応」となっていれば、3つのドライバ通信が追加で動いていることになります。

特殊キー8つ(3ドライバ共通)=8

通常キー6つ×3ドライバ分=18

特殊キーを含めれば、21キーから26キー対応となる


某キーボード・マウスの例


以下は、とあるゲーミングマウス(キー設定可能なボタン付き、オンボードメモリあり)とゲーミングキーボード(26キー同時押し可能)の接続例です。


「USB Composite Device」とは複数の機能を持つデバイスを示しています。

複数の機能があるデバイスというのは、

マウスには通常にはない HIDキーボードデバイスとHID標準ベンダー定義デバイス※が付いており、

キーボードには通常にはない3つの HIDキーボードデバイスが追加されているためです。

Windowsの入力機器の監視にはこれらがすべて含まれることになります。


※HID標準ベンダー定義デバイスが追加されているのは、マウス専用の設定ユーティリティからマウス側に設定データを送信するのに利用されます。

主な利用方法は、マウススピード(DPI)の設定やマウスボタンへのキーコード割当、簡易キーマクロなどを設定ユーティリティとマウスの間で通信することによりマウス内部の不揮発性メモリなどに設定データを記憶させることが出来ます。

「オンボードメモリ搭載」と記載のあるゲーミングマウスにはHID準拠マウス以外にこのようなデバイスが追加されている場合があります。

ここではUSB入力デバイス扱いとなっているので、設定ユーティリティを起動している間や設定データの通信を行った場合にはスリープしない、スリープ時間が延びる可能性があります。


USBデバイス(接続別)表示


ゲーミングマウス:

HID準拠マウス+HIDキーボード+HID標準ベンダー定義の3つの入力デバイス監視が存在


ゲーミングキーボード:

HIDキーボード+HIDキーボード×3の2つの入力デバイス監視が存在



ゲーミングマウス(コンテナー別)表示



ゲーミングキーボード(コンテナー別)表示

タイピングへの影響


使いやすいキーボードとしてよくゲーミングキーボードが取り上げられますが、このNキー仕様によって同時押しとは相反するタイピング能力が悪いというケースがあります。


  • 内部ドライバが増えることでWindowsの入力機器監視処理に負荷がかかっていること
  • タイピングの押下した順序をドライバ間で同期を厳密にしていない(というか数10msなど監視周期によっては性能的に判断できない)
  • 同時入力サポートによるキー入力信号の衝突


特にキーを押下した順序については、タイピングの早い人などは数十ms以下の速さで順序を判断しなければいけないので、ドライバの負荷とドライバの同期が悪いことはかなり問題となります。この場合は普通のキーボードの方が性能が良いということになります。


ローマ字入力などで正しく打っているのに入力順序が逆転していたりする場合には、このキーボードの多キー同時押し機能が関係している可能性が高いです(順序が存在するのにNキー同時押しと判断されることで入力が前後する)


例えば「F」と「G」キーが単一ドライバによる監視なら入力順序が正しく取得しWindowsへ送信できるが、「F」キー用のドライバと「G」キー用のドライバが存在する場合、どちらを先にWindowsに送信するかを決めておかないと短い時間であればあるほど怪しくなってくる(その辺の通信仕様はキーボードの開発元次第といったところ)


スリープしない要因の話から逸れてしまいましたが、複数のドライバを扱っているということは正しく処理をしていないとスリープしないと行った現象もあるということです。

これについては調査手段がないので(powercfgにて調べることが出来ない)物理的に接続を外してみるなどで確認するしかありません。


まあ見た目とは裏腹に内部で複雑なことをしていることもあるので、利用する用途や不具合が起きないかなどを一考したほうが良いということです。


マウス


利用環境に問題があることも・・


マウスの場合、利用している環境に問題があるケースもあります。

マウスの移動にはセンサーが用いられていますが、そのセンサーに問題がある場合やセンサーの接地面(マウスパッドなど)が凸凹な場合などでも「マウスが動いた」と判断されてスリープ時間がリセットされてしまうことがあります。


有線式(ケーブル付き)の場合には、ケーブルが硬い、ケーブルに触れたなどの要因でマウスが動くこともあります。


サポートセンターとかに言われる「ケーブルはきちんと刺さっていますか?」のようなアナログ的でおまじないな要因ですが、確認してみることも良いかもしれません。


ゲーミングマウス


ゲーミングキーボードについて説明したとおり、ゲーミングマウスでもボタンにキーボードやキーボードマクロを割り当てられる製品については、マウスドライバとキーボードドライバの通信が動いていることになります。


マクロが設定できるものについては、常駐アプリ(専用ユーティリティ)が常にマウスと通信をしているものもあります。この場合その通信がマウス入力扱いとなっているかによってスリープの挙動が変化します。

これについては、オンボードメモリ搭載(専用ユーティリティが起動していくてもキーボタンを利用可能)と非搭載(専用ユーティリティが起動している間のみキーボタンを利用可能)によっても挙動が異なりますので説明書やデバイスドライバなどを確認してみてください。


しかし、ゲーミングマウスの多ボタンはゲームに限らず画像処理系アプリなどの作業効率化などのメリットが多いです。


デメリットはやはり入力監視周期の負荷と付属アプリの常駐やアプリとマウス間の通信があることです。

デメリットを減らすのであれば、ボタン設定がメモリ内蔵(オンボードメモリ)による設定記録タイプを選ぶことで負荷を削減できます。メモリ内蔵タイプであれば常駐アプリをアンインストールもしくはプロセス停止しても問題ありません。


こちらもスリープから話題が逸れてしまいました・・。通信が多いためにスリープ阻害されるわけではありません。

サードパーティー製の特殊なドライバ&常駐アプリ通信について説明しています。入力機器とその遅延については面白そうなので後で別記事にしたいと思います。


スクロールホイール


マウスの機能としては便利なスクロールホイールですが、メカニカルな部位ということもあり、故障やメンテナンス不足によって誤動作することがあります。ここでも動いたと判断されればスリープ時間はリセットされます。


スクロールホイールはマウスボタンと同じくメカニカルな部分で構成されているため、チャタリングなどの入力異常が発生しやすいです。またホイール周りは密閉性が低いためゴミやホコリの侵入により、入力誤動作する場合があります。


エンコーダ式ホイール:ホイールと直結した接点接触型のロータリースイッチであるため力の入れ具合や利用頻度によってはチャタリングなどで未入力や逆方向検出などの故障を頻繁に起こすことがある。接点はある程度密閉されているのでホコリの影響は低いと思われる。


光学式ホイール:ホイールの凹凸を光学センサーで読み取ることで移動量を入力するため、ホイールとセンサーは独立しているためスイッチの機能としては壊れにくい。光学センサーとホイールの間のホコリにより読み取り不良を起こすことがある。


静電容量方式のタッチパッドなど


今ではノートパソコンのタッチパットはほぼこれに置き換わっています。
USBなど単体の入力機器としては利用したことはないのですが、所有するものではペンタブレットに搭載されていました。

指で触れるだけでマウスの代わりになったりジェスチャーコマンドにて機能するなど色々と便利ではありますが、静電容量方式は人体と同様の通電負荷があれば指でなくても誤動作することがあります。
この場合にも誤動作でスリープタイマーがリセットされます。

ノートパソコン本体に装備されている場合には取り外しができませんので、スリープ阻害要因の可能性がある場合にはデバイスマネージャーを利用して「デバイスを無効にする」を実行する必要があります。

ゲームパッド


スリープ阻害要因はWindowsの問題?


USBゲームパッドについては、以前よりスリープに無関係な入力機器であったのですが、Windows10本体の問題もあり、スリープを阻害する場合があるようです。

別のページで詳しく掲載しましたのでそちらを参照してください。



スリープ阻害の判断方法


この場合ではpowercfgのログには残りませんので入力機器の監視が正しく行われているかを物理的なケーブルの抜き差しやキーマウス入力確認監視などのソフトウェアでチェックする必要があります。


簡単な判断方法としては「電源とスリープ」の設定を「1分」などの短い時間に設定してケーブルの抜き差しを行いディスプレイの電源がOFFされることやPC電源がスリープされることを確認します。


入力機器は本来それを正しく返すことをWindowsは機器仕様としていますが、キーボードやマウスは色々なメーカーが作っているので、仕様を守っていることは100%ではありません。


作成日:2021/07/15

更新日: