Linux: Как запустить скрипт, когда подключен внешний монитор?

10

Как я могу определить, когда внешний монитор подключен в Linux?

Мне нужно запустить различные сценарии, чтобы настроить мое рабочее пространство.

Есть ли какой-нибудь умный способ запустить скрипт, когда состояние монитора изменилось?

Я использую драйвер дисплея Nvidia.

Joernsn
источник
Хакерским способом было бы написать скрипт, который запрашивает изменения в выходных данных xrandrкаждые пару секунд и запускает скрипт (ы), если он замечает разницу.
new123456
В идеале вы можете сказать udev запустить скрипт. Я не ожидаю, что это будет работать с драйверами nvidia, пока не поддерживается KMS, хотя я не пробовал. stackoverflow.com/questions/5469828/…
Энди

Ответы:

3

Существует набор инструментов, называемых read-edid, которые могут анализировать расширенные идентификационные данные дисплея (EDID). Если ваш внешний монитор фактически обнаружен этими инструментами, вы можете периодически проверять обнаружение и использовать выходные данные для запуска сценариев и т. Д.

Вы не упомянули, нужно ли вам делать это независимо от того, запущен ли X.

Рольф
источник
Да, мне это нужно только в X. У меня есть и другие инструменты, которые распознают дисплеи (например, disper), но я надеялся избежать написания демона :)
Joernsn
1

Я искал тот же ответ: /
Я использую disper ( http://willem.engen.nl/projects/disper ) и gconftool для включения / отключения моего второго монитора вместе со второй панелью gnome на нем.
disper -l выводит список всех подключенных мониторов, чтобы вы могли опрашивать их как последнее средство.

# 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
источник
1

Вы должны использовать udevсобытия ... возможное правило может выглядеть так:

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

(Источник https://bbs.archlinux.org/viewtopic.php?pid=1329375#p1329375 )

0x1ad1b88
источник
0

Учитывая, что по состоянию на 270.18 двоичные драйверы nVidia, похоже, по-прежнему не реализуют современный XRandR, вам, возможно, придется просто согласиться с предложением new123456 опрашивать инструмент, например, xrandrдля изменения размера экрана.

В моей системе мне еще предстоит найти способ сделать так, чтобы nVidia правильно объявила о xrandrтом, что у меня есть два монитора 1280x1024, а не один 2560x1024 ... который, как вы можете догадаться, делает полноэкранные игровые центры на обоих мониторах, когда я запрещаю их от изменения разрешения. (Это испортило мои настольные наклейки)

ssokolow
источник