安定したビデオ出力名を取得するには?

安定したビデオ出力名を取得するには?
  • システム:デルラティチュード5591
  • CPU i7-8850H
  • GPU:統合Intel HD630(専用GPUなし)
  • USB-Cドッキングステーション:WD15
  • 画面:2x Acer G226HQL(HDMIによる直接接続とDVIによるminiDPアダプタードッキング)

  • オペレーティングシステム:KDEネオン18.4

  • カーネル: 5.3.0-45-一般

ドックを再接続するたびに、画面は黒のままになります。 3画面レイアウトを再度有効にするには、xrandr(arandr、KDEディスプレイ設定など)を開く必要がありました。私はこれが不安定なポート名のためだと思います。

すべての構成:

grep . /sys/class/drm/*/status
/sys/class/drm/card0-DP-1/status:disconnected
/sys/class/drm/card0-DP-2/status:disconnected
/sys/class/drm/card0-DP-5/status:connected        # <---- 5
/sys/class/drm/card0-DP-7/status:connected        # <---- 7
/sys/class/drm/card0-DP-8/status:disconnected
/sys/class/drm/card0-eDP-1/status:connected
/sys/class/drm/card0-HDMI-A-1/status:disconnected
/sys/class/drm/card0-HDMI-A-2/status:disconnected
/sys/class/drm/card0-HDMI-A-3/status:disconnected

これで、ドックを外して再接続すると、次のようになります。

/sys/class/drm/card0-DP-1/status:disconnected
/sys/class/drm/card0-DP-2/status:disconnected
/sys/class/drm/card0-DP-6/status:connected        # <---- 6
/sys/class/drm/card0-DP-8/status:connected        # <---- 8
/sys/class/drm/card0-DP-9/status:disconnected
/sys/class/drm/card0-eDP-1/status:connected
/sys/class/drm/card0-HDMI-A-1/status:disconnected
/sys/class/drm/card0-HDMI-A-2/status:disconnected
/sys/class/drm/card0-HDMI-A-3/status:disconnected

DP-5DP-7現在DP-6およびで呼び出されますDP-8。数字は毎回変わります。

これが起こるのを防ぐ方法は何ですか?

編集1:関連性のある行動を学びましょう。 PCH温度を監視する温度ウィジェットがあります。また、再起動するたびに名前が変更されます。acpi/Thermal_Zone/1-pch_cannonlake/Temperature入力した数字は再起動するたびにほぼ変わります。モニターは頻繁に再構成する必要があります。

編集2:を探すアーチフォーラムの投稿これは非常に似た問題を説明します。彼らの解決策はカーネル4.18にダウングレードすることでした。私は現在これを実行しており、4.18.0-25-genericトリックを実行しているようです。

編集2a:4.18.0-25-generic私は違いを見つけました。出力はgrep . /sys/class/drm/*/status同じままで、再接続するたびに数字が変わり続けます。

