Fire TV のリモコンが効かない — 一晩放置で直った理由と、正しい電源リセット
ある晩、Fire TV のリモコンが突然反応しなくなりました。電源ボタンも、方向キーも、音量も、何を押しても画面はうんともすんとも言いません。電池を新品に替え、Home ボタンの長押しでペアリングをやり直し、本体を挿し直す。思いつくトラブルシュートはひととおり試しましたが、状況は変わりません。最後は半ばあきらめて、本体の電源プラグを抜き、ついでにリモコンからも電池を抜いて、そのまま一晩放置しました。
Amazonのアソシエイトとして、codenote.netは適格販売により収入を得ています。
翌朝、リモコンに電池を戻してボタンを押したら、何事もなかったかのように動きました。設定は何も変えていません。ただ、本体の電源とリモコンの電池を抜いて、一晩置いただけです。
エンジニアという仕事柄、原因が分からないまま直るのは、いちばん気持ちの悪い結末です。再現手順も、直った理由も分からないバグは、また明日にでも再発するかもしれない。そこで、この「一晩置くと直る」現象がなぜ起きるのかを、腰を据えて考えてみることにしました。結論から言うと、これは魔法でも気のせいでもなく、いくつかの状態がリセットされた結果として説明できます。
Fire TV のリモコンは赤外線ではなく Bluetooth
まず押さえておきたいのは、Fire TV のリモコンが赤外線(IR)ではなく Bluetooth、正確には省電力の Bluetooth Low Energy(BLE)で本体と通信しているという点です。昔ながらのテレビのリモコンは、押すたびに赤外線の信号を一方的に飛ばすだけの、状態を持たない仕組みでした。リモコンとテレビは「ペアリング」などしておらず、光が届きさえすれば動きます。
一方 Bluetooth のリモコンは、本体とあらかじめペアリングし、接続を維持しながら双方向でやり取りします。これは「テレビの前に立たなくても操作できる」「音声入力を送れる」といった利点をもたらす反面、赤外線にはなかった状態(state)を持つことを意味します。そして状態を持つものは、その状態が壊れたり、途中で固まったりし得ます。
リモコンが無反応になるとき、多くの場合は電池でも故障でもなく、この Bluetooth の接続状態がどこかで詰まっています。リモコン側と Fire TV 本体側、その両方が「接続しているつもり」なのに実際にはデータが通っていない、といったちぐはぐな状態に陥るのです。
「一晩置くと直る」を分解する
では、一晩放置すると何が起きて直るのか。単一の原因ではなく、いくつかの要因が重なっていると考えるのが自然です。
残留電荷が抜けて本当のコールドスタートになる
一つ目は、電源まわりです。Fire TV の本体(スティックや Cube)は、コンセントから抜いても、内部のコンデンサなどにしばらく電荷が残ります。数秒抜いて挿し直す程度では、この残留電荷が抜けきらず、内部のマイコンや通信チップの状態がリセットされないことがあります。
一晩コンセントから抜いていれば、残留電荷は完全に抜け、次に電源を入れたときは正真正銘のコールドスタートになります。固まっていたチップの状態も、中途半端に残っていたメモリの内容も、そこで一度きれいに消えます。私のケースでは本体の電源プラグを抜き、あわせてリモコンの電池も抜いていたので、本体側もリモコン側も残留電荷が抜けきり、両方がそろって完全なコールドスタートを経由したことになります。この「完全に電気が抜けた状態を経由する」ことが、状態のリセットには効きます。
Bluetooth のペアリング状態がタイムアウトで再構築される
二つ目は、Bluetooth の接続状態です。詰まった接続は、放置している間に片側または両側でタイムアウトし、破棄されます。翌朝ボタンを押したとき、リモコンは「接続が切れている」と認識して、保存済みのペアリング情報をもとに接続を張り直します。この張り直しが、詰まっていた状態をクリアするわけです。
リモコン側も、ボタンを押さずに放置していれば省電力のスリープに入り、次の操作で起き直します。この「寝て起きる」動作が、実質的にリモコン側のソフトリセットとして働くことがあります。つまり一晩というのは、両側の Bluetooth スタックが古い接続を捨てて、まっさらな状態から接続をやり直すのに十分な時間だった、ということです。
Fire TV OS 側の入力プロセスが再起動される
三つ目は、Fire TV 本体のソフトウェアです。Fire TV OS は Android をベースにしたシステムで、リモコンからの入力を受け取って処理する常駐プロセスが動いています。長時間つけっぱなしにしていると、こうしたプロセスがメモリリークや内部状態の不整合で応答しなくなることがあります。入力を受け取るプロセスが固まっていれば、Bluetooth の通信自体は生きていても、押した操作が画面に反映されません。
Fire TV はしばらく操作がないとスリープ(スタンバイ)に入り、多くのバックグラウンド処理を落とします。一晩置くことで、固まっていた入力まわりのプロセスがスリープ復帰時に立ち上がり直し、結果として応答が戻る、というのは十分あり得るシナリオです。
一晩待たずに直すための手順
原因が「詰まった状態のリセット」だと分かれば、わざわざ一晩待つ必要はありません。同じことが起きたとき、私が次から試す順序は次のとおりです。上から順に、より軽いリセットから重いリセットへと進みます。
- リモコンのペアリングをやり直す: Home ボタンを 10 秒ほど長押しして、リモコンを再ペアリングモードにする。リモコン側の接続状態をリセットする、いちばん軽い操作
- 本体を電源から抜く: Fire TV 本体をコンセントから抜き、少なくとも 1 分は待ってから挿し直す。残留電荷を抜き、本体側をコールドスタートさせる
- リモコンの電池を抜く: 電池をいったん抜くと、リモコン側の残留電荷も抜けて放電し、リモコン自体がコールドスタートする。電圧が落ちた電池は「たまに反応する」中途半端な挙動の原因にもなるので、抜いたついでに新品へ交換するとなおよい
- 電波干渉と距離を減らす: 本体をテレビ裏の狭い隙間に押し込んでいると、金属やケーブルで Bluetooth の電波が弱まる。付属の HDMI 延長ケーブルを使い、本体を少し外へ引き出す
- 本体を再起動する: 設定メニューが操作できるなら、システムの再起動を選ぶ。それも無理なら電源プラグの抜き差しで代用する
多くの場合、この 1 と 2 の組み合わせ、つまりリモコンの再ペアリングと本体のコールドスタートで、一晩待たずに直ります。私が一晩かけてやったのは、要するにこの本体側のコールドスタートに、リモコンの電池抜きによるリモコン側の放電を重ねたものを、時間の力で徹底していただけだったわけです。
なお、Amazon 公式のリモコンのトラブルシューティング手順も、大枠はこの「再ペアリングと電源リセット」に沿った案内になっています。手元で切り分けきれないときは、公式手順とあわせて確認するのがよいでしょう。
状態を持つものは、いつか状態が詰まる
この一件は、日常のちょっとした不具合ではありますが、エンジニアの仕事とまっすぐ地続きだと感じました。
赤外線リモコンから Bluetooth リモコンへの変化は、状態を持たない(stateless)仕組みから、状態を持つ(stateful)仕組みへの移行そのものです。状態を持たない仕組みは、壊れる余地が少ない代わりにできることが限られる。状態を持つ仕組みは、豊かな機能を実現できる代わりに、その状態がいつか詰まったり壊れたりする宿命を背負います。これは、サーバーのセッション、コネクションプール、キャッシュ、あらゆるステートフルなシステムに共通する話です。
そして「一晩置いたら直った」の正体は、私たちが日々サーバーに対してやっていることと同じ、詰まった状態を捨てて作り直すリセットでした。「困ったら再起動」は、雑な対症療法のように語られがちですが、その実体は「壊れた状態を捨てて、既知のクリーンな初期状態からやり直す」という、きわめて合理的な回復手段です。冪等(idempotent)な初期化さえ用意されていれば、コールドスタートは最も確実に効くリカバリになります。
もちろん、根本原因を突き止めて再発を防ぐのが理想です。ただ、家庭のテレビのリモコン相手にログを取ってプロセスを追いかけるのは、さすがに割に合いません。だからこそ、原因の当たりだけつけておいて、次は一晩ではなく数分で直せるようにしておく。この記事は、そのための自分向けの覚書でもあります。
以上、無反応になったリモコンを前に一晩を無駄にした反省を込めて、現場からお送りしました。