FreeRDPでWindowsの操作が重すぎたのはゲーミングマウスのせいだった
余っていたマシン (Mac mini 2018) に Ubuntu 22.04 を入れ、FreeRDP (xfreerdp) で別の Windows マシンにリモート接続して操作してみたところ、なぜかめちゃくちゃ重い…。
マウスカーソルの移動に対して画面の反応が極端に遅く、例えばウィンドウをドラッグすると、マシなときで数秒、ひどいときは十数秒も遅れてようやくウィンドウが移動しはじめます。
これでは仕事になりません。
マウスを変えたら治った
何がいけないのかと、FreeRDP 本家の Issues を漁っていたところ、何やらヒントが…。
リモート接続が重いこととマウスの設定に関係があるのでしょうか?
半信半疑で別のマウスに変えてみたところ…。
えー!マジで治った!😂
別のマウスで操作すると、見違えたようにサクサクとウィンドウが動いてくれたのです。
なぜ起こるのか
上記 ttoocs さんのコメントでは "DPI" と書かれていますが、おそらくこれは言葉の誤りで、正確には "ポーリングレート" を指していると思われます。
ここでのポーリングレートとはマウス入力を単位時間あたり何回検知・報告するかを表す値のことです。(単位はヘルツなど)
ttoocs さんの一連のコメントから私なりに解釈すると、今回の問題の原因として次のような仮説が成り立ちそうです。
マウスのポーリングレートが高い
FreeRDP が高いポーリングレートによって検出された大量のマウス入力をリモートに送っている
リモート側が大量のマウス入力を捌くために処理が遅延する
ポーリングレートを下げる
仮説を証明するため、マウスの設定を確認。
見事にポーリングレートが 1000 になってる😱
一般的なビジネス用マウスのレートは 125Hz。比較すると、レート 1000 では実に 800% もの大量のマウス入力が発生する計算になります。
早速レートを 125 に変えると不具合が起きた方のマウスでも問題が解決しました🎉
ゲーミングマウスの盲点
今回不具合の起きたマウスはオンライン RPG 向けの "G600" というゲーミングマウスで、BLUE PROTOCOL の操作を楽にするために新調したものです。
なんとサイドに 12 個もボタンがついているので、たくさんのコマンドをマウスで楽々発動できちゃいます。
この G600 は FPS 系のゲームには適さないだろう肉厚の形状でずっしりと重いのですが、ゲーミングマウスに分類されるだけあり、しっかりと 1000 Hz までのポーリングレートに対応しています。
試しにポーリングレートの設定を 1000 に戻し、 "Mouse Polling Rate Checker" で実測したところ、見事に大量のマウス入力が発生しました。
応答速度 1ms というメーカーの謳い文句に偽りはないようです。
ポーリングレートが低いとゲームなどで素早い操作が求められる場合に、
入力が遅延する (レートが 125Hz の場合、8ms の応答時間)
高リフレッシュレートのモニタでカーソルがカクついて見える
といった不具合が起こるそうです。
このため FPS ゲーマーはポーリングレートを 1000Hz 以上に設定する場合が多いとか。
でも、私の使っているモニタはリフレッシュレートが 60Hz のものです。競技性の高いゲームマッチに参加することもありません。
なので、ポーリングレートを下げてもあまり支障はなさそうです。
これまでもいくつかゲーミングマウスを使ってきましたが、いつも適当に設定していたので、まさかこんな落とし穴があるとは思いもよらず…。
ゲーミングマウスに変えたら PC が重くなったという人はポーリングレートが高く設定されていないかチェックしてみてください。
マウスカーソルを少し動かすだけでも大量の入力処理が発生している可能性があります。
設定は用途に合わせるのが吉
ところで Windows から Microsoft 謹製のリモートデスクトップクライアントを使って接続した場合、この問題は発生しませんでした。
クライアント側でうまい具合にマウス入力データが圧縮されているものと思われます。
逆に考えると、リモート側 (接続先のマシン、あるいは、ゲートウェイサーバー) の処理能力が高ければ、クライアントが FreeRDP であれなんであれ問題は起きないのかもしれません。
そもそも一般的なリモート接続環境でeスポーツレベルの映像伝送を要求すること自体が現実的ではなく、マウスの動きだけ滑らかにしても単に処理が重くなるだけでしょう。
どのリモートクライアントを選んだとしても、マウスのポーリングレートは用途に合わせて必要最低限の値に設定した方がコンピュータのリソースを節約できそうです。
もし手持ちのマウスが複数のプロファイルをサポートしていたら、ゲーム用と一般用とでプロファイルを分け、それぞれのプロファイルで最適なポーリングレートの値を設定しておくのがよいかもしれません。
以上、何かのお役に立てれば幸いです。