grep . /sys/class/drm/*/status
/sys/class/drm/card0-DP-1/status:disconnected
/sys/class/drm/card0-DP-2/status:disconnected
/sys/class/drm/card0-DP-5/status:connected        # <--- DP-5!
/sys/class/drm/card0-DP-6/status:connected        # <--- DP-6!
/sys/class/drm/card0-DP-7/status:disconnected
/sys/class/drm/card0-eDP-1/status:connected
/sys/class/drm/card0-HDMI-A-1/status:disconnected
/sys/class/drm/card0-HDMI-A-2/status:disconnected
/sys/class/drm/card0-HDMI-A-3/status:disconnected

しかし、どういうわけか次のような安定したxrandr数字を「見る」:DP-1-1DP-1-2

xrandr -q | grep connected
eDP-1 connected 1920x1080+3839+0 (normal left inverted right x axis y axis) 344mm x 194mm
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-3 disconnected (normal left inverted right x axis y axis)
DP-1-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 509mm x 286mm
DP-1-2 connected primary 1920x1080+1919+0 (normal left inverted right x axis y axis) 509mm x 286mm
DP-1-3 disconnected (normal left inverted right x axis y axis)

最新のカーネルでは、xrandr は drm 列挙と同じ数字を表示します。

答え1

同様の問題が発生し、X.orgと/sys/class/drmの間のポートIDの変更に関連する問題を抱えている人がいる場合に備えて、この記事にいくつかの情報を追加すると便利です。

優秀https://bbs.archlinux.org/viewtopic.php?id=244118Arch Linuxスレッドで重要な点を確認してください。

xrandrが少なく、amdgpuが多いです。

これをさらに変更するには xrandr ではなく、xrandr は /var/log/Xorg.0.log の例に示すように Xorg ポート ID をユーザーに公開します。

さらに、この動作を回避するためにカーネルをダウングレードする当時の「ソリューション」(4.18)は、実際の意味の解決策ではなく、決してそうではありませんでした。

以下は参考にするいくつかの点です。

  • 各Xorgドライバは異なる動作をします。たとえば、この問題が発生したときに、誰かがDP-1がamdgpuによってDisplayPort-0に変更された関連amdgpuコードを掘り下げました。ポートIDの内部処理方法に関する各Xorgドライバの動作を決定するには、私がアクセスできるよりも多くのデータが必要です。

  • /sys/class/drmポートにはカーネルモード設定機能があり、モード設定が有効なドライバが必要だと思います。 drm / kmsのかなり良い概要は次のとおりです。http://trac.gateworks.com/wiki/linux/display 引用するには:

DRM [Direct Render Manager] は、Freescale I.MX6 プロセッサなどのビデオドライバと通信するカーネルのドライバサブシステムです。 DRMはこれらの要求を管理しているため、ioctl()呼び出しを使用して複数のユーザースペースプログラムを特定の時間にディスプレイに描画できます。 DRMはGPU(グラフィックスプロセッシングユニット)ともインタフェースして、これらの要求をハードウェアアクセラレーションすることができます。

DRMドライバは、DMA、AGPメモリ管理、リソースロック、およびセキュアハードウェアアクセスを処理します。複数の同時3Dアプリケーションをサポートするには、3Dグラフィックハードウェアを共有リソースとして扱う必要があります。相互排除を提供するにはロックが必要です。 DMA 転送および AGP インターフェイスは、グラフィックコマンドバッファをハードウェアに送信するために使用されます。最後に、クライアントがグラフィックハードウェアを使用して権限を昇格させるのを防ぐセキュリティが必要です。

カーネルモード設定(KMS)は、ユーザー空間ではなくカーネル空間で表示解像度、ピクセル深度、画面リフレッシュを設定する方法です。これまで、X-Serverはユーザースペースでこれを行いました。最新のビデオドライバ(IMX6 GPU用のetnavivドライバなど)はKMSをサポートしています。 LinuxカーネルのKMS実装は、フレームバッファのネイティブ解像度をサポートし、即時コンソール(tty)切り替えを可能にします。 KMSはまた、アーティファクトを減らし、3Dパフォーマンスを向上させるのに役立つDRI2などの新しいテクノロジをサポートしています。

このレベルのグラフィックスタックはわかりにくいですが、私が見たのは/sys/class/drmのポートは/dev/sdXのデバイスに似ているため、毎回混在する可能性があります。起動は、デバイスの実際の状態ではなく、検出順序によって異なります。

これまで、XorgのポートIDを/sys/class/drm IDに直接接続する方法を見つけましたが、まだそのような方法は見つかりませんでした。 Xorgディスプレイドライバには「固定」ポートIDを生成する方法があるように見えますが、残念ながらこれらのIDにかなりランダムな変換を適用するため、関連するdrmポートIDに直接接続することははるかに困難です。もっと難しい

たとえば、1枚のカードにdrm ID eDP-1とXorg ID eDPがある場合、またはdrm HDMI-A-1とXorg HDMI-0があります。特定のディスプレイドライバによって異なる可能性があると思います。 Xorgが内部的にどのように機能するのかわかりません。

Wayland(KMS対応ドライバが必要)は常に同じIDを表示しているように見えますが、Xwaylandとxrandrを使用している場合、xrandrはXWAYLAND0 ...タイプのポートIDを表示します。おそらく、これらのIDが実際に正確に一致するためです。ハードウェアはXwaylandから来たと思います。

これらの変更について明確で不明瞭な文書を見つけることは困難です。特に、Xorgドライバを維持する各グループは、本質的に必要に応じてIDを自由に変更できるためです。これらの変更の可能な範囲全体を実際に確認するには、さまざまなドライバ、カーネル、およびハードウェア設定のより多くのサンプルが必要です。たとえば、VGA-1は通常VGA-1のままですが、VGA0でもかまいません。これは非常にランダムです。

最善の解決策は、/ sysで物理ポートID、つまり物理パスを決定し、Xorgで物理ポートパスを決定し、Xorgとカーネル生成IDを無視する方法を持つことですが、わかりません。まだ出ていません。

私はこれらの見解/家庭のいくつかに同意しないかもしれません。もしそうなら、これが実際にどのように機能するかを理解しようとしていますので、修正があれば感謝します。

nvidia非フリードライバにシステムが接続され、アクティブなモニタが無効になっていると思うようにするいくつかの長いバグがあるため、状況がさらに複雑になり、不要な作業が中断される可能性があります。まったく表示されない他のdrmデータに関連するnvidiaドライバエラーがあります。

これらのnvidia非フリードライバエラーの例: https://forums.developer.nvidia.com/t/no-sys-class-drm-card0-entries-on-kernel-4-15/57855 https://forums.developer.nvidia.com/t/sys-class-drm-enabled-reports-disabled-for-enabled-monitors/51187

モニターがすべて異なる場合、XorgのEDIDベンダー、製品ID(prod id)、およびシリアル番号に基づいてXorgに特定のIDを持つモニターを推論できます(ただし、すべてのモニターにシリアル番号データがあるわけではありません)。ただし、ポートIDとモニタ情報のXorgデータをpciバスまたは/sys/class/drm情報に完全に安定して明確な方法で接続する方法はありません。これを行う方法を見つけたら(マイナーではないかもしれません)、この投稿を更新します。

[アップデート] mic_eのコメントのおかげで、2009年頃から(xrandr 1.2以降、2007年頃にリリースされましたが2009年頃に固定プールにリリースされました)、xrandr --prop / --propertyがCONNECTOR_IDが出力に追加されることがわかります。肯定的な一致のために/sys/class/drm/*/connector_idと一致します。これはDRMドライバ/ハードウェアでのみ機能しますが、今日のほとんどのグラフィックに当てはまります。

--prop は EDID データも表示します。 /sysから直接インポートできるので、実際には問題ありません。 xrandrはとにかく別の依存関係ですが、必要に応じてdrmとxorgと一致する必要があります。ポートID。

フルカバレッジが必要で、多くの出力を読み取るためのオーバーヘッドを気にしない場合は、--verboseが常に適用され、導入時に--propがトリガされます。

関連情報