Gibt es ein Tool, mit dem man:
- Speichern der aktuellen RandR-Konfiguration (Position, Ausrichtung, Auflösung usw.) auf Monitorbasis,
- Die zuletzt als funktionierend bekannte Konfiguration wird automatisch angewendet, sobald das Display angeschlossen ist, ohne dass Applets oder xrandr (1) verwendet werden müssen.
Die Konfigurationen müssten pro Benutzer und pro Anzeige angewendet werden.
Wenn es ein solches Tool in freier Wildbahn nicht gibt, würde ich selbst gerne eines zusammenwerfen, aber soweit ich sehen kann, gibt es keine Möglichkeit, festzustellen, dass ein Monitor angeschlossen ist. Muss ich mit xrandr -q abfragen hin und wieder herauszufinden, dass ein Ausgang verbunden oder getrennt wurde, oder gibt es eine effizientere Möglichkeit, dies zu tun? Kann man udev darauf abstimmen?
udevadm monitor --property
vom Terminal aus zu starten und den Monitor anzuschließen. Bei meiner Karte wird ein Ereignis angezeigt, wenn sie eingesteckt ist. Möglicherweise können Sie in udev eine + RUN-Regel und einige Bash-Skripte verwenden, um das gewünschte Ergebnis zu erzielen. Ich bin mir jedoch nicht sicher, wie Sie dies mit udev auf Benutzerbasis implementieren können.Antworten:
Ich verwende dieses einfache (hausgemachte) Skript, das RandR weiterhin abruft und zwischen LVDS1 und VGA1 wechselt, wenn VGA verbunden / getrennt wird. ( Ändern Sie bei HDMI- Ausgängen in der folgenden Skriptdatei alle
VGA1
in.HDMI1
)Es ist eine schmutzige Lösung, aber es funktioniert gut.
Es ist an mein Setup angepasst: Wahrscheinlich müssen Sie die RandR-Ausgabenamen (
LVDS1
undVGA1
) ändern, und im Gegensatz zu mir ist Ihr RandR-Standardmodus für VGA wahrscheinlich in Ordnung.Volle Schritte:
Ctrl+Alt+t
Navigieren Sie zu einem geeigneten Speicherort, um das automatisch umschaltende Shell-Skript zu erstellen und zu speichern. Beispiel
cd ./Desktop/
Erstellen und bearbeiten Sie die .sh-Datei mit Ihrem gewünschten Texteditor (hier habe ich pluma verwendet. Sie können nano, vim usw. ausprobieren). Nennen Sie es zu Ihrer Bequemlichkeit. Beispiel
sudo pluma homemadeMonitor.sh
Bearbeiten Sie die Datei und fügen Sie alles aus dem oben genannten Skript ein (das mit #! / Bin / bash).
Machen Sie die .sh-Datei ausführbar, indem Sie den folgenden Befehl im Terminal eingeben
sudo chmod +x homemadeMonitor.sh
Führen Sie die SH-Datei aus
./homemadeMonitor.sh
quelle
Als Antwort auf den Teil der Frage "[a], um festzustellen, ob ein Monitor angeschlossen ist":
Die Unterstützung variiert immer noch ziemlich stark, aber mit den neuesten Kerneln gibt es eine gewisse Unterstützung für das Generieren von udev-Ereignissen, wenn ein Anzeige-Hotplug auftritt. Mit Kernel 2.6.38 und ATI X1400-Hardware erhalte ich beim ersten Anschließen eines VGA-Bildschirms ein Ereignis, aber keine Ereignisse beim anschließenden Trennen oder erneuten Anschließen des Bildschirms. Intel-Hardware wird möglicherweise besser unterstützt. Der proprietäre NVIDIA-Treiber unterstützt derzeit KMS nicht. Ich habe nicht versucht, nach Hotplug-Ereignissen auf NVIDIA-Hardware zu suchen, aber ich bezweifle, dass dies funktionieren würde.
Wenn Sie mit udev experimentieren möchten, können Sie die folgenden Schritte ausführen:
[drm] radeon kernel modesetting enabled
und[drm] initializing kernel modesetting
udevadm monitor --property
und prüfen Sie, ob Ereignisse gemeldet werden, wenn Sie Anzeigen (trennen)Wenn udev-Ereignisse auf dem Display angezeigt werden, können Sie ein Skript mit einer udev-Regel wie der folgenden auslösen:
Hinweis: Dies funktioniert nicht , wenn Sie eine NVIDIA-GPU mit dem proprietären Binärtreiber verwenden, da KMS nicht verwendet wird. Sie werden nicht alle udev Veranstaltungen.
quelle
Bei einem Tool, das Monitorkonfigurationsprofile pro Benutzer und pro Anzeige speichern kann, wird autorandr genau das tun. https://github.com/wertarbyte/autorandr .
Mein Laptop hat eine NVIDIA-Karte, daher verwende ich das Disper-Backend anstelle von xrandr: http://willem.engen.nl/projects/disper/ . Autorandr verwendet disper als Backend, um Ihre Monitore zu verwalten, wenn Sie es als aufrufen
autodisper
. Für den Rest dieses Beitrags beziehe ich mich jedoch auf dieautorandr
Konsistenz.Sie können Profile mit speichern
autorandr --save profile_name
. Wennautorandr
Sie das Programm alleine ausführen, erhalten Sie eine Liste mit Profilen und können feststellen, welches als aktuelle Konfiguration erkannt wurde.Zum Beispiel:
Sie können festlegen, dass das entsprechende Profil für die aktuelle Konfiguration automatisch mit geladen wird
autorandr --change
. Dieser Befehl würde, zusammen mit einer udev-Regel, die ihn ausführt, wenn er per Hot-Plug ausgeführt wird, genau das tun, was Sie angefordert haben.Als zusätzliche Vorsichtsmaßnahme habe ich
--default laptop
diesen Befehl angehängt , sodass er standardmäßig auf dem Laptop angezeigt wird, wenn kein gespeichertes Profil vorhanden ist, das der aktuellen Konfiguration entspricht. Der vollständige Befehl zum Wechseln der Anzeige lautet also:Leider gibt mein Computer keine udev-Ausgabe aus, wenn ich meinen Monitor an das Stromnetz anschließe. Ich verwende die proprietären NVIDIA-Treiber, was nicht verwunderlich ist. Daher habe ich es vorerst an die XF68Display-Taste (Fn-F8) gebunden, was fast genauso gut ist.
quelle
udev
autorandr
: github.com/phillipberndt/autorandrIch habe die oben vorgeschlagene udev-Regel zusammen mit einem Shell-Skript verwendet, das so aussieht
Der Xauthority-Teil ist ebenso wichtig wie der Export
DISPLAY
. Sie können Echo verwenden, um$DISPLAY
zu sehen, welcher Zahl er entspricht. Verwenden Siexrandr -q
, um die externen Monitore anzuzeigen, die Sie haben. Die letzte else-Anweisung soll nur sicherstellen, dass Sie nie ohne Anzeige stecken bleiben.quelle
Ein kleines Programm, das darauf wartet, dass der X-Server ihn über geänderte Monitorkonfigurationen benachrichtigt und dann einen bestimmten Befehl ausführt (z. B. den
autorandr
in einer anderen Antwort genannten), ist verfügbar unter: https://bitbucket.org/portix/srandrd/overviewDies scheint eine sauberere Lösung zu sein, die verwendet wird
udev
(wo Sie sich Sorgen machen müssen, den richtigen X-Server zu finden usw.).quelle
Wenn die Anzeige beim Anschließen automatisch erkannt werden soll, ist das Hinzufügen einer UDEV-Regel zur Ausführung eines Skripts mit Ihren xrandr-Befehlen anscheinend die sauberste Lösung. Hier ist ein Beispiel für die Lösung 1 eines Benutzers :
Überwachen (Ausgeben) von UDEV-Ereignissen mit
udevadm
Dieser Schritt ist für jeden Benutzer am wichtigsten. Rennen
udevadm monitor --environment --udev
. Schließen Sie dann Ihr HDMI-Kabel an.UDEV-Regel
Basierend auf der Ausgabe des obigen Befehls hat der Benutzer diese UDEV-Regel um erstellt
/etc/udev/rules.d/95-monitor-hotplug.rules
.Beachten Sie die verwendeten Umgebungsvariablen, damit xrandr unter dem Benutzerprofil ausgeführt wird.
xrandr script hotplug_monitor.sh
Möglicherweise möchten Sie die xrandr-Optionen an Ihre Bedürfnisse anpassen.
quelle
Für diejenigen, die aus irgendeinem Grund den Hotplug-Weg nicht einschlagen möchten, ist es dennoch möglich, in einem Skript nicht mit inotifywait abzufragen:
Das Polling mit xrandr führte bei meinem brandneuen Laptop zu schwerwiegenden Usability-Problemen (die Maus kam regelmäßig zum Stillstand).
quelle
Bei der Verwendung der peoro-Lösung habe ich eine zusätzliche Ausgabe von xrandr erhalten, daher habe ich die Option -c für grep verwendet, die die Anzahl der Übereinstimmungen zählt. Ich habe es für HDMI angepasst und auch einen Audio-Schalter hinzugefügt:
quelle
Ich vermute, die Leute, die sich mit dieser Frage befassen, sind nicht diejenigen, die GNOME verwenden möchten, und diejenigen, die GNOME verwenden, müssen sich diese Frage nicht ansehen, sondern der Vollständigkeit halber:
GNOME hat diese Funktionalität eingebaut. Wenn Sie das Setup über gnome-control-center ändern, merkt sich der gnome-settings-daemon das (eingehende) Setup
.config/monitors.xml
und wendet es automatisch an, wenn ein Monitor angeschlossen oder ausgesteckt wird.Leider ist die Konfiguration in der Datei monitore.xml nicht gut dokumentiert. Siehe Frage hier . Das Gnome-Anzeigewerkzeug hat auch keine Möglichkeit, Schwenken und Skalieren pro Monitor einzurichten, und es kann nicht herausgezoomt werden. Da viele Benutzer einen HiDPI-Laptop-Bildschirm zusammen mit einem normalen DPI-Bildschirm verwenden, reichen die Tools nicht aus, um eine funktionsfähige Lösung zu erhalten.
Ich habe dies als Roadmap-Punkt für Wayland gesehen, aber wenn es endlich soweit ist, werden wir möglicherweise eine Lösung für die genannten Probleme finden. Bis dahin habe ich auf Gnome nach einer Verzögerung ein Startskript ausgeführt, um xrandr manuell einzurichten.
quelle
Um es zum Beispiel in Xfce zu vereinfachen, installieren Sie bitte "arandr", das in Ihren Distributionspaketen verfügbar sein sollte. Konfigurieren Sie Ihre Anzeige mit "arandr" und speichern Sie sie beispielsweise als "displayLayout". Arandr sollte für Sie die Erweiterung ".sh" hinzufügen, damit sie direkt in "function connect ()" verwendet werden kann, wie in dem von iyrin oben erwähnten Skript "hotplug_monitor.sh" beschrieben, zum Beispiel:
Um den Trennungsmechanismus zu verwenden, fügen Sie am oberen Rand des Skripts direkt unter "#! / Bin / bash" Folgendes hinzu:
xrandr erkennt die Anzeige und übergibt die Ausgabe an awk. Diese filtert sie basierend auf dem regulären Ausdruck "connected", gefolgt von einer Ziffer, die im Wesentlichen das ist, was wir wollen. Meiner Meinung nach ist es nicht erforderlich, die exakte Auflösung in regulären Ausdrücken abzugleichen, da die primäre Anzeige als "verbundene primäre" angezeigt wird, gefolgt von einer Zahl, dh der Auflösung. Dann gibt awk "print $ 1" nur die erste Spalte aus, die in diesem Fall der Name des externen Monitors ist, und diese wird in der Variablen PLUGGED_EXTERNAL gespeichert. Als nächstes kann anstelle des festen Anzeigenamens "HDMI1" im Skript $ PLUGGED_EXTERNAL wie folgt verwendet werden:
quelle
Bearbeiten meiner Antwort, um die Einrichtung zu vereinfachen.
Installieren Sie autorandr, um das Bildschirmlayout in xrandr zu automatisieren, holen Sie sich die neueste .deb-Datei von https://github.com/nalipaz/autorandr/releases und führen Sie Folgendes aus :
Richten Sie autorandr mit gespeicherten Bildschirmlayouts ein
Als Beispiel: Auf meinem Laptop ohne angeschlossene Monitore richte ich eine beliebige Konfiguration ein und lief dann wie folgt ab:
Dann steckte ich mein HDMI ein und rekonfigurierte arandr, dann lief:
Nachdem Sie jedes Ihrer Layouts eingerichtet haben, können Sie Folgendes ausführen (ersetzen Sie 'mobile' durch den vorherigen bevorzugten Namen, den ich für mobile Geräte verwendet habe):
Jetzt, da autorandr vollständig eingerichtet ist, können Sie den Prozess automatisieren, indem Sie ein Paket installieren, das nach verbundenen Displays sucht und
autorandr --change
bei Erkennung ausgeführt wird. Ja, ich kenne udev und Sie können das einrichten, wenn es für Sie funktioniert, aber in meinen Tests hat udev für mein HDMI nicht durchgehend funktioniert. Es funktionierte nur 1 von 20 Steckern / Steckern oder so, und manchmal hörte es einfach ganz auf.Laden Sie die neueste .deb-Datei von hier herunter: https://github.com/nalipaz/poll-xrandr/releases/ und installieren Sie sie mit
Es ist höchstwahrscheinlich erforderlich, dass Sie nach Abschluss von weitere Tasks
autorandr --change
ausführen. Mit autorandr können diese Befehle in eine Datei mit dem Namen ~ / .autorandr / postswitch eingefügt werden. Gehen Sie wie folgt vor:Bearbeiten Sie nun die Postswitch-Datei so, dass sie etwa wie folgt aussieht:
Zusätzlich möchten Sie wahrscheinlich autorandr und poll-xrandr zu Ihren Startups hinzufügen, ähnlich wie die folgenden zwei Befehle:
Ziehen Sie den Stecker aus der Steckdose oder schließen Sie einen Monitor an und beobachten Sie die Magie!
quelle