В gnome с xmonad, как я могу вызвать скрипт, когда монитор подключен ИЛИ при стыковке моего ноутбука?

Проблема:

У меня есть дополнительный набор верхней и нижней панели gnome для второго монитора. Когда я отсоединяю свой Lenovo Thinkpad (T510), дополнительные верхняя и нижняя панели остаются, поэтому у меня две сверху и две снизу. В настоящее время я использую экземпляр RHEL6/Fedora (x86_64) gnome (2.28.2) с xmonad (0.9.1-6.1.el6), установленным в качестве оконного менеджера, используя расширения xmonad для работы в gnome.

Пробовал:

Я использовал acpi и нашел код для стыковки и расстыковки, но когда я пытаюсь использовать скрипт, который я нашел в этот пост в блоге, он получает ноль при вызове xrandr. Скрипт работает при самостоятельном вызове из терминала. Я пытался вызвать отдельный сценарий цикла в своем собственном потоке, и он продолжает получать нулевое значение для значения, спустя много времени после обновления экрана (ов).

Я понял, как запускать цикл скрипта каждые X секунд и проверять наличие файла, который затрагивается в случае, если скрипт получает ноль, а затем выполняет необходимые изменения, но мне не нравится такой подход.

Вопрос:

Я надеюсь, что кто-то знает место, где я могу сбросить вызов упомянутому сценарию, и мои панели будут появляться и исчезать, как я и ожидал, без необходимости запускать сценарий вручную.

Спасибо!

Обновление: я добавил награду в размере 50 (максимум, которую я могу сделать) за ответ.

Бен


person Ben Rose    schedule 23.01.2012    source источник


Ответы (1)


Я предполагаю, что возникает одна из проблем, перечисленных ниже (или обе):

1) похоже, что ваш фрагмент xrandr не возвращает правильные значения, потому что переменная среды $ DISPLAY установлена ​​​​неправильно. Сценарий обработчика Acpi обычно запускается от имени пользователя, который не является пользователем, выполняющим текущий X-сеанс. Таким образом, xrandr просто не знает, к какому $DISPLAY обращаться.

2) если $DISPLAY установлено правильно, пользователь acpid может по-прежнему не иметь доступа к вашему запущенному xsession. Вы можете проверить, будет ли скрипт работать через обработчик acpi, если вы выполните xhost + от имени пользователя, который в данный момент запускает текущую xsession с $DISPLAY, указанным в вашем скрипте. Это отключит контроль доступа для X. Вы можете снова включить его с помощью xhost -.

Проверьте это, я надеюсь, что это поможет или, по крайней мере, укажет вам, в каком направлении копать.

person jham    schedule 27.01.2012
comment
Спасибо за ответ jham. Я попробую ваши предложения, когда буду на работе на следующей неделе (дома нет док-станции). - person Ben Rose; 28.01.2012
comment
Сегодня был болен и, вероятно, не будет возможности проверить вашу теорию в течение нескольких дней. - person Ben Rose; 31.01.2012