<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Logicool on もざぶれなるままに</title><link>https://mitz17.com/tags/logicool/</link><description>Recent content in Logicool on もざぶれなるままに</description><generator>Hugo -- gohugo.io</generator><language>ja-JP</language><lastBuildDate>Wed, 15 Jul 2026 20:00:00 +0900</lastBuildDate><atom:link href="https://mitz17.com/tags/logicool/index.xml" rel="self" type="application/rss+xml"/><item><title>Easy-Switch対応マウスをUbuntuとWindowsで切り替える｜Bluetooth自動再接続のラグを解消する方法</title><link>https://mitz17.com/blog/mx-ergo-s-ubuntu-windows-bluetooth/</link><pubDate>Wed, 15 Jul 2026 20:00:00 +0900</pubDate><guid>https://mitz17.com/blog/mx-ergo-s-ubuntu-windows-bluetooth/</guid><description>&lt;h2 id="この記事でやること"&gt;この記事でやること
&lt;/h2&gt;&lt;p&gt;Easy-Switch対応のロジクールマウス（今回は &lt;code&gt;MX ERGO S&lt;/code&gt;）を Windows と Ubuntu の 2 台で共有し、本体の切り替えボタンで行き来する構成をまとめます。Windows は Logi Bolt レシーバー、Ubuntu は Bluetooth接続という組み合わせです。目指したのは、&lt;strong&gt;切り替えた瞬間にラグなく繋がること&lt;/strong&gt;でした。ところが Ubuntu 側だけ、切り替え後になかなか繋がらない・繋がるまで 5 秒ほどかかる、という症状が出ていました。この記事はその原因と解決方法についてです。&lt;/p&gt;
&lt;p&gt;MX ERGO S 固有の話ではなく、Easy-Switch でマウスやキーボードを複数台の PC 間で切り替えて使っている人であれば、同じ症状に心当たりがあるはずです。&lt;/p&gt;
&lt;p&gt;自分自身の備忘録も兼ねて、試行錯誤の過程も含めて残しておきます。&lt;/p&gt;
&lt;h2 id="結論だけ読みたい人はこちら"&gt;結論だけ読みたい人はこちら
&lt;/h2&gt;&lt;p&gt;具体的な設定手順は「&lt;a class="link" href="#%e6%9c%80%e7%b5%82%e7%9a%84%e3%81%aa%e8%a7%a3%e6%b1%ba%e6%96%b9%e6%b3%95" &gt;最終的な解決方法&lt;/a&gt;」の章にまとめています。急ぎの人はそこまで飛んでください。&lt;/p&gt;
&lt;h2 id="目次"&gt;目次
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" &gt;やりたいこと&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#%e4%bd%bf%e7%94%a8%e7%92%b0%e5%a2%83" &gt;使用環境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#%e3%81%aa%e3%81%9cbluetooth%e6%8e%a5%e7%b6%9a%e3%82%92%e9%81%b8%e3%82%93%e3%81%a0%e3%81%8b" &gt;なぜBluetooth接続を選んだか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#%e7%99%ba%e7%94%9f%e3%81%97%e3%81%a6%e3%81%84%e3%81%9f%e5%95%8f%e9%a1%8c" &gt;発生していた問題&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#%e5%8e%9f%e5%9b%a0%e3%81%ae%e5%88%87%e3%82%8a%e5%88%86%e3%81%91" &gt;原因の切り分け&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#%e5%8a%b9%e6%9e%9c%e3%81%8c%e4%b8%8d%e5%8d%81%e5%88%86%e3%81%a0%e3%81%a3%e3%81%9f%e5%af%be%e5%87%a6" &gt;効果が不十分だった対処&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#%e6%9c%80%e7%b5%82%e7%9a%84%e3%81%aa%e8%a7%a3%e6%b1%ba%e6%96%b9%e6%b3%95" &gt;最終的な解決方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#%e3%81%be%e3%81%a8%e3%82%81" &gt;まとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="やりたいこと"&gt;やりたいこと
&lt;/h2&gt;&lt;p&gt;前提として実現したかったことは次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows は Logi Bolt レシーバーで接続する&lt;/li&gt;
&lt;li&gt;Ubuntu は Bluetooth で接続する&lt;/li&gt;
&lt;li&gt;Easy-Switch ボタンで 2 台の PC を切り替える&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;切り替えた瞬間にラグなく、Ubuntu 側も自動で繋がるようにする&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;追加の Logi Bolt レシーバーは買わず、今ある機器だけで実現する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ゴールは「安定して繋がる」ではなく、あくまで「切り替えたら即座に繋がる」ことです。&lt;/p&gt;
&lt;h2 id="使用環境"&gt;使用環境
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;項目&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;OS&lt;/td&gt;
 &lt;td&gt;Ubuntu 24.04&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Bluetooth 管理&lt;/td&gt;
 &lt;td&gt;BlueZ（&lt;code&gt;5.72-0ubuntu5.5&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;マウス&lt;/td&gt;
 &lt;td&gt;Logicool MX ERGO S（Easy-Switch対応）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ubuntu 側接続&lt;/td&gt;
 &lt;td&gt;Bluetooth&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Windows 側接続&lt;/td&gt;
 &lt;td&gt;Logi Bolt&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ubuntu 側アドレス&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;XX:XX:XX:XX:XX:3A&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ペアリング自体は問題なく完了しており、登録状態は次のとおりでした。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Paired: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Bonded: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Trusted: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;信頼設定まで含めて登録状態は正常で、「ペアリングが壊れている」わけではないことが出発点になります。&lt;/p&gt;
&lt;h2 id="なぜbluetooth接続を選んだか"&gt;なぜBluetooth接続を選んだか
&lt;/h2&gt;&lt;p&gt;Windows 側は Logi Bolt レシーバーで接続していますが、Ubuntu 側も同じようにレシーバーで二重化する、という選択肢は取りませんでした。&lt;/p&gt;
&lt;p&gt;理由は、ロジクールの無線レシーバーには &lt;code&gt;Unifying&lt;/code&gt;（旧世代の規格）と &lt;code&gt;Logi Bolt&lt;/code&gt;（後継の新しい規格）があり、この2つには互換性がないためです。Unifying 対応の製品は Logi Bolt レシーバーに接続できず、その逆もできません。近年発売されるロジクールの新しいマウス・キーボードは Logi Bolt 対応へ順次切り替わっており、手元に古い Unifying レシーバーがあっても、そのままでは新しいマウスに転用できないケースが増えています。&lt;/p&gt;
&lt;p&gt;つまり「昔のドングルが物理的に壊れた」というよりも、&lt;strong&gt;マウス側の無線規格が新しくなったことで、手持ちの旧世代レシーバーが使えなくなった&lt;/strong&gt;という互換性の問題です。この影響で Windows 用に確保できる Logi Bolt レシーバーは 1 つだけとなり、Ubuntu 側は追加レシーバーを買わずに Bluetooth で対応する、という構成にしました。&lt;/p&gt;
&lt;p&gt;なお、Logi Bolt レシーバーは単体でも販売されています。台数分を追加購入できる環境であれば、両方の PC を Logi Bolt レシーバーで統一するのが最も手っ取り早い解決策です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;型番：&lt;code&gt;LBUSB1&lt;/code&gt;（USB-A）／ &lt;code&gt;LBUSBC&lt;/code&gt;（USB-C）&lt;/li&gt;
&lt;li&gt;Amazon.co.jp 商品ページ：https://www.amazon.co.jp/dp/B09HSZKXNY&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;価格は変動するため、正確な実売価格は上記リンク先で確認してください。予算に余裕があるなら、この記事以降の Bluetooth まわりの調整はすべて不要になります。&lt;/p&gt;
&lt;h2 id="発生していた問題"&gt;発生していた問題
&lt;/h2&gt;&lt;p&gt;Windows から Ubuntu へ Easy-Switch で切り替えたとき、再接続の挙動が安定しませんでした。症状は次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;すぐ再接続されることもある&lt;/li&gt;
&lt;li&gt;約 5 秒かかることもある&lt;/li&gt;
&lt;li&gt;待っても再接続されないことがある&lt;/li&gt;
&lt;li&gt;手動で接続すればつながる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bluetoothctl scan on&lt;/code&gt; を実行するとつながることがある&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;さらに、&lt;code&gt;bluetoothctl connect&lt;/code&gt; を連続実行すると次のエラーが出ました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Failed to connect: org.bluez.Error.Failed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Operation already in progress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もう 1 つの落とし穴として、以前メモしていた Bluetooth アドレスが古いままでした。実際に Ubuntu 側でペアリングされていたのは末尾 &lt;code&gt;3A&lt;/code&gt; のアドレスで、末尾 &lt;code&gt;39&lt;/code&gt; は過去のものです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;古いアドレス： XX:XX:XX:XX:XX:39
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;現在のアドレス： XX:XX:XX:XX:XX:3A
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="原因の切り分け"&gt;原因の切り分け
&lt;/h2&gt;&lt;p&gt;「本体が壊れているのか」「Ubuntu 側の処理の問題なのか」を切り分けるため、順番に確認していきました。&lt;/p&gt;
&lt;h3 id="bluez-のバージョンは最新だった"&gt;BlueZ のバージョンは最新だった
&lt;/h3&gt;&lt;p&gt;まずパッケージの更新不足を疑い、バージョンを確認しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt policy bluez
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;インストールされているバージョン: 5.72-0ubuntu5.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;候補: 5.72-0ubuntu5.5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ubuntu 24.04 の更新済みバージョンで、単純な更新不足ではありませんでした。&lt;/p&gt;
&lt;h3 id="ペアリング状態は正常だった"&gt;ペアリング状態は正常だった
&lt;/h3&gt;&lt;p&gt;次にデバイス情報を確認しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bluetoothctl info XX:XX:XX:XX:XX:3A
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Paired: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Bonded: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Trusted: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Connected: no
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ペアリング情報や信頼設定に問題はなく、&lt;code&gt;Connected: no&lt;/code&gt; になっているだけの状態です。&lt;/p&gt;
&lt;h3 id="手動接続では必ずつながる"&gt;手動接続では必ずつながる
&lt;/h3&gt;&lt;p&gt;手動での接続を試すと、問題なく接続できました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bluetoothctl connect XX:XX:XX:XX:XX:3A
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;つまりマウス本体やペアリング情報が壊れているのではなく、&lt;strong&gt;Ubuntu 側の自動再接続処理&lt;/strong&gt;に問題があると判断できます。&lt;/p&gt;
&lt;h3 id="スキャンを回すと接続される"&gt;スキャンを回すと接続される
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;bluetoothctl&lt;/code&gt; 内でスキャンを開始すると、直後に自動接続されました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;power on
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;scan on
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Connected: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ServicesResolved: yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このことから、Ubuntu が MX ERGO S を&lt;strong&gt;検出できたときには正常に接続できる&lt;/strong&gt;とわかります。裏を返すと、検出のきっかけがないと未接続のまま放置される、というのが問題の核心です。&lt;/p&gt;
&lt;p&gt;なお、スキャン中に次の表示が出ることもありましたが、これは「すでにスキャン中」という意味で、異常ではありません。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Failed to start discovery: org.bluez.Error.InProgress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="効果が不十分だった対処"&gt;効果が不十分だった対処
&lt;/h2&gt;&lt;p&gt;解決までに試した中で、単独では不十分だったものを整理します。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;試したこと&lt;/th&gt;
 &lt;th&gt;結果&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;BlueZ の更新&lt;/td&gt;
 &lt;td&gt;すでに最新で、更新では解決しなかった&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ScanIntervalAutoConnect&lt;/code&gt; の短縮&lt;/td&gt;
 &lt;td&gt;多少改善するが、再接続のばらつきや未接続は残った&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;常時 &lt;code&gt;scan on&lt;/code&gt; のみ&lt;/td&gt;
 &lt;td&gt;検出はできても接続されないことがあった&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;古い Bluetooth アドレスへ接続&lt;/td&gt;
 &lt;td&gt;別アドレスのため &lt;code&gt;not available&lt;/code&gt; エラー&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;connect&lt;/code&gt; の連続実行&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Operation already in progress&lt;/code&gt; エラー&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="スキャン間隔の調整だけでは直らない"&gt;スキャン間隔の調整だけでは直らない
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/etc/bluetooth/main.conf&lt;/code&gt; の &lt;code&gt;[LE]&lt;/code&gt; セクションにスキャン間隔を追加する案を試しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[LE]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ScanIntervalAutoConnect&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ScanWindowAutoConnect&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;16&lt;/code&gt; は BlueZ LE の単位で 0.625 ミリ秒刻みのため、約 10 ミリ秒に相当します。ただしこれだけでは自動接続は安定せず、時間がかかる・つながらないケースが残りました。原因は間隔ではなく、&lt;strong&gt;検出後に BlueZ が自動接続を実行しないことがある&lt;/strong&gt;点でした。&lt;/p&gt;
&lt;h3 id="スキャンと接続は別処理"&gt;スキャンと接続は別処理
&lt;/h3&gt;&lt;p&gt;常時スキャン用のサービスを作っても、検出するだけで接続されない場合がありました。&lt;code&gt;scan on&lt;/code&gt; はあくまで「見つける」処理であり、「つなぐ」処理とは別です。ここを分けて考えることが解決の鍵になります。&lt;/p&gt;
&lt;h3 id="アドレス違いと連続実行のエラー"&gt;アドレス違いと連続実行のエラー
&lt;/h3&gt;&lt;p&gt;古いアドレス末尾 &lt;code&gt;39&lt;/code&gt; へ接続しようとすると、当然ながら次のエラーになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device XX:XX:XX:XX:XX:39 not available
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;また、接続処理が終わる前に &lt;code&gt;connect&lt;/code&gt; を重ねて実行すると &lt;code&gt;Operation already in progress&lt;/code&gt; が出ます。後述のスクリプトでは、この対策として &lt;code&gt;timeout 5&lt;/code&gt; を使い、接続処理が長時間残らないようにしています。&lt;/p&gt;
&lt;h2 id="最終的な解決方法"&gt;最終的な解決方法
&lt;/h2&gt;&lt;p&gt;方針は「常時スキャンで検出のきっかけを作りつつ、未接続なら明示的に &lt;code&gt;connect&lt;/code&gt; を叩く」ことです。これを Ubuntu ログイン中に動き続ける systemd ユーザーサービスとして常駐させます。&lt;/p&gt;
&lt;h3 id="1-接続スクリプトを用意する"&gt;1. 接続スクリプトを用意する
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;~/.local/bin/mx-ergo-connect.sh&lt;/code&gt; として次のスクリプトを保存します（MX ERGO S 以外のマウスでも、アドレスを置き換えれば同じ考え方で使えます）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DEVICE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;XX:XX:XX:XX:XX:3A&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# ご自身の環境の Bluetooth アドレスに置き換えてください&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bluetoothctl power on &amp;gt;/dev/null 2&amp;gt;&amp;amp;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bluetoothctl scan on &amp;gt;/dev/null 2&amp;gt;&amp;amp;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; true; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ! bluetoothctl info &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$DEVICE&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null | grep -q &lt;span style="color:#e6db74"&gt;&amp;#34;Connected: yes&amp;#34;&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timeout &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; bluetoothctl connect &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$DEVICE&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &amp;gt;/dev/null 2&amp;gt;&amp;amp;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;||&lt;/span&gt; true
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sleep &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;実行権限を付けておきます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod +x ~/.local/bin/mx-ergo-connect.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このスクリプトがやっていることは次の 5 ステップです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bluetooth を有効化し、スキャンを開始する&lt;/li&gt;
&lt;li&gt;1 秒ごとに MX ERGO S の接続状態を確認する&lt;/li&gt;
&lt;li&gt;未接続なら明示的に &lt;code&gt;bluetoothctl connect&lt;/code&gt; を実行する&lt;/li&gt;
&lt;li&gt;接続処理が固まった場合は 5 秒で打ち切る&lt;/li&gt;
&lt;li&gt;再度接続を試行する&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="2-ユーザーサービスとして登録する"&gt;2. ユーザーサービスとして登録する
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;~/.config/systemd/user/mx-ergo-scan.service&lt;/code&gt; を作成します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Description&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;MX ERGO S auto-connect&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;After&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;bluetooth.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ExecStart&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;%h/.local/bin/mx-ergo-connect.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Restart&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;always&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Install]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;WantedBy&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;default.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;作成したら有効化します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user enable --now mx-ergo-scan.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;状態を確認して &lt;code&gt;active (running)&lt;/code&gt; になっていれば動作中です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl --user status mx-ergo-scan.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Active: active (running)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="動作の流れ"&gt;動作の流れ
&lt;/h3&gt;&lt;p&gt;まとめると、Ubuntu 側では常に次のループが回っている状態になります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Bluetoothスキャンを継続
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;接続状態を1秒ごとに確認
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;未接続なら bluetoothctl connect を実行
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;固まった場合は5秒で打ち切り
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;再試行
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これにより BlueZ 標準の不安定な自動再接続に頼らず、MX ERGO S へ明示的に接続要求を出し続けられます。この構成にしてから、Windows から Ubuntu への切り替え時の再接続がほぼ即座になり、体感としては「切り替えた瞬間に繋がる」と言えるレベルになりました。&lt;/p&gt;
&lt;p&gt;正確に言うと、仕組み上は 1 秒間隔のポーリングなので理論上のラグはゼロではありません。ただし実用上気になる遅延ではなく、以前の「5 秒かかる」「待っても繋がらない」という状態からは大きく改善しています。ポーリング間隔をさらに短くすれば理論上はより速くなりますが、CPU 負荷とのトレードオフになるため、まずは 1 秒間隔での運用をおすすめします。&lt;/p&gt;
&lt;p&gt;現在の最終構成は次のとおりです。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;PC&lt;/th&gt;
 &lt;th&gt;接続方法&lt;/th&gt;
 &lt;th&gt;補足&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Windows&lt;/td&gt;
 &lt;td&gt;Logi Bolt&lt;/td&gt;
 &lt;td&gt;レシーバー接続&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ubuntu&lt;/td&gt;
 &lt;td&gt;Bluetooth&lt;/td&gt;
 &lt;td&gt;常時スキャン＋自動 connect サービスで補完&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="まとめ"&gt;まとめ
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ポイント&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;目指したゴール&lt;/td&gt;
 &lt;td&gt;「安定接続」ではなく「切り替えた瞬間にラグなく繋がる」こと&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;問題の本質&lt;/td&gt;
 &lt;td&gt;ペアリングではなく、Ubuntu 側の自動再接続が不安定&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;切り分けの結論&lt;/td&gt;
 &lt;td&gt;検出できれば接続は成功する＝検出のきっかけ不足&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;スキャンと接続&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;scan on&lt;/code&gt; は「見つける」だけ。&lt;code&gt;connect&lt;/code&gt; は別処理&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;有効な対処&lt;/td&gt;
 &lt;td&gt;常時スキャン＋未接続時に &lt;code&gt;connect&lt;/code&gt; を明示実行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;常駐方法&lt;/td&gt;
 &lt;td&gt;systemd ユーザーサービスでログイン中に動かし続ける&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;連続実行対策&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;timeout 5&lt;/code&gt; で接続処理を長時間残さない&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;アドレス注意&lt;/td&gt;
 &lt;td&gt;現在ペアリング中のアドレス（末尾 &lt;code&gt;3A&lt;/code&gt;）を使う&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;レシーバーの事情&lt;/td&gt;
 &lt;td&gt;Logi Bolt と Unifying は非互換。新しいマウスはLogi Bolt移行が進んでいる&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;もっと手っ取り早い方法&lt;/td&gt;
 &lt;td&gt;予算があれば Logi Bolt レシーバーを追加購入して両PCとも統一するのが最速&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;追加のレシーバーを買わずとも、Ubuntu 側の自動接続をスクリプトで補うことで、Easy-Switch による切り替えをほぼラグなく運用できます。MX ERGO S に限らず、Easy-Switch対応のロジクール製マウス・キーボード全般で同じ考え方が応用できるはずです。&lt;/p&gt;</description></item></channel></rss>