Czy jest jakieś zdarzenie, które jest wywoływane po podłączeniu lub wyjęciu zewnętrznego monitora do DisplayPort mojego laptopa? ACPID i UDEV wcale nie reagują.
Używam wbudowanej grafiki na chipie Intel. Oto podobna dyskusja, która ma już kilka lat.
Nie chcę używać odpytywania, ale muszę mieć konfigurację, która automatycznie ustawia ustawienia wyświetlania w zależności od tego, czy wyświetlacz jest podłączony.
udev
monitors
acpi
multi-monitor
janoliver
źródło
źródło
Odpowiedzi:
UWAGA: Zostało to przetestowane na laptopie z kartą graficzną napędzaną i915.
tło
UWAGA: Po podłączeniu nowego ekranu do hosta nie jest wysyłane żadne zdarzenie, pozostało to prawdą nawet po mojej ostatniej edycji. Więc jedynym sposobem jest użycie odpytywania. Staramy się, aby były jak najbardziej efektywne ...
EDYCJA 3
Wreszcie istnieje jedno lepsze rozwiązanie (poprzez ACPI):
Nadal nie ma zdarzenia, ale ACPI wydaje się bardziej wydajne niż
xrandr
zapytanie. (Uwaga: Wymaga to załadowania modułów jądra ACPI, ale nie wymaga uprawnień roota).Moje ostateczne rozwiązanie (używając bash):
Teraz test:
Jest podłączony, więc teraz go odłączam:
UWAGA:
${1:+*-1+1}
pozwalają na logiczną argumentację: Jeśli coś jest obecny , odpowiedź byłaby odwrócona:( crtState >> 4 ) * -1 + 1
.i ostatni skrypt:
OSTRZEŻENIA: lżejszy
xrandr
, ale nie bez znaczenia, z opóźnieniem mniejszym niż 0,02 sekundy, skrypt Bash przejdzie na szczyt procesu zjadaczy zasobów (top
)!Chociaż kosztuje to ~ 0,001 s:
Wymaga to ~ 0,030 s:
To jest duże! Więc w zależności od potrzeb,
delay
można rozsądnie ustawić pomiędzy0.5
a2
.EDYCJA 2
W końcu znalazłem coś, używając tego:
Ważna informacja: Zabawa
/proc
i/sys
wpisy mogą uszkodzić twój system !!! Więc nie próbuj poniższych rozwiązań w systemach produkcyjnych.... po pewnym czyszczeniu niechcianych wpisów:
Byłem w stanie to przeczytać:
Po podłączeniu, odłączeniu i ponownym podłączeniu kabla monitora.
Oryginalna odpowiedźGdy konfiguracja zostanie zapytana (uruchomiona
system/preferences/monitor
lubxrandr
), karty graficzne wykonują rodzaj skanowania , więc uruchomieniexrandr -q
daje ci informacje, ale musisz sprawdzić status.Przeskanowałem wszystkie logi (jądro, demon, X i tak dalej) przeszukując
/proc
i/sys
, i najwyraźniej nic nie istnieje, co spełnia twoje żądanie.Też tego próbowałem:
Po tym wszystkim, jeśli uruchomisz,
System/Preferences/Monitor
gdy nowy ekran nie został właśnie podłączony ani odłączony, narzędzie pojawi się po prostu (normalnie). Ale jeśli wcześniej podłączyłeś lub odłączyłeś ekran, czasami uruchomisz to narzędzie i zobaczysz, że Twój pulpit dokonuje resetowania lub odświeżania (to samo, jeśli uruchamiaszxrandr
).Wydaje się to potwierdzać, że to narzędzie prosi
xrandr
(lub działa w ten sam sposób) okresowo odpytując status, zaczynając od momentu uruchomienia.Możesz spróbować sam:
Spowoduje to wyświetlenie liczby podłączonych ekranów przez 10 sekund.
Gdy to działa, podłącz i / lub odłącz ekran / monitor i sprawdź, co się stanie. Więc możesz stworzyć małą funkcję testową Bash:
które byłyby użyteczne jak w:
Ale bądź ostrożny,
xrandr
zajmuje to około 0,140 sek. Do 0,200 sek., A żadna zmiana nie następuje na wtyczkach i do 0,700 sek. Za każdym razem, gdy coś zostało podłączone lub odłączone tuż przed ( UWAGA: Wydaje się, że nie jest to pożeracz zasobów).EDYCJA 1
Aby upewnić się, że nie uczę czegoś niepoprawnego, przeszukałem Internet i dokumenty, ale nie znalazłem nic na temat DBus i ekranów .
Na koniec uruchomiłem dwa różne okna
dbus-monitor --system
(również bawiłem się opcjami) i napisałem mały skrypt:... i ponownie podłączany, niż odłączany monitor, wiele razy. Teraz mógłbym powiedzieć:
xrandr -q
aby sprawdzić, czy monitor jest podłączony czy nie.Ale zachowaj ostrożność, ponieważ wydaje się, że nie ma innych sposobów. Na przykład
xrandr
wydaje się , że udostępnia te informacje, więc mój pulpit GNOME przełączyłby sięxinerama
automatycznie na ... po uruchomieniuxrandr
.Niektóre dokumenty
źródło
Pojawiły się następujące wiersze
udevadm monitor
podczas podłączania monitora do złącza VGA. Więc może istnieć sposób, aby to rozgryźć.
źródło
Dla tych, którzy z jakiegokolwiek powodu nie chcą wybrać trasy hotplug, nadal można nie odpytywać w skrypcie za pomocą inotifywait:
Najlepiej wywołać go z twojego .xsessionrc, nie zapominając o zakończeniu &. Sondowanie za pomocą xrandr spowodowało poważne problemy z użytecznością na moim nowym laptopie (mysz od czasu do czasu przestała działać).
źródło
/proc
i po prostuinotifywait -q -e close /sys/class/drm/card0-DP-2/status
nie kończyło się to po odłączeniu DP-2 w moim systemieWsadziłem do korzystania srandrd . Monitoruje zdarzenia X i uruchamia skrypt, gdy ekran zostanie podłączony lub rozłączony.
źródło
Oczywiście powinno być coś! :) System plików / sys informuje przestrzeń użytkownika, jaki sprzęt jest dostępny, więc narzędzia przestrzeni użytkownika (takie jak udev lub mdev) mogą dynamicznie zapełniać katalog „/ dev” węzłami urządzeń reprezentującymi aktualnie dostępny sprzęt. Linux udostępnia dwa interfejsy hotplug: / sbin / hotplug i netlink.
W poniższym pliku znajduje się małe demo C. http://www.kernel.org/doc/pending/hotplug.txt
źródło
Większość oprogramowania systemowego / aplikacyjnego w Linuksie używało dzisiaj niektórych technik ipc do komunikacji między sobą. D-Bus jest obecnie używany głównie w aplikacjach GNOME i może pomóc.
Linux Journal:
wiki:
Jest nawet biblioteka Pythona, a Ubuntu niedawno użył tej zdolności, która nazywała się „ Zeitgeist ”.
źródło
Graficznie widać, czy monitor jest rozpoznawany
Monitor
, wiem, że można to znaleźć na Ubuntu, Fedorze i innych w tej (lub podobnej) lokalizacji.Możesz włączyć / wyłączyć dowolny monitor lub używać go jednocześnie z duplikatem obrazu na obu monitorach lub niezależnych monitorach
źródło