ラップトップが接続されているときにXserverの表示レイアウトを自動的に変更するには、イベントが実際に発生するかどうかを検出する必要があります。どの接続されたモニターは、異なるモニターが接続されている複数のドッキングステーションを持つ複数のドッキングステーション設定を区別できます。 Linux(好ましくはPOSIXシェルコード)でこれはどのように可能ですか?
答え1
実際にドッキング(ドッキング解除)されたときにモニターを自動的に設定する方法を探している場合は、確認してください。自動整列私自身と似たようなことを始める前に(私とは異なり)。
特定のディスプレイ出力がモニターに接続されているかどうかを検出するための良い答えがあります。この質問には。最も興味深いのは/sys/class/drm/card0-*-*/status
またはconnected
。disconnected
これはこの質問に記載されている問題を解決しませんが/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}')
}