GNU/Linux >> Linux の 問題 >  >> Linux

外部ディスプレイが接続されているときに RandR 構成を自動的に適用するためのツール

ユーザーごと、ディスプレイごとにモニター構成プロファイルを保存できるツールに関しては、autorandr がまさにそれを行います。

私のラップトップには NVIDIA カードが搭載されているので、xrandr の代わりに disper バックエンドを使用しています。 autodisper として呼び出すと、Autorandr はモニターを管理するバックエンドとして disper を使用します。 .ただし、この投稿の残りの部分では、autorandr と呼びます。 一貫性のために。

autorandr --save profile_name でプロファイルを保存できます . autorandr を実行中 すると、プロファイルのリストが表示され、どのプロファイルが現在の構成として検出されているかが特定されます。

例:

$ autorandr
laptop
syncmaster19 (detected)

autorandr --change を使用して、現在の構成に適したプロファイルを自動的にロードするように指示できます。 .ホットプラグ時に実行する udev ルールと組み合わせたこのコマンドは、要求したことを実行します。

追加の予防措置として、 --default laptop を追加しました 現在の構成に一致するプロファイルが保存されていない場合、ラップトップのディスプレイがデフォルトになります。したがって、表示を切り替えるために使用する完全なコマンドは次のとおりです。

autorandr --change --default laptop

残念ながら、モニターをホットプラグしても、マシンから udev 出力が得られません。私は NVIDIA 独自のドライバーを使用しているので、それは当然のことです。そこで、今のところ XF68Display キー (Fn-F8) にバインドしましたが、これはほぼ同じです。


私は、RandR をポーリングし続け、VGA が接続/切断されたときに LVDS1 と VGA1 を切り替える単純な (自家製の) スクリプトを使用しています。 (HDMI の場合 出力、次のスクリプト ファイルで、すべての VGA1 を変更します HDMI1まで )

これは汚いソリューションですが、問題なく機能しています。

私のセットアップ用にカスタマイズされています。RandR の出力名 (LVDS1VGA1 ) そして、私とは異なり、VGA の RandR デフォルト モードでおそらく問題ないでしょう。

#!/bin/bash

# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080

# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
    echo "Switching to VGA1"
    xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    MONITOR=VGA1
}
function DeactivateVGA {
    echo "Switching to LVDS1"
    xrandr --output VGA1 --off --output LVDS1 --auto
    MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function VGAActive {
    [ $MONITOR = "VGA1" ]
}
function VGAConnected {
    ! xrandr | grep "^VGA1" | grep disconnected
}

# actual script
while true
do
    if ! VGAActive && VGAConnected
    then
        ActivateVGA
    fi

    if VGAActive && ! VGAConnected
    then
        DeactivateVGA
    fi

    sleep 1s
done

完全な手順:

<オール>
  • スクリプトの上に置く (homemadeMonitor.sh ) 好きなディレクトリに

  • ターミナルで次のコマンドを入力して、.sh ファイルを実行可能にします

    chmod +x homemadeMonitor.sh

  • .sh ファイルを実行します

    ./homemadeMonitor.sh


  • 質問の「[a] モニターが接続されていることを確認する方法」の部分への回答:

    サポートはまだかなり異なりますが、最近のカーネルでは、ディスプレイのホットプラグが発生したときに udev イベントを生成するためのサポートがいくつかあります。カーネル 2.6.38 および ATI X1400 ハードウェアでは、初めて VGA ディスプレイに接続したときにイベントが発生しますが、その後のディスプレイの切断または再接続ではイベントが発生しません。 Intel ハードウェアのサポートの方が優れている場合があります。 NVIDIA 独自のドライバーは、現在 KMS をサポートしていません。 NVIDIA ハードウェアでホットプラグ イベントを探したことはありませんが、うまくいくかどうかは疑わしいです。

    udev を試してみたい場合は、次の手順を試すことができます:

    • 最新のカーネルに更新
    • カーネル モード設定 (KMS) が有効になっていることを確認します。有効にすると、カーネル出力で報告されるはずです。私は [drm] radeon kernel modesetting enabled と言います と [drm] initializing kernel modesetting
    • udevadm monitor --property を実行 ディスプレイの接続 (切断) 時にイベントが報告されるかどうかを確認します

    ディスプレイのホットプラグで udev イベントを取得している場合は、次のような udev ルールでスクリプトをトリガーできます:

    ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"
    

    注: これはしません KMS を使用しないため、プロプライエタリ バイナリ ドライバーで nVIDIA GPU を使用する場合に動作します。あなたはしません udev イベントを取得します。


    Linux
    1. Linux –エントロピー品質を測定するためのツール?

    2. Deepinシステムモニター–DeepinOS用のスタイリッシュなシステムモニターツール

    3. メール送信に複数の外部 IP を使用する Exim4 構成

    1. ネットワークのトラブルシューティングにSSツールを使用する

    2. Linux –外部ディスプレイが接続されているときにRandr構成を自動的に適用するためのツール?

    3. Nutty –Ubuntu用のネットワーク診断ツール

    1. Blender –Linux用の完璧な3D作成ツール

    2. ssh 用の teamviewer のようなツール?

    3. エントロピー品質を測定するためのツール?