[РЕШЕНО] Детектирование/переключение на большой монитор при загрузке

Есть задача: при загрузке, смотреть подключен ли большой монитор, и, если да -- переключать вывод на него.

Написан скрипт такого плана:
[[ $(< /sys/class/drm/card0-VGA-1/status) == 'connected' ]] && xrandr --output VGA-0 --mode 1920x1080 --output LVDS --off

[[ $(< /sys/class/drm/card0-VGA-1/status) == 'disconnected' ]] && xrandr --output VGA-0 --off --output LVDS --mode 1366x768

Есть service-файл для systemd:
[Unit]
Description=Check if monitor connected at startup
Requires=display-manager.service
After=display-manager.service

[Service]
Type=simple
ExecStart=/usr/local/bin/monitor-connected.sh

[Install]
WantedBy=graphical.target

Systemd был использован потому, что читать файлы в /sys/class/drm/ может только root. А так, повесилбы на автозагрузку в KDE.
Проблема с этим всем такая: если запускать xrandr из-под рута, то получаешь:
No protocol specified
Can't open display :0

"display :0" -- тут всеп правильно. Насильное пределение DISPLAY ситуацию не спасает.

Работает xrandr из под рута, если ему указать на .Xauthority пользователя, залогиненного в данный момент. Типа так:
$ sudo su
# XAUTHORITY=/home/pilat/.Xauthority xrandr

НО(опять..) когда я на экране KDM -- никакой пользователь еще не залогинен же? Как выкрутиться?
----
Решение (правда, через автозагрузку KDE пришлось):

http://archpilat.blogspot.ru/2014/08/automatically-switch-to-big-monitor-on.html
P.S.: хотел использовать udev для переключения в момент физического присоединения/отсоединения монитора, но он почему-то не генерирует события. Вернее, генерирует один раз, где-то на этапе загрузки, а дальше вставляй-вынимай -- все молчок.

"Ловить" пытался так:
SUBSYSTEM=="drm", ACTION=="change", ENV{HOTPLUG}=="1", RUN+="/usr/local/bin/monitor-connected.sh"

Но правило тупо не срабатывало (в полной версии monitor-connected.sh есть еще код для записи в лог до попыток вызвать xrandr).
mityukov
читать файлы в /sys/class/drm/ может только root
У меня с драйверами nouveau и intel всё читается под юзером.
У меня с драйверами nouveau и intel всё читается под юзером.

Слушай, у меня, похоже, тоже. Сделаю через автостарт.

Впрочем, все-равно интересно, можно ли менять разрешение/конфигурацию монитора для KDM?
mityukov
Насильное пределение DISPLAY ситуацию не спасает.
Мне помогло
export XAUTHORITY=/home/$USER/.Xauthority
export DISPLAY=:0
Правда задача немножко другая - переключать дисплеи при втыкании HDMI в телевизор, не совсем решилась, ибо удев иногда зажиливает событие вытыкания. Что монитор воткнут иксы понимают сами и в него рисуют без лишнего напоминания:
[     5.749] (II) intel(0): switch to mode [email protected] on LVDS1 using pipe 0, position (0, 0), rotation normal, reflection none
[     5.782] (II) intel(0): switch to mode [email protected] on VGA1 using pipe 1, position (0, 0), rotation normal, reflection none
У меня в кедах на атозагрузке стоит скрипт со следующим содержанием:
#!/bin/bash

IN="LVDS1"
EXT="VGA1"

if (xrandr | grep "$EXT" | grep "disconnected")
    then
    xrandr --output $EXT --off --output $IN --auto
    else
        if (xrandr | grep "$EXT" | grep " connected")
            then
            xrandr --output $IN --off --output $EXT --auto
        fi
fi
и всё работает.
P.S. при установке скрипта в автозагрузку, лучше выставить параметр запуска "Перед запуском KDE", а то сперва будут "загораться" оба монитора и лишь после полной загрузки кед будет "тухнуть" ноутбучный монитор.
 
Зарегистрироваться или войдите чтобы оставить сообщение.