Dell U3415Wモニターに接続された2台のPCがあります。1つはHDMI入力付きのubuntu 14.04 LTS OS、もう1つはDP入力付きのWindows 10です。私がやりたいのは、画面上のメニューボタン(OSD)を使用せずに、これら2つの入力ソースを切り替えることです。 Windowsの場合、コマンドラインからDP入力からHDMI入力への切り替えを行うDellディスプレイマネージャーがあります。しかし、コマンドラインを使用してubuntuでHDMIからDP入力に切り替える方法やモニターツールを見つけることができませんでした。
Ubuntuでワインを使用してDellディスプレイマネージャーとモニタードライバー(exeファイル)をインストールしようとしましたが、うまくいきませんでした。 buntuのコマンドラインを使用してモニター入力ソースを変更しようとした人はいますか?
探しているコマンドはddccontrol
で、通常のUbuntuリポジトリから入手できます。
警告!ddccontrol
はi2cバスを介してデータを送信しますが、これは本質的に危険なことです。ほとんどのi2cデバイスは非常に低レベルで非常に愚かです。1つのコマンドを誤って配置するだけで、それらをブロックしたり、少なくともコンピューターをフリーズしたりすることができます。とはいえ、DDC/CIはやや標準化され、確立された非常に古い技術であるため、リスクはそれほど高くありません。
このため、デフォルトでは、i2cデバイスにはrootのみがアクセスできます。ほとんどの場合、以下のすべてのコマンドの前にSudo
を付ける必要があります。 (指示を読んで、盲目的にコピー/貼り付けしないようにするために、私は自発的にそれをしませんでした。)
最初に行うことは、コンピューター内のさまざまなi2cバス(プローブには11個のバスがあります...)を調べて、画面に接続されているグラフィックカードに実際にあるものを検索することです。
ddccontrol -p
コマンドはそれを行い、見つかったものを表示します。コンピューターからのサンプル出力:
Detected monitors :
- Device: dev:/dev/i2c-4
DDC/CI supported: Yes
Monitor Name: VESA standard monitor
Input type: Digital
(Automatically selected)
Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-4...
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELD070.xml"
Document not parsed successfully.
EDID readings:
Plug and Play ID: DELD070 [VESA standard monitor]
Input type: Digital
I/O警告に注意してください。これは単に、モニターがddccontrol
に認識されていないことを意味するため、サポートするすべての非標準コマンドと値の説明を知りません。これはコマンドの発行を妨げるものではありませんが、試行錯誤のプロセスである可能性があります。
また、検出されたバス名にも注意してください:dev:/dev/i2c-4
この例では。
ddccontrol -d dev:/dev/i2c-4
コマンドは、可能なすべてのコントロール(0x00〜0xff)を読み取り、見つかった値を表示します。もちろん、プロービング時に見つかったバスを使用する必要があります。
ddccontrol
は、既知のコントロールと値の説明も表示します。標準のもの、またはXMLファイルに記述されているもののいずれかです。私の例では、モニター用のXMLファイルはありません(上記のI/O警告を参照)。
ddccontrol -r 0x10 dev:/dev/i2c-4
は、0x10コントロールの現在の値を照会します。出力例:
Reading 0x10...
Control 0x10: +/21/100 C [Brightness]
現在の値は中央の数字で、私の例では21です。その後の値は最大になるはずですが、これは範囲の値(明るさやコントラストなど)でのみ機能し、リストアイテムではあまり機能しないようです。
ddccontrol -r 0x10 -w 25 dev:/dev/i2c-4
は、0x10コントロールの値を設定します。出力例:
Writing 0x10, 0x19(25)...
Control 0x10: +/25/100 C [Brightness]
16進形式または10進形式で値を設定できることに注意してください。私の例では、10進数を使用しました。
モニター入力の切り替えに使用するコマンドと値が見つかりました。もちろん、モニターの値を見つけるために実験する必要があるため、うまく機能します。私のものはDell UltraSharp U2515Hです。
Control 0x60 [入力ソース選択]
値は、モニターの[入力ソース]メニューと同じ順序です。
たとえば、DPへの切り替え:ddccontrol -r 0x60 -w 15 dev:/dev/i2c-4
エイドリアン・ボーの答えに加えて。
入力ソースの標準変更コマンドは0x60です。したがって、このようなコマンドを使用する必要があります。
ddccontrol -r 0x60 -w $some_value dev:/dev/i2c-X
しかし、どの値がどの入力ソースの原因であるかをどのようにして知るのでしょうか?ベンダーがそのような情報を提供しているかどうかはわかりませんが、ベンダーに尋ねることなくそれを知る方法を見つけました。
(Sudo ddccontrol -r 0x60 dev:/dev/i2c-X
を使用して)0x60コマンドの現在の値を読み取るだけです。次のようなものが返されます。
モニターがddccontrolデータベースにある場合
EDID readings:
Plug and Play ID: DELA0D7 [Dell P2217H (VGA)]
Input type: Analog
Reading 0x60...
Control 0x60: +/257/4626 C [Input Source Select]
モニターがddccontrolデータベースにない場合
EDID readings:
Plug and Play ID: DELA0D9 [VESA standard monitor]
Input type: Digital
=============================== WARNING ===============================
There is no support for your monitor in the database, but ddccontrol is
using a basic generic profile. Many controls will not be supported, and
some controls may not work as expected.
Please update ddccontrol-db, or, if you are already using the latest
version, please send the output of the following command to
[email protected]:
LANG= LC_ALL= ddccontrol -p -c -d
Thank you.
=============================== WARNING ===============================
Reading 0x60...
Control 0x60: +/4369/4626 C [Input Source Select]
モニターがddccontrolデータベースにないものと仮定しましょう。この4369値に注意してください。これは、現在モニターするために話しているケーブルを介してモニターを現在の状態に戻すために使用する値です。別のトランスポートケーブルを使用する場合、この値は異なることに注意してください(たとえば、vgaやhdmiを介して監視するために話すために使用するポートは、同じ入力ソースであっても異なります)。
ここでは、モニターのosdメニューを使用した入力ソースの自動選択を無効にします。これは現時点では必要ないためです。次に、モニターのosdメニューを使用して入力ソースを切り替え、現在の値を読み取ります。この例では、最初のコンピューターを使用してhdmi経由でモニターするために話している間、モニターをvgaソースを使用するように切り替えました(ソースは別のコンピューターから来ています)。戻り値は4353です。使用する予定のすべての入力に対して同じことを行います。切り替え。
わかりました。これで、さまざまなソース状態のモニターの値がわかりました。以下を使用して、モニターの入力ソースを切り替えることができます。
Sudo ddccontrol -r 0x60 -w 4353 dev:/dev/i2c-X # switch to vga input using hdmi cable on Dell P2217H
Sudo ddccontrol -r 0x60 -w 4369 dev:/dev/i2c-X # switch to hdmi input using hdmi cable on Dell P2217H
値は10進数で表示されますが、次のような16進数値を使用できます。
Sudo ddccontrol -r 0x60 -w 0x1101 dev:/dev/i2c-X # 0x1101 is 4353
Sudo ddccontrol -r 0x60 -w 0x1111 dev:/dev/i2c-X # 0x1111 is 4369
ここで、モニターをddccontrol-dbに配置します。モニターのすべての機能の値と、どの値がどの状態に適用されるかを調べる必要があります。次に、これらすべての値を記述するxmlファイルを作成する必要があります。異なるポートが異なるモニタープラグアンドプレイIDを使用するため、いくつかのxmlファイルがあることに注意してください。たとえば、Dell P2217Hモニターの場合、DELA0D7.xml(このIDはvgaを介して接続するときに使用されます)とDELA0D9.xml(このIDはhdmiを介して接続するときに使用されます)の2つのファイルを作成します。 Dell P2217Hには、1つのvga、1つのhdmi、1つのディスプレイポートがあります。ディスプレイポートデバイスを持っていないため、探索を行ってDELA0D8.xmlを作成することはできません(このIDは、ディスプレイポート経由で接続するときに使用されます)。
Xmlパラメータの説明は、データベース構造の監視ページ(file:///usr/share/doc/ddccontrol/html/apes02.html)にあります。
機能(キャップ)およびプラグアンドプレイIDは、次を使用して受信できます。Sudo ddccontrol -c dev:/dev/i2c-X
。
準備ができたら、 https://github.com/ddccontrol/ddccontrol-db リポジトリに貢献します。
同じモデルの複数のモニターを単一のコンピューターに接続したと仮定します。次に、何らかの方法でモニターを区別する必要があります。この目的のために、モニターのシリアル番号によってi2cバス番号を決定するスクリプトを作成しました。私はそれを使用して行いますSudo get-edid -b $X 2>/dev/null | grep $TARGET_SERIAL
詳細については私のリポジトリを参照してください: https://github.com/Ashark/Ashark-bin/blob/master/i2c-bus-by-monitor-serial
次に、このスクリプトを参照してください。 https://github.com/Ashark/Ashark-bin/blob/master/switch-monitor-source 次のように使用できます。
switch-monitor-source -s 0G2TG7360DXB -u # get and cache i2c-id number for monitor with specified s/n
switch-monitor-source -s 0G2TG7360DXB -v # switch that monitor to vga input
switch-monitor-source -s 0G2TG7360DXB -h # switch that monitor to hdmi input
これで、最後の2つのコマンドをキーボードショートカットにバインドして、高速切り替えに使用できます。すごい!