GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ein Tool zum automatischen Anwenden der RandR-Konfiguration, wenn ein externes Display angeschlossen ist

In Bezug auf ein Tool, das Monitorkonfigurationsprofile pro Benutzer und pro Display speichern kann, wird autorandr genau das tun.

Mein Laptop hat eine NVIDIA-Karte, daher verwende ich das disper-Backend anstelle von xrandr. Autorandr verwendet disper als Backend, um Ihre Monitore zu verwalten, wenn Sie es als autodisper bezeichnen . Für den Rest dieses Beitrags bezeichne ich ihn jedoch als autorandr für Konsistenz.

Mit autorandr --save profile_name können Sie Profile speichern . Ausführen von autorandr von selbst gibt Ihnen dann eine Liste von Profilen und identifiziert, welches als aktuelle Konfiguration erkannt wird.

Zum Beispiel:

$ autorandr
laptop
syncmaster19 (detected)

Mit autorandr --change können Sie ihn anweisen, automatisch das passende Profil für die aktuelle Konfiguration zu laden . Dieser Befehl, gepaart mit einer udev-Regel, um ihn auszuführen, wenn er Hotplug ist, würde das tun, was Sie angefordert haben.

Als zusätzliche Vorsichtsmaßnahme habe ich --default laptop angehängt zu diesem Befehl, wodurch es standardmäßig auf die Anzeige des Laptops gesetzt wird, wenn kein gespeichertes Profil vorhanden ist, das der aktuellen Konfiguration entspricht. Der vollständige Befehl, den ich zum Wechseln der Anzeige verwende, lautet also:

autorandr --change --default laptop

Leider gibt mein Rechner keine udev-Ausgabe aus, wenn ich meinen Monitor hotplug. Ich verwende die proprietären NVIDIA-Treiber, das ist also nicht überraschend. Also habe ich es vorerst an die XF68Display-Taste (Fn-F8) gebunden, was fast genauso gut ist.


Ich verwende dieses einfache (hausgemachte) Skript, das RandR abfragt und zwischen LVDS1 und VGA1 wechselt, wenn VGA verbunden/getrennt wird. (Für HDMI Ausgaben ändern Sie in der folgenden Skriptdatei alle VGA1 bis HDMI1 )

Es ist eine unsaubere Lösung, aber sie funktioniert einwandfrei.

Es ist für mein Setup angepasst:Sie müssen höchstwahrscheinlich die RandR-Ausgabenamen ändern (LVDS1 und VGA1 ) und im Gegensatz zu mir werden Sie wahrscheinlich mit Ihrem RandR-Standardmodus für VGA zurechtkommen.

#!/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

Vollständige Schritte:

  1. Fügen Sie das obige Skript ein (homemadeMonitor.sh ) in Ihr bevorzugtes Verzeichnis

  2. Machen Sie die .sh-Datei ausführbar, indem Sie im Terminal den folgenden Befehl eingeben

    chmod +x homemadeMonitor.sh

  3. Führen Sie die .sh-Datei

    aus

    ./homemadeMonitor.sh


Antwort auf den Teil der Frage „[a] Möglichkeit, festzustellen, dass ein Monitor angeschlossen wurde“:

Die Unterstützung variiert immer noch ziemlich, aber neuere Kernel unterstützen teilweise das Generieren von udev-Ereignissen, wenn ein Anzeige-Hotplug auftritt. Mit Kernel 2.6.38 und ATI X1400-Hardware erhalte ich ein Ereignis, wenn ich zum ersten Mal ein VGA-Display anschließe, aber keine Ereignisse bei nachfolgenden Trennungen oder Wiederverbindungen des Displays. Intel-Hardware bietet möglicherweise eine bessere Unterstützung. Der proprietäre NVIDIA-Treiber unterstützt derzeit kein KMS; Ich habe nicht versucht, auf NVIDIA-Hardware nach Hotplug-Ereignissen zu suchen, aber ich bezweifle, dass es funktionieren würde.

Wenn Sie mit udev experimentieren möchten, können Sie die folgenden Schritte ausprobieren:

  • auf den neusten Kernel aktualisieren
  • Stellen Sie sicher, dass die Kernelmoduseinstellung (KMS) aktiviert ist. Wenn aktiviert, sollte es in Ihrer Kernel-Ausgabe gemeldet werden. Bei mir steht [drm] radeon kernel modesetting enabled und [drm] initializing kernel modesetting
  • führen Sie udevadm monitor --property aus und sehen Sie, ob Ereignisse gemeldet werden, wenn Sie Displays (trennen) verbinden

Wenn Sie udev-Ereignisse beim Anzeige-Hotplug erhalten, können Sie ein Skript mit einer udev-Regel auslösen wie:

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

Hinweis: Dies wird nicht funktionieren, wenn Sie eine nVIDIA-GPU mit dem proprietären Binärtreiber verwenden, da KMS nicht verwendet wird. Das werden Sie nicht erhalten Sie alle udev-Ereignisse.


Linux
  1. Linux – Ein Tool zum automatischen Anwenden der Randr-Konfiguration, wenn ein externes Display angeschlossen ist?

  2. Linux – Werkzeug zur Messung der Entropiequalität?

  3. Nutty – Ein Netzwerkdiagnosetool für Ubuntu

  4. Teamviewer-ähnliches Tool für ssh?

  5. Werkzeug zur Messung der Entropiequalität?

Doppler – Ein konfigurationsfreies Fernüberwachungstool

Anzeige der Netzwerkbandbreitennutzung mit dem Bandwhich-Tool

Zeigen Sie Cheatsheets für Linux-Befehle mit dem Tealdeer-Tool an

Zeigen Sie Netzwerkinformationen in Linux mit What IP Tool an

Eine Einführung in Cockpit, ein browserbasiertes Verwaltungstool für Linux

Skanlite – Ein einfaches Bildscan-Tool für Linux