Linux: Wie führe ich ein Skript aus, wenn ein externer Monitor angeschlossen ist?

9

Wie kann ich erkennen, wenn ein externer Monitor unter Linux angeschlossen ist?

Ich muss verschiedene Skripte ausführen, um meinen Arbeitsbereich einzurichten.

Gibt es eine clevere Möglichkeit, ein Skript zu starten, wenn sich der Monitorstatus geändert hat?

Ich verwende den Nvidia-Bildschirmtreiber.

Joernsn
quelle
Der hackige Weg wäre, ein Skript zu schreiben, das xrandralle paar Sekunden nach Änderungen in der Ausgabe fragt und die Skripte ausführt, wenn es einen Unterschied bemerkt.
new123456
Idealerweise können Sie udev anweisen, ein Skript auszuführen. Ich erwarte nicht, dass dies mit NVIDIA-Treibern funktioniert, bis KMS unterstützt wird, obwohl ich es nicht versucht habe. stackoverflow.com/questions/5469828/…
Andy

Antworten:

2

Es gibt eine Reihe von Tools namens read-edid , mit denen erweiterte Anzeigeidentifikationsdaten (EDID) analysiert werden können. Wenn Ihr externer Monitor von diesen Tools tatsächlich erkannt wird, können Sie möglicherweise regelmäßig nach einer Erkennung suchen und die Ausgabe zum Starten von Skripten usw. verwenden.

Sie haben jedoch nicht erwähnt, ob Sie dies tun müssen, unabhängig davon, ob X ausgeführt wird.

Rolf
quelle
Richtig, ich brauche es nur in X. Ich habe auch einige andere Tools, die die Anzeigen erkennen (wie Disper), aber ich hatte gehofft, nicht einen Daemon schreiben zu müssen :)
Joernsn
1

Ich habe nach der gleichen Antwort gesucht: /
Ich verwende disper ( http://willem.engen.nl/projects/disper ) und gconftool, um meinen zweiten Monitor zusammen mit einem zweiten Gnome-Panel darauf zu aktivieren / deaktivieren.
disper -l listet alle angeschlossenen Monitore auf, sodass Sie dies als letzten Ausweg abfragen können.

# only primary display
disper -s
gconftool-2 --type int --set  /apps/panel/toplevels/panel_1/screen -- -1


# dual display (nvidia twinview)
disper -e
gconftool-2 --type int --set  /apps/panel/toplevels/panel_1/screen 0
killall gnome-panel
Vindolin
quelle
1

Sie sollten udevEreignisse verwenden ... eine mögliche Regel könnte folgendermaßen aussehen:

KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/ninette/.Xauthority", RUN+="/usr/local/bin/0x_hw_hotplug_monitor.sh"

(Quelle https://bbs.archlinux.org/viewtopic.php?pid=1329375#p1329375 )

0x1ad1b88
quelle
0

Da die nVidia-Binärtreiber ab 270.18 immer noch kein modernes XRandR zu implementieren scheinen, müssen Sie möglicherweise nur dem Vorschlag von new123456 folgen, um ein Tool wie xrandrnach Änderungen der Bildschirmgröße abzufragen .

Auf meinem System muss ich noch einen Weg finden, um nVidia dazu zu bringen, ordnungsgemäß anzukündigen, xrandrdass ich zwei 1280x1024-Monitore anstelle eines einzelnen 2560x1024-Monitors habe sie von der Änderung der Auflösung. (Es macht meine Desktop-Stickies kaputt)

ssokolow
quelle