接続されているモニターを区別するにはどうすればよいですか?

接続されているモニターを区別するにはどうすればよいですか?

ノートパソコンをドッキングしたときにXserverのディスプレイレイアウトを自動的に変更するには、このイベントが実際に発生したことを検出するだけでなく、どれの複数のドッキング ステーションの設定を区別できるようにモニターが接続されています。つまり、複数のドッキング ステーションがあり、それぞれに異なるモニターが接続されています。これは Linux ではどのように可能でしょうか (POSIX シェル コードが望ましい)?

答え1

実際にドッキング/アンドッキング時にディスプレイを自動的にセットアップする方法を探している場合は、以下を検討することをお勧めします。オートランダー自分で似たようなことを始める前に(私とは違って;)。

特定のディスプレイ出力がモニターに接続されているかどうかを検出するには、適切な答えがあります。この質問では最も興味深いのは、または と/sys/class/drm/card0-*-*/status表示されるものを見ることです。connecteddisconnected

これはこの質問で述べられている問題を解決するものではありませんが、/sys/class/drm/card0-*-*/edid(キャッシュされた)が存在するため、非常によく似たアプローチを取ることができます。EDID または DDC 情報それぞれのモニターの。運が良ければ、このデータにはモニターのシリアル番号も含まれており、同じモニタータイプのセットアップでも区別できます ( で確認できますedid-decode /sys/class/drm/.../edid)。

そこで、接続されたモニターのセットを区別するために、私は次のシェル関数を使用しています。これは、同様の機能を持つ関数に基づいています。オートランダー

# hash_sysfs_edid() simply concatenates the md5 hashes of all connected 
# monitors and hashes them again so that the output is always 32 characters long.
hash_sysfs_edid () {
  edid_hash=""
    for DEVICE in /sys/class/drm/card*-*; do
        [ -e "${DEVICE}/status" ] && grep -q "^connected$" "${DEVICE}/status" || continue
      edid_hash="${edid_hash}"$(md5sum "${DEVICE}/edid" | awk '{print $1}')
    done
  echo $(echo "$edid_hash" | md5sum | awk '{print $1}')
}

関連情報