web-dev-qa-db-ja.com

ディスプレイモニターの入力ソースを変更するUbuntuコマンドライン?

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のコマンドラインを使用してモニター入力ソースを変更しようとした人はいますか?

4
Saurabh Verma

探しているコマンドは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 [入力ソース選択]

  • 値15:DP
  • 値16:mDP
  • 値17:HDMI(MHL)1
  • 値18:HDMI(MHL)2

値は、モニターの[入力ソース]メニューと同じ順序です。

たとえば、DPへの切り替え:ddccontrol -r 0x60 -w 15 dev:/dev/i2c-4

7
Adrien Beau

エイドリアン・ボーの答えに加えて。

モニター入力ソースの変更

入力ソースの標準変更コマンドは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データベースに追加する

ここで、モニターを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つのコマンドをキーボードショートカットにバインドして、高速切り替えに使用できます。すごい!

1
Ashark