
2026/05/16 11:13
2 台のコンピューター、1 つのモニター、一切のいじくりなし(2025)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
核心となる成果は、単一のモニターを使用して Mac ノートパソコンと Linux デスクトップの間で瞬時に切り替えられるシームレスな自動化された KVM 設定の実現です。これにより、MSI MPG 321URX に内蔵されている接続制御を活用して、手動でのケーブル変換や高価な外部スイッチの必要性を排除します。macOS では、軽量なツール「m1ddc」を使用し、キーボードショートカットを通じてモニターに特定のコマンドを送信します。Linux でも同様の結果を得るためには「ddcutil」が使用されますが、USB-C 接続をモニターの内部ディスプレイポート信号に正しくマッピングするにはカスタムコードが必要となります。本プロジェクトは、高価な Samsung や Alienware といったハイエンドブランドではなく、ゲーマー向けのアフフォラードな QLED モニターを活用するという費用対効果の高い戦略を強調しています。Windows ユーザーはこの機能をモニターのネイティブソフトウェアを使用して再現することもできますが、現在の手法は完全に正確でゼロの手作業によるコマンドに依存しており、自動化されたホットキーが失敗した場合、転移が機能しなくなります。結局のところ、このアプローチは、重要なハードウェア投資なしに、オープンソースユーティリティによって非常に効率的でプロフェッショナルグレードのワークフローを作成できることを実証しています。
本文
MacBook と Linux デスクトップを使い分けており、両方に同じキーボード、マウス、モニタを接続しています。もしリモートワークをしているなら、きっとお気持ちをお察しいただけるでしょう……仕事用はラップトップ、趣味用はデスクトップ、という使い分けつつも、モニターと周辺機器は一本しかないのですから。
これまで這兩台の切り替えはいつも面倒でした。モニター背面でケーブルをplug/unplug を繰り返すとか、不安定な USB-C スイッチを使うとか、イライラするdongle を使うといった選択肢しかなかったからです。
さて、モニターの最新機種へのアップグレードに伴い、この問題を「いっぺんに解決」したいと思っていたのです。両機間の切り替えを瞬時に行いたい――つまり、キーボードから手を離すことさえ禁じられたレベルで素早く。
とうとう見事に達成しました。これが私のソリューションです:
[動画コンテンツプレースホルダー]
この実現には主に次の 2 つの要素が寄与しました:
- KVM(キーボード・ビデオ・マウス)機能内蔵のモニターを取得したことで、USB入力をモニターへ直接接続し、アクティブな入力ソースに合わせて自動的に切り替わることができるようになったこと。さらに…
- HDMI や DP ケーブルを通じてモニターの DDC(Display Data Channel)コマンドを制御できるようになったことです。
それぞれの仕組みについて順次ご説明します。
モニターについての話
結論から言えば、使っているのは MSI MPG 321URX です(アフィリエイトリンク)。この機種の最大の特徴は、プログラミングでもゲーミングでも大活躍の 4K・240Hz の美しすぎる QLED パネルです。(※同シリーズの新モデルも现已市場に出回っており、本稿で述べる設定はそのまま適用できると思われます。)
Samsung や Alienware など他社でも同様のパナエルを搭載したモニターを販売していますが、MSI はコストパフォーマンスが優れています。また、ゲーマー向けという装飾要素をモニターの背面に配置しており、私の壁だけがそれを「見せびらかす」必要がないことも評価しています。ごめんなさい、お隣の壁さん……。
モニターでは以下の 2 つの入力を活用しています:
- USB-C: macOS の MacBook に接続
- DisplayPort: Linux デスクトップに接続
周辺機器の接続には、モニターの搭載 USB ポートと 3.5 mm オーディオジャックを利用しています。さらに、ある USB ポートにハブを接続して使用可能ポート数を増やしています:
[画像プレースホルダー]
実際には上記の図面ほど整然とはしておりません(裏面のケーブル管理はもう少し複雑ですが)、それでも壁だけがそれを見ているので許してください。もう一度、ごめんなさい、お隣の壁さん……。
この構成がうまく機能する秘密は、モニターの KVM 機能にあるのです。USB ポートから入力されたデータが、アクティブな入力ソースに応じて自動的に切り替わるようになっています。つまり、MacBook で USB-C を経由して使用时にはモニターの内蔵 USB ハブも USB-C を経て動作し、Linux デスクトップで DisplayPort を経由して使用时には同じハブが USB-A 接続を通じてデスクトップにデータを送るのです。
かつてはモニター本体のコントローラーを手動で操作して入力切り替えを行っておりましたが、先ほど述べた通り「キーボードから手を離すこと」は失敗と見なされます。そんなことは許されません!
Display Data Channel(DDC)
では登場します、DDC です。これは HDMi、USB-C、DisplayPort のいずれの映像ケーブルを通じてモダンなモニターへ指示を送るための機能です。DDC を利用すれば、音量の変更や輝度・コントラストの調整に加え、重要なのは入力ソースの切り替えを一切触らずに実行できます!
コマンドラインツールを用いれば DDC コマンドをモニターへ送信でき、OS によって異なるブリッジソフトウェア(shim)を用意することで、特定のキーボードショートカットにバインドすることも可能です。
macOS(Apple Silicon搭載マシンの場合)
Apple Silicon を搭載した Mac では
m1ddc というツールを使ってモニターの DDC シグナルを送ることができます。Intel チップを搭載している場合でも代替方案があります。
以下のようなコマンドを実行できます:
brew install m1ddc # ツールをインストール m1ddc display list # 接続されたモニター一覧を表示 m1ddc display <前回の ID> chg volume 100 # 音量を変更 m1ddc display <前回の ID> set input <入力ソース> # 入力ソースを切り替え
m1ddc の README に各入力ソースに対応するコードがリストアップされています。私の場合、DisplayPort は入力コード「15」で、モニターの ID は 381C72C8-0CDA-4B71-A1CD-F8AFE90AB0ED です。したがって、この呪文を唱えるだけで DisplayPort に入力ソースが切り替わります:
m1ddc display 381C72C8-0CDA-4B71-A1CD-F8AFE90AB0ED set input 15
m1ddc コマンドを用意すれば、Hammerspoon を使って CTRL + SHIFT + = にバインドします:
-- ~/.hammerspoon/init.lua のどこかに配置 -- MSI MPG 321URX に対して DDC コードを送信し、DisplayPort 入力ソースに切り替える hs.hotkey.bind({ "ctrl", "shift" }, "=", function() local display_id = "" -- 'm1ddc display list' を実行して取得してください local displayport_code = "15" -- m1ddc の README に記載されている入力コード local command = "/opt/homebrew/bin/m1ddc display " .. display_id .. " set input " .. displayport_code hs.execute(command) end)
同様に、Linux 側では同じキーボードショートカットで USB-C(マブック)へ戻るようバインドします。
Linux(KDEデスクトップ環境の場合)
Linux では
ddcutil を用いてモニターを制御するのが実績があります。
sudo pacman -Suy ddcutil # パッケージマネージャー経由でインストール ddcutil detect # 接続されたモニター一覧を表示
ddcutil は m1ddc に比べて少し難易度が高いかもしれません。変更したい設定(入力ソース、音量、輝度など)のコードと値を手探りで特定する必要がありますが、幸運なことに ddcutil がこれらの情報を簡単に発見できるように設計されています。私の場合は次のように表示されます:
... Feature: 60 (Input Source) Values: 11: HDMI-1 12: HDMI-2 0f: DisplayPort-1 10: DisplayPort-2 ...
「input」は Feature 60 なので、入力ソースを変更するにはこちらを操作すればよいでしょう。値については複数の選択肢がリストアップされていますが、USB-C はありません。モニターには HDMI×2、DisplayPort×1、USB-C×1 のポートしか搭載されていませんので、帰納法によって推測すると、表示されている「DisplayPort-2」は実態は USB-C ポートであり、DisplayPort Alt Mode を通じて動作していると考えるのが妥当です。
これらを踏まえると、入力ソースを USB-C へ切り替えるコマンドは以下のようになります:
ddcutil feature 60 set 10 # '10' が DisplayPort Alt Mode を経由する USB-C ポートに対応すると仮定して
※元のテキストでは出力が切れているため、論理的なコマンドを再現しています。
m1ddc の場合とは異なり、表示デバイス指定は省略しています(デスクトップには単一のモニターしか接続されていないため)。ノートパソコンのように内蔵画面を持つデバイスも接続している場合は、複数画面を利用する際にこれらのコマンドを適切に調整する必要があります。
KDE デスクトップ環境を使用しているため、最も簡単な方法は KDE 内蔵のショートカット設定マネージャーから CTRL + SHIFT + = にバインドすることです:
[画像プレースホルダー(KDE 設定画面)]
簡単でしょう?キーを押すだけで
ddcutil が実行されます!
Windows
Windows 環境でも同様の設定が可能です。私は実際に試していませんが、MSI から提供されているモニター制御用 Windows アプリでは、キーボードショートカットにアクションを割り当てられるようであるため、別途 CLI コマンドを実行しなくても入力ソースを切り替えられる可能性があります。
結論
ご覧いただければ幸いです。外部の KVM デバイスを介さずに入力ソースを通過させ、しかもキーボード単体でスイッチトリガーが可能な KVM ソリューションです。
ご清聴ありがとうございました。DDC をしてまた会いましょう!