windowsのカーソルのフォーカスが勝手に外れることへの対応方法

PC使いこなし
記事内にプロモーションが含まれています
PR

まとめ

Windowsで文章を入力中にカーソルが消えてしまい、再度入力するためには入力中のウィンドウでマウスをクリックする必要があるときの原因の見つけ方と対応方法について調べた内容です。

  • アクティブになったウィンドウを表示・記録するActiveWindowLoggerというフリーソフトで、どのソフトがフォーカスを取っているのかを調べることができた。
  • 自分の環境ではWSLgがリモートデスクトップ接続(msrdc.exe)を起動して、これがフォーカスを奪って、文字入力中のソフトがバックグラウンドになっていた。
  • この問題への対応であれば以下の設定を行う。ただしXアプリケーションを使用する場合は別のWSLgに変わるXサーバを立てる必要がある。

windowsで、%USERPROFILE%\.wslconfig に以下の内容を書いて保存する。

[wsl2]
guiApplications=false

windowsのシェル(cmd等)で以下を実行し、WSLを再起動する

> wsl --shutdown

はじめに

最近PCで文章入力中にカーソルが勝手に外れることが結構な頻度で起こり、地味にストレスでした。文章入力中にこれが起きると、カーソルのフォーカスが外れる度に、入力中のウィンドウでマウスをクリックする必要があります。日本語を楽に入力するために親指シフトを使っており、PC作業はできるだけ楽にやりたいという気持ちが強いのでなおさらです。

これまでのPC経験から、この原因は簡単にはわからないだろうという感じを受けていました。ウェブで検索してもなかなか真の原因がわからず困っていましたが、ようやく原因がわかり対策できました。うれしいので広めたいと思います。

この問題に遭遇した人たちも同じように検索して見つけられればいいのでしょうが、自分もなかなか解決方法が見つけられなかったので、そういうときに検索するときのメタキーワードをたくさん設定しておいて、この解決方法が検索されやすいようにしたいと思います。

フォーカスをとるソフトの調査方法

いろいろ検索をしていて以下の記事を見つけました。

自分のPCで起きていることと全く同じ現象が起きています。

フォーカスを奪っているソフトを確認するために以下のActiveWindowLoggerというソフトを使ったとのことで、自分も早速使ってみました。

ActiveWindowLoggerは、iOSのスクリーンタイムのように、PCでの作業中にどのソフトをどのぐらいの時間使用していたかを確認するためのもので、どのソフトがいつフォアグラウンドになったかを記録して、各ソフトの使用時間を確認するようになっています。

リアルタイムでフォアグラウンドのソフトがバックグラウンドになったときそのソフト名がウィンドウにも表示されるので、どのソフトがフォーカスを奪ったのかを確認できます。

自分の環境でフォーカスをとっていたもの

自分の環境でも、msrdc.exe(RemoteApp・リモートデスクトップ)がフォーカスを奪っており、WSL2のWSLgがmsrdc.exe(リモートデスクトップ)を起動しているらしいということがわかりました。

昨年、仕事でROS2を使うことがあって、WSL2でUbuntsu-20.04を使っていたのですが、そこで使われているWSLgが原因だったとは全く思いつきませんでした。

Process Explorerで詳細を確認してみると、30秒毎に、以下のようにwslservice.exeがその下の2つのプロセスを起動しては、起動後15秒程度でその2つのプロセスが終了するということを繰り返しています。

wslservice.exe (Windows Subsystem for Linux Service)

wslhost.exe (Windows Subsystem for Linux Host Process)

msrdc.exe(リモートデスクトップ)

Process Explorerで確認した30秒毎に起動・消滅するプロセス

msrdc.exe(リモートデスクトップ)が30秒毎に起動するたびに必ずフォーカスが取られるわけではないですが、エディターやエクセル等に文字入力をし始めるとフォーカスが取られ、マウスカーソルの点滅が止まっていました。

msrdc.exe(リモートデスクトップ)が勝手に周期的に起動しないようにできれば、フォーカスを取られることはなくなるはずです。

対応方法

フォーカスが取られる原因により対応方法は変わってきますが、WSLgが原因の場合は以下の対応となります。

windowsで、%USERPROFILE%\.wslconfig に以下の内容を書いて保存する。

[wsl2]
guiApplications=false

windowsのシェル(cmd等)以下を実行し、WSLを再起動する

> wsl --shutdown

この設定後も同じように30秒毎にwslservice.exeはwslhost.exeを起動して、起動後15秒程度で終了しますが、msrdc.exe(リモートデスクトップ)は起動されなくなりました。

また、この設定後は、ubuntuのシェルで$DISPLAY環境変数は設定されなくなり、xeyesを実行してもxeyesのウィンドウは表示されません。

この状態でXアプリケーションを使いたい場合は、VcXsrvやX410等のXサーバーを別に立てる必要があります。

PR

コメント

タイトルとURLをコピーしました