Gibt es ein Ereignis, das ausgelöst wird, wenn ich einen externen Monitor an den DisplayPort meines Laptops anschließe oder ausbaue? ACPID und UDEV reagieren überhaupt nicht.
Ich verwende integrierte Grafiken auf einem Intel-Chip. Hier ist eine ähnliche Diskussion, die bereits ein paar Jahre alt ist.
Ich möchte kein Polling verwenden, benötige jedoch eine Konfiguration, mit der die Anzeigeeinstellungen automatisch festgelegt werden, je nachdem, ob die Anzeige angeschlossen ist.
udev
monitors
acpi
multi-monitor
Janoliver
quelle
quelle
Antworten:
HINWEIS: Dies wurde auf einem Laptop mit einer i915-Grafikkarte getestet.
Hintergrund
HINWEIS: Wenn ein neuer Bildschirm angeschlossen wird, wird kein Ereignis an den Host gesendet. Dies ist auch nach meiner letzten Bearbeitung der Fall. Der einzige Weg ist das Polling. Wir versuchen, sie so effizient wie möglich zu gestalten ...
EDIT # 3
Endlich gibt es eine bessere Lösung (über ACPI):
Es gibt noch keine Veranstaltung, aber ACPI scheint effizienter zu sein, als sich
xrandr
zu erkundigen. (Hinweis: Hierfür müssen ACPI-Kernelmodule geladen sein, es sind jedoch keine Root-Berechtigungen erforderlich.)Meine endgültige Lösung (mit bash):
Nun ein Test:
Es ist eingesteckt, also ziehe ich es jetzt heraus:
HINWEIS:
${1:+*-1+1}
eine Genehmigung boolean Argument: Wenn etwas vorhanden ist , würde Antwort invertiert werden:( crtState >> 4 ) * -1 + 1
.und das letzte Drehbuch:
WARNUNGEN: Leichter als
xrandr
, aber nicht unwichtig mit einer Verzögerung von weniger als 0,02 Sekunden. Das Bash-Skript springt an die Spitze des Ressourcenfresser-Prozesses (top
)!Während dies ~ 0,001 Sek. Kostet:
Dies erfordert ~ 0,030 Sekunden:
Das ist groß! Also je nachdem, was Sie brauchen,
delay
könnte einigermaßen zwischen0.5
und gesetzt werden2
.EDIT # 2
Ich habe endlich etwas gefunden, mit diesem:
Wichtiger Hinweis: Das Spielen mit
/proc
und die/sys
Einträge können Ihr System beschädigen !!! Versuchen Sie Folgendes nicht auf Produktionssystemen.... nach einigem Reinigen von unerwünschten Einträgen:
Ich konnte Folgendes lesen:
Wenn ich das Monitorkabel einstecke, ausziehe und wieder einstecke.
Ursprüngliche AntwortWenn die Konfiguration abgefragt wird (läuft
system/preferences/monitor
oderxrandr
), führen Grafikkarten eine Art Scan durch , so dass beim Ausführenxrandr -q
die Informationen angezeigt werden, der Status jedoch abgefragt werden muss .Ich habe alle Protokolle (Kernel, Daemon, X usw.) durchsucht und
/proc
& durchsucht/sys
, und es scheint offensichtlich nichts zu geben, das Ihre Anfrage erfüllt.Ich habe es auch versucht:
Nach all dem wird
System/Preferences/Monitor
das Tool einfach (normalerweise) angezeigt , wenn Sie ausführen, während noch kein neuer Bildschirm eingesteckt oder ausgesteckt wurde. Wenn Sie zuvor einen Bildschirm ein- oder ausgesteckt haben, führen Sie dieses Tool gelegentlich aus, und auf Ihrem Desktop wird eine Art Zurücksetzen oder Aktualisieren ausgeführt (dies gilt auch für den Fall, dass Sie einen Bildschirm ausführenxrandr
).Dies scheint zu bestätigen, dass dieses Tool nach dem
xrandr
Status fragt (oder auf die gleiche Weise funktioniert), indem es diesen regelmäßig abruft, beginnend zum Zeitpunkt seiner Ausführung.Du könntest es selbst versuchen:
Dies zeigt für 10 Sekunden an, wie viele Bildschirme (Displays) verbunden sind.
Während dies läuft, stecken Sie Ihren Bildschirm / Monitor ein und / oder aus und schauen, was passiert. So können Sie eine kleine Bash-Testfunktion erstellen:
das wäre verwendbar wie in:
Aber seien Sie vorsichtig, es
xrandr
dauert ungefähr 0,140 Sekunden bis 0,200 Sekunden, während sich an den Steckern nichts ändert, und bis zu 0,700 Sekunden, wenn etwas kurz zuvor eingesteckt oder abgezogen wurde ( HINWEIS: Es scheint kein Ressourcenfresser zu sein).EDIT # 1
Um sicherzustellen, dass ich nichts Falsches unterrichte, habe ich im Web und in den Dokumenten gesucht, aber nichts über DBus und Bildschirme gefunden .
Schließlich habe ich in zwei verschiedenen Fenstern
dbus-monitor --system
(ich habe auch mit Optionen gespielt) und dem kleinen Skript, das ich geschrieben habe, ausgeführt:... und steckte den Monitor wieder ein, dann steckte er ihn wieder aus. So jetzt könnte ich sagen:
xrandr -q
zu wissen , ob ein Monitor angeschlossen ist oder nicht.Aber seien Sie vorsichtig, denn es scheint keine anderen Möglichkeiten zu geben. Zum Beispiel
xrandr
scheint diese Information zu teilen, so dass mein GNOME-Desktopxinerama
automatisch auf ... umschaltet, wenn ich liefxrandr
.Einige Dokumente
quelle
Die folgenden Zeilen erschienen in
udevadm monitor
beim Anschließen eines Monitors an den VGA-Anschluss. Es könnte also einen Weg geben, dies herauszufinden.
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:
Es wird am besten von Ihrer .xsessionrc aufgerufen, wobei die Endung & nicht vergessen wird. Das Polling mit xrandr führte bei meinem brandneuen Laptop zu schwerwiegenden Usability-Problemen (die Maus kam regelmäßig zum Stillstand).
quelle
/proc
und habe in derinotifywait -q -e close /sys/class/drm/card0-DP-2/status
Tat nichtIch habe mich an srandrd gehalten . Es überwacht X-Ereignisse und löst Ihr Skript aus, wenn eine Anzeige verbunden oder getrennt wird.
quelle
Offensichtlich sollte es etwas geben! :) Das / sys-Dateisystem teilt dem Userspace mit, welche Hardware verfügbar ist, sodass Userspace-Tools (wie udev oder mdev) ein "/ dev" -Verzeichnis dynamisch mit Geräteknoten füllen können, die die aktuell verfügbare Hardware darstellen. Linux bietet zwei Hotplug-Schnittstellen: / sbin / hotplug und netlink.
In der folgenden Datei befindet sich eine kleine C-Demo. http://www.kernel.org/doc/pending/hotplug.txt
quelle
Heutzutage verwendete die System- / Anwendungssoftware unter Linux zumeist einige IPC-Techniken für die Kommunikation. D-Bus wird jetzt hauptsächlich mit GNOME-Anwendungen verwendet und könnte helfen.
Linux Journal:
wiki:
Es gibt sogar eine Python-Bibliothek dafür, und Ubuntu hat kürzlich diese Fähigkeit namens " Zeitgeist " verwendet.
quelle
Grafisch kann man sehen, ob der Monitor mit erkannt wird
Monitor
, ich weiß, dass man dies auf Ubuntu, Fedora und anderen an diesem (oder einem ähnlichen) Ort findet.Und Sie können jeden gewünschten Monitor ein- und ausschalten oder beide gleichzeitig mit doppelten Bildern auf beiden Monitoren oder unabhängigen Monitoren verwenden
quelle