Есть ли какое-либо событие, которое запускается, когда я подключаю или отключаю внешний монитор к DisplayPort моего ноутбука? ACPID и UDEV вообще не реагируют.
Я использую встроенную графику на чипе Intel. Вот похожая дискуссия, которой уже пару лет.
Я не хочу использовать опрос, но мне нужно иметь некоторую конфигурацию, которая автоматически устанавливает параметры дисплея в зависимости от того, подключен ли дисплей.
udev
monitors
acpi
multi-monitor
janoliver
источник
источник
Ответы:
ПРИМЕЧАНИЕ. Тестирование проводилось на ноутбуке с графической картой с управлением i915.
Фон
ПРИМЕЧАНИЕ. Когда подключен новый экран, на хост не отправляется событие, оно остается верным даже после моего последнего редактирования. Таким образом, единственный способ - использовать опрос. Пытаясь сделать их максимально эффективными ...
РЕДАКТИРОВАТЬ № 3
Наконец, есть одно лучшее решение (через ACPI):
Там еще нет события, но ACPI кажется более эффективным, чем
xrandr
запросить. (Примечание: для этого требуются загруженные модули ядра ACPI, но не требуются права root).Мое окончательное решение (с использованием bash):
Теперь тест:
Он подключен, так что теперь я отключаю его:
Примечание:
${1:+*-1+1}
разрешить логическое рассуждение: Если что - то присутствует , ответ будет перевернутой:( crtState >> 4 ) * -1 + 1
.и последний сценарий:
ПРЕДУПРЕЖДЕНИЯ: легче
xrandr
, но не менее важно, с задержкой менее 0,02 секунды, скрипт Bash перейдет на вершину процесса пожирателей ресурсов (top
)!Пока это стоит ~ 0,001 сек:
Это требует ~ 0,030 сек:
Это большое! Таким образом, в зависимости от того, что вам нужно,
delay
может быть разумно установлено между0.5
и2
.РЕДАКТИРОВАТЬ № 2
Я наконец-то нашел что-то, используя это:
Важный отказ от ответственности: игра с
/proc
и/sys
записи может сломать вашу систему !!! Так что не пытайтесь сделать следующее на производственных системах.... после некоторой очистки от нежелательных записей:
Я был в состоянии прочитать это:
Когда я подключаю, отключаю и снова подключаю кабель монитора.
Оригинальный ответКогда запрашивается конфигурация (запущена
system/preferences/monitor
илиxrandr
), графические карты выполняют тип сканирования , поэтому при запускеxrandr -q
выдается информация, но вы должны опросить статус.Я просмотрел все журналы (ядро, демон, X и т. Д.), Просматривая
/proc
&/sys
, и, похоже, ничего не существует, чтобы удовлетворить ваш запрос.Я тоже попробовал это:
После всего этого, если вы запускаете,
System/Preferences/Monitor
когда новый экран не был подключен или отключен, инструмент будет отображаться просто (обычно). Но если вы ранее подключали или отключали экран, иногда вы запускаете этот инструмент и увидите, что ваш рабочий стол выполняет сброс или обновление (то же самое, если вы запускаетеxrandr
).Похоже, это подтверждает, что этот инструмент запрашивает
xrandr
(или работает аналогичным образом), периодически опрашивая состояние, начиная с момента его запуска.Вы можете попробовать себя:
Это покажет, сколько экранов (дисплеев) подключено, за 10 секунд.
Пока это работает, подключите и / или отключите ваш экран / монитор и посмотрите, что происходит. Таким образом, вы можете создать небольшую тестовую функцию Bash:
который будет использоваться как в:
Но будьте осторожны,
xrandr
занимает от 0,140 до 0,200 с, пока на вилках не происходит никаких изменений, и до 0,700 с, когда что-то было подключено или отключено непосредственно перед этим ( ПРИМЕЧАНИЕ. Похоже, что это не пожиратель ресурсов).РЕДАКТИРОВАТЬ # 1
Чтобы убедиться, что я не преподаю что-то неправильное, я искал в Интернете и документах, но не нашел ничего о DBus и экранах .
Наконец, я запустил два разных окна
dbus-monitor --system
(я тоже играл с опциями) и небольшой сценарий, который я написал:... и снова подключил, чем отключил монитор, много раз. Так что теперь я могу сказать:
xrandr -q
как узнать, подключен ли монитор или нет.Но будьте осторожны, потому что, похоже, других путей нет. Например,
xrandr
кажется, что делится этой информацией, поэтому мой рабочий стол GNOME переключился быxinerama
автоматически ... когда я запустилсяxrandr
.Некоторые документы
источник
Следующие строки появились в
udevadm monitor
при подключении монитора к VGA-разъему. Так что может быть способ выяснить это.
источник
Для тех, кто по какой-либо причине не хочет идти по маршруту горячего подключения, все еще возможно не опрашивать в скрипте с использованием inotifywait:
Лучше всего вызывать его из .xsessionrc, не забывая окончание &. Опрос xrandr дал серьезные проблемы с юзабилити на моем новом ноутбуке (мышь периодически зависала).
источник
/proc
и только выполнениеinotifywait -q -e close /sys/class/drm/card0-DP-2/status
действительно не заканчивалось при отключении DP-2 в моей системеЯ придерживался использования srandrd . Он отслеживает события X и запускает ваш сценарий, когда дисплей подключается или отключается.
источник
Очевидно, что-то должно быть! Файловая система :) / sys сообщает пользовательскому пространству, какое оборудование доступно, поэтому инструменты пользовательского пространства (такие как udev или mdev) могут динамически заполнять каталог «/ dev» узлами устройства, представляющими доступное в настоящее время оборудование. Linux предоставляет два интерфейса горячего подключения: / sbin / hotplug и netlink.
В следующем файле есть небольшая демонстрация C http://www.kernel.org/doc/pending/hotplug.txt
источник
В основном системное / прикладное программное обеспечение в Linux сегодня использует некоторые методы ipc для связи друг с другом. D-Bus теперь в основном используется с приложениями GNOME и может помочь.
Linux Journal:
вики:
Для этого есть даже библиотека Python, и Ubuntu недавно использовала эту способность, которая называется « Zeitgeist ».
источник
Графически вы можете увидеть, распознается ли монитор
Monitor
, я знаю, что вы можете найти это в Ubuntu, Fedora и других в этом (или подобном) месте.И вы можете включить / выключить любой монитор или использовать оба одновременно с дублированным изображением на обоих мониторах или независимых мониторах.
источник