Dell U4025QW で入力ソースを Mac のキーボードで切り替えたい (KVM)

要約: BetterDisplay を使えばできる

2025-12-30 追記: 切り替えする CLI をつくった: モニタの入力ソースを切り替える macOS のアプリを書いた - daily dayflower

導入

モニターとして Dell U4025QW を使っている。

入力として Thunderbolt, DisplayPort, HDMI port があり、また別途 USB downstream port もある。 USB downstream とはモニターにつないだ USB 機器の制御を PC にわたすものであり、ようするに PC からみるとUSB ハブとして振る舞う。

Thunderbolt ポートにつなぐと、ディスプレイとして表示されるのはもちろんのこと、 PC への USB PD 給電、 USB downstream としても動作する。つまりケーブル1本を Mac 等につなぐだけで、 PC への給電からモニターに接続したキーボードやトラックパッドの接続もしてくれるとても便利なモニターである (いまどきのちょっといいモニターだとだいたい同じことはできるが)。

いっぽう、別の PC から DisplayPort や HDMI につなぎ、さきほど言及した USB downstream port もつなぐこともできる (この場合はケーブルが2本、さらに PC 向けに別途充電ケーブルが必要となる)。

この状況では、現在画面に出力される PC 側に、モニターに接続した USB 機器が接続される。つまり、モニター側で画面出力を切り替えると、モニターに接続したキーボード等で操作できる対象の PC も切り替わることになる。この挙動を Dell は USB KVM と称している。

わざわざ “USB” KVM と書いたのは、ほかに Network 経由でキーボードやポインティングデバイスの入力を転送する Network KVM という機能もあるからである (ただし、それぞれの PC に Dell Display and Peripheral Manager — DDPM のインストールが必要)。本稿では Network KVM については取り扱わない。

また、2台の PC をつないだときに両方の画面を同時に出力することもできる。 PIP (Picture-in-Picture) と PBP (Picture-by-Picture) の双方をサポートしており、 USB KVM として入力を切り替えることもできる。この機能についても本稿では取り扱わない。

わたしはこの Dell U4025QW に MBP と MBA を接続している。

  • MBP - Thunderbolt
  • MBA - DisplayPort, USB downstream, (+ USB PD)
  • Display - USB Keyboard, USB Trackpad

キーボードで画面出力を切り替えたい

USB KVM で入力を切り替えるためには、入力ソースを切り替える必要がある。このためには、

  1. モニターまで手を伸ばす
  2. モニター背後にあるスティックをクリックする
  3. 入力信号を選択する (直前に入力信号の切り替えをしているのであればそのままでよい)
  4. クリックする
  5. 入力を選ぶ (”自動” を選ぶと、次の入力ソースに変わる)

このように複雑な手順をふむ必要がある。

また、あまり多用するとこのスティックが壊れるんじゃないかというおそれもある。

ところで、昔ながらの KVM は、物理ボタンによって接続先を切り替えることができるが、キーボードのアクションによって切り替えることができるものもある。

Dell の USB KVM でも、キーボードにより入力ソースを切り替えることはできないのだろうか?

Dell Display and Peripheral Manager (DDPM)

実はさきほどちらっと言及した Dell Display and Peripheral Manager (以前は Display 専用の Dell Display Manager だった) を使うと、キーボードなどから入力を切り替えることができる。

インストールによりショートカットキーによって切り替えができるようになったが、接続しているすべての PC でインストールし起動しておく必要がある。

てっきりモニター本体にショートカットキーが登録され、モニターがキーボード入力を解釈して自動的に切り替えるもの (つまり DDPM の常駐は不要) とおもっていたが、どうやらそうではないらしい。単純に DDPM がショートカットキーをうけとり、入力ソースを切り替えているようだ。

DDPM は Rosetta 2 を要求するし、もっさりしているしで、正直利用したくない。ほかの手段で入力ソースの切り替えができないか考える。

DDC/CI と Input Source

モニタと PC の間で情報をやりとりする仕様として DDC というものがあり、その上でモニターの設定を変更するためのインタフェースとして CI (Command Interface) が定義されている。

ディスプレイの輝度やコントラストを調整することができるが、具体的なコマンドの仕様を VCP (Virtual Control Plane) と呼ぶ。

VCP の中には入力ソースの切り替えも定義されていて、コマンドとしては 0x60 が対応する。

これを利用すれば DDPM に頼らずともモニターの入力を切り替えることができそうだ。

BetterDisplay

ところで macOS 用に BetterDisplay というアプリがあり、ツールバーから解像度を変更できたりする。とても高機能なツールで、解像度の変更だけでなく、仮想モニタをつくることすらできる。

実は無印 M2 以下の Mac で U4025QW をフルスペックで使うには EDID をオーバーライドする必要があり (気になる方はググってください)、もともとそのために BetterDisplay を利用していた。この BetterDisplay を使うと、キーボードショートカットで入力ソースを切り替えることができる。

BetterDisplay の設定のキーボードにおいて “カスタムキーボードショートカット” があり、その “DDC ディスプレイ入力ソース” で指定の入力への切り替えに対してショートカットを定義できる。“デフォルトのディスプレイ” となっているところ “DELL U4025QW” を選択し、入力として “USB-C / TB 1” や “DisplayPort 1” を選択。 キーを記録すれば完了である。

自分の場合、 MBP を Thunderbolt、 MBA を DisplayPort につないでいるため、

  • MBP 側で “DisplayPort 1” への切り替えにショートカットキーを登録
  • MBA 側で “USB-C / TB 1” への切り替えにショートカットキー (同じキー) を登録

することで、同じキーバインドを入力するたびに MBP と MBA で切り替えることができるようになった。

コマンドラインで切り替える

場合によってはショートカットキーではなく、 Raycast などから切り替えたいこともあると思う。

BetterDisplay は CLI インタフェースもあり、それを通じて入力を切り替えることも可能だ。

/Application/BetterDisplay.app/Contents/MacOS/BetterDisplay operation set -productNameLike=U4025QW -feature=ddc -vcp=inputSelect -value=15

value のところは U4025QW の場合、

  • Thunderbolt: 25
  • DisplayPort: 15
  • HDMI: 17

となっているようだ。 U4025QW の場合、と書いたが、この入力ソースの種別は、だいたいのモニターにおいて共通なようである。 (ちなみに Thunderbolt 2 は 27, DisplayPort 2 は 16, HDMI 2 は 18)

その他コマンドラインオプションの詳細は https://github.com/waydabber/BetterDisplay/wiki/Integration-features,-CLI を参照のこと。

フルパス指定ではなくパスの通ったバイナリを実行したい場合、 betterdisplaycli を使うこともできる。 homebrew でインストール可能ということだが、残念ながら手元の環境ではうまくインストールできなかった。このため Releases からビルド済バイナリを取得した。

betterdisplaycli の場合、引数として “operation” は不要であり、

betterdisplay set -productNameLike=U4025QW -feature=ddc -vcp=inputSelect -value=15

となる。

BetterDisplay がない場合

さきに整理したとおり、要件 (仕様) としては

  • VCP として 0x60 が Input Source の read/write
  • value としては
    • Thunderbolt: 25
    • DisplayPort: 15
    • HDMI: 17

であり、 DDC/CI で操作することができるツールがあれば、上記と同じことが可能である。

m1ddc (これは BetterDisplay の作者によるもの) や ddcctl を利用すればよい。

m1ddc の場合、

m1ddc display 1 set input 15

とすれば、 DisplayPort に切り替わる。

ddcctl は手元ではうまく動かなかった。

次の入力ソースに切り替えたい (未達)

いったん希望することは実現できた。しかし、それぞれの PC で接続するポートが固定になっているし、個別の設定が必要になる。

Dell の DDPM では、ショートカットキーにより、 “次の入力ソース” に切り替えることができる。これは DDC/CI VCP により実現可能だろうか?

BetterDisplay では DDC の詳細情報を取得することもできる。これによると VCP 0x60 (InputSource の選択) で指定可能な値は 25, 15, 17 だけである (個別の値についてはすでに解説済み)。

実は隠しコマンド的に次の入力ソースに切り替えができる値があるのかと思い、0, 254, 255 あたりでためしてみたが、残念ながら切り替えることはできなかった。ほかの値で適合するものがあるのかもしれないし、 Input Source とは違う独自 VCP コマンドにあるのかもしれない。あるいはまったくそのようなものはないのかもしれない。

現時点で BetterDisplay で "次の入力ソース" を実現することは困難だが、 DDC を直接さわることで、現在の VCP 0x60 (Input Source) の状態を取得し、それとは異なる Input Source を指定することで実現できそうである。時間ができたらそのようなツールをつくってみようと思う。

2025-12-30 追記: つくってみた

dayflower.hatenablog.com

まとめ

BetterDisplay を利用することで、キーボードショートカットからモニタの入力ソースを切り替えることができた。本稿では U4025QW を利用しているが、USB downstream も追随して切り替え可能なモニタであれば、同様に KVM として動かすことができる。仮に USB downstream に対応していなかったとしても、モニタの入力切り替え自体は動作する。

また、 CLI による操作についても説明した。これを利用すれば Raycast などから切り替えることが可能であるし、また、一定時間ごとに入力ソースを切り替えるデモモードなども実現可能だろう。

参考文献

github.com

本文中で解説した、モニタを制御するクローズドソースのアプリ。 CLI としての動作も可能。

github.com

DDC/CI を通じてモニタの輝度やボリュームを操作することができるオープンソースのアプリ。残念ながら入力ソースの切り替え機能はなさそう。現在は BetterDisplay の作者がメンテしている。

github.com

Swift 製の DDC 操作ライブラリ。サンプルとして CLI も付属している。 BetterDisplay の作者によるもので、 MonitorControl でも利用されている。

github.com

これも BetterDisplay の作者によるもので、 Apple Silicon macDDC/CI を通じてディスプレイを操作するツール。おそらく BetterDisplay の源流になっていると思われる。

github.com

Mac 用の DDC/CI 操作ツール。 2022年で更新が止まっているし、手元ではうまく動作しなかった。

www.ddcutil.com

Linux 用のきわめて著名な DDC/CI 操作ツール。

www.ddcutil.com

ddcutil のドキュメントに記載されている Mac 用ツールへのリンク集。

github.com

Dell U4323QE における PBP (Picture-by-Picture) に絞った DDC/CI 解説 (解析)。

ここに VCP 0xE7 に 0xff00 を書き込むことで next input にできるという記述があった。試してみたところ、あくまで PBP or PIP mode (つまり両 PC の画面同時出力) での USB 入力の切り替えにしか用いることができず、入力ソースの切り替えはできなかった。

github.com

DDC/CI により入力ソースやスピーカーをコントロールする StreamDeck のためのツール。

github.com

AutoHotkey (Windows) で入力ソースを制御するツール。