URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 109061
[ Назад ]

Исходное сообщение
"Вышел менеджер настроек экрана randrctl 1.2 "

Отправлено opennews , 10-Сен-16 22:59 
Состоялся релиз randrctl 1.2 (http://github.com/edio/randrctl), менеджера настроек экрана для мульти-мониторных конфигураций. В рамках проекта randrctl развивается утилита, написанная на языке Python, которая позволяет сохранить текущие настройки экрана в файл с тем чтобы применить их позже (вручную либо автоматически), когда к компьютеру будет подключен тот же или подобный набор мониторов.

Для определения момента подключения мониторов, а также для считывания текущих настроек и применения настроек из профилей в randrctl используются функции udev и xrandr. С момента релиза 1.0 добавлена поддержка  конфигураций  HiDPI (опции scale), исправлена обработка XDG_CONFIG_HOME,  обновлено описание проекта на Github и проведена чистка кода и исправление мелких ошибок.

URL: http://github.com/edio/randrctl
Новость: http://www.opennet.ru/opennews/art.shtml?num=45116


Содержание

Сообщения в этом обсуждении
"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 10-Сен-16 22:59 
Так а в чём собственно отличие от xrandr?

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Андрей , 10-Сен-16 23:47 
А он умеет сохранять в файл (и восстанвливать)?

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним84701 , 10-Сен-16 23:50 
> Так а в чём собственно отличие от xrandr?

Это обвязка. Внутри используется xrandr. Задумка в автоматизации – настроил один раз, сохранил в файл и можешь в следующий раз загрузить готовое.
Ваш Кэп.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено X2asd , 11-Сен-16 10:20 
>  настроил один раз, сохранил в файл и можешь в следующий раз загрузить готовое.

Вот ты сейчас описал работу randr..

Настроил 1 раз

Записал в файл (.sh)

Следующий раз просто запускаешь файл (.sh)


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 11-Сен-16 11:17 
Со скриптов все и началось. Но когда их стало >3, и когда я начал забывать, где и какой надо запустить, понял, что это не очень удобно.

randrctl умеет автоматически выбирать среди сохраненных профилей тот, который больше всего подходит (умеет по edid и по разрешению). А использование udev позволяет вообще ничего не запускать: раз сохранил профиль, дальше при подключении он активируется автоматически.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено derlafff , 11-Сен-16 11:26 
Ну это нужно вручную опознавать нужный .sh

А тут оно смотрит на мониторы и подгружает соответствующий конфиг


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено rshadow , 11-Сен-16 15:37 
Один фиг иксы не умеют в идентификатор монитора. Оперируют выходами. Выходы перепутал и вся конфигурация по *** пошла.

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


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним84701 , 11-Сен-16 16:23 
>>  настроил один раз, сохранил в файл и можешь в следующий раз загрузить готовое.
> Вот ты сейчас описал работу randr..
> Настроил 1 раз
> Записал в файл (.sh)
> Следующий раз просто запускаешь файл (.sh)

Под это описание подходит и обвязка arandr, которая с графикой и записью настроек в шелл-скрипт. Признаю сразу свое неосиляторство и недостаточную крутизну, но настраивать позицию экранов относительно друг друга мышевозя и имея "картинку" мне как-то проще и удобнее, чем методом тыка с подбором подходящих значений.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Андрей , 10-Сен-16 23:49 
А вот зачем эту системную утилитку нужно было писать на питоне?

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Avari , 11-Сен-16 00:04 
Затем, что _обвязку_ к системной утилитке xrandr вполне разумно писать на каком-нибудь скриптовом языке.

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Neurotic , 11-Сен-16 00:16 
Если кому надо подобное на bash, https://github.com/Vladimir-csp/rerandr3

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено freehck , 13-Сен-16 01:45 
> Если кому надо подобное на bash, https://github.com/Vladimir-csp/rerandr3

Спасибо!


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Андрей , 11-Сен-16 17:03 
> _обвязку_ к системной утилитке xrandr

Так всё таки обвязку. Вот так бы в новости прямо и написали. Тогда бы и вопроса не было.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 11-Сен-16 19:21 
Вроде, именно так и написано

> Для определения момента подключения мониторов, а также для считывания текущих настроек и применения настроек из профилей в randrctl используются функции udev и xrandr


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено EuPhobos , 11-Сен-16 00:33 
Кто-то не осилил конфигурацию иксов?

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 11-Сен-16 01:10 
Кто-то юзает иксы? лично мы используем радугу на OSX

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 11-Сен-16 09:20 
Ага а ещё Metal вместо OpenGL и Swift вместо С\С++. Велосипедисты ненужны.

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 11-Сен-16 12:49 
Поддержка wayland планируется?
Очень не хватает утилиты вроде xrandr для него, которая работала бы в разных композиторах.

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 11-Сен-16 23:12 
Нет и не будет в силу его убогой негибкой архитектуры.

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 11-Сен-16 13:13 
> Очень не хватает утилиты вроде xrandr для него, которая работала бы в разных композиторах.

Вы не тех пинаете, это невозможно в дефолтном протоколе wayland.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 11-Сен-16 17:21 
а systemd-randrctld обещают?

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 11-Сен-16 23:29 
Обещают systemd-opennet-anonymous-commentd.

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Wladmis , 11-Сен-16 18:11 
Вот уж по-настоящему большое ненужно. Мало того, что это просто обвязка вокруг xrandr(1) и оно не умеет RandR 1.2 в Wayland, так и то, что оно делает, решается использованием xrandr(1) + правилами udev.

P.S. Код поражает воображение своей серьёзностью, с которой написан.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено аноним123 , 11-Сен-16 19:17 
> решается использованием xrandr(1) + правилами udev.

Это и есть решение с использованием xrandr и udev. Готовое, легкое в использовании решение.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Wladmis , 11-Сен-16 19:25 
>> решается использованием xrandr(1) + правилами udev.
> Это и есть решение с использованием xrandr и udev. Готовое, легкое в
> использовании решение.

Готовое — возможно, лёгкое в использовании — сомнительно. Но возникает вопрос: кто им будет пользоваться? Пользователи DE используют средства настройки экрана своей DE. А у пользователей маленьких оконных менеджеров, если им это надо, уже всё давно настроено. Или скриптик написан в несколько строчек, или правила udev'а.

Тем более, для такой простой утилиты код написан чересчур сложновато на мой взгляд.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 11-Сен-16 20:14 
> А у пользователей маленьких оконных менеджеров, если им это надо, уже всё давно настроено.

Я, как раз, пользователь маленького оконного менеджера. Мне было надо, настроил себе — предлагаю свое решение другим.

И мне кажется, что решение, таки, легкое в использовании: мне было бы гораздо сложнее переносить какой-то набор своих скриптов с машины на машину, не забывая при этом править названия аутпутов и пр.. Хотелось сразу чего-то более-менее универсального и, кажется, получилось.

По поводу кода: почувствовал сам, что написан не лучшим образом, когда захотел добавить HiDPI после того, как почти год не смотрел на код. Начиналось все как хелловорлд на питоне...


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено freehck , 12-Сен-16 09:22 
> позволяет сохранить текущие настройки экрана в файл с тем чтобы применить их позже (вручную либо автоматически), когда к компьютеру будет подключен тот же или подобный набор мониторов.

Интересно. Гипотетическая ситуация: я сохранил настройку для двух мониторов, но потом решил переключить один из мониторов с VGA на DVI. Настройки всё равно подхватятся?


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 12-Сен-16 11:20 
Нет, только на том же аутпуте.

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


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено Аноним , 12-Сен-16 22:00 
А что если настроил, а потом внешний моник отключил? А потом снова подключил? А потом перезагрузился без моника и подключил его позже? Или загрузился сразу с ним? Мне вот сейчас каждый раз приходится с помощью xrandr вручную добавлять (что вызывает ошибку если он не подключен в этот момент, на сколько я помню) полноценное разрешение 1280x1024 для внешнего монитора (автоматом система его распознаёт только на 1024x768). ОС Ubuntu 16.04 (в прочем, проблеме больше 5 лет точно), моник подключен через D-Sub, видеокарта Intel.

"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 13-Сен-16 00:10 
> А что если настроил, а потом внешний моник отключил? А потом снова
> подключил? А потом перезагрузился без моника и подключил его позже? Или
> загрузился сразу с ним? Мне вот сейчас каждый раз приходится с
> помощью xrandr вручную добавлять (что вызывает ошибку если он не подключен
> в этот момент, на сколько я помню) полноценное разрешение 1280x1024 для
> внешнего монитора (автоматом система его распознаёт только на 1024x768). ОС Ubuntu
> 16.04 (в прочем, проблеме больше 5 лет точно), моник подключен через
> D-Sub, видеокарта Intel.

все зависит от udev. Если он триггерит для d-sub выхода событие (по идее, должен), то будет работать.

в prior-switch hook надо будет добавлять к монитору разрешение. Правда, на данном этапе, в prior-switch надо будет самому проверять edid монитора.

Я мог бы передавать в prior-switch md5 от edid (если вам эта опция подходит, заведите issue, пожалуйста, займусь в ближайший свободный вечер), тогда проверка была бы простая:

.config/randrct/config.ini
prior_switch = /path/to/add_resolution.sh

/path/to/add_resolution.sh
if [ "$edid" -eq "$my_monitor_edid" ]; then xrandr ... ; fi


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 13-Сен-16 00:18 
Пример по поводу udev и отключений/подключений.

У меня есть профиль default без внешних мониторов, и, например office.
В офисе я могу снять работающий ноут с докстанции, и тогда сразу активируется default.
А могу сначала усыпить ноут, а потом снять с докстанции. Тогда default активируется при пробуждении.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено freehck , 12-Сен-16 22:31 
> Нет, только на том же аутпуте.

Тогда Вы меня окончательно запутали. В сообщении №23 Вы написали, что:

> мне было бы гораздо сложнее переносить какой-то набор своих скриптов с машины на машину, не забывая при этом править названия аутпутов и пр..

Значит, при смене output-а всё равно конфигурация мониторов не подхватится? Тогда я не очень уяснил, в чём суть. Если для каждой конфигурации мониторов на каждом месте мне придётся настраивать всё это дело заново, так не легче ли сразу xrandr?

Вот у меня, например, в настройках lightdm.conf прописано следующее:
display-setup-script=/etc/lightdm/monitor-setup.sh

А monitor-setup.sh - скрипт в две строчки:
xrandr --auto --output VGA-1 --mode 1680x1050 --primary
xrandr --auto --output DVI-I-1 --mode 1680x1050 --left-of VGA-1

Ну допустим, что основной монитор - это монитор от ноутбука, а левый - подключаемый. Если вместо моего скрипта использовать Ваш, то я правильно понял, что он автоматически проверит наличие левого монитора и выберет соответствующую конфигурацию?

С другой стороны, для подобной проверки лично мне бы, конечно, было бы проще написать обвязку одной строчкой, наподобие:

if xrandr | grep -q 'DVI-I-1 connected' ; then <DVI-I-1 command> ; fi

UPD:
Да и касательно udev, можно ведь вышеописанный трёхстрочник скормить ему примерно так:
ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/path/to/monitor-setup.sh"

В общем, я пока всё никак по-видимому не пойму use-case Вашего скрипта, извините.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 12-Сен-16 23:58 
юзкейз такой: у меня один ноутбук, но 4 "рабочих" места: мониторы через докстанцию в офисе, телевизор в офисе, монитор дома, проектор дома. А, и еще просто лептоп, без мониторов, итого — 5.

randrctl позволяет не вызывать 5 скриптов вручную.

> if xrandr | grep -q 'DVI-I-1 connected' ; then <DVI-I-1 command> ; fi

К displayport я подключаю и проектор, и монитор, два разных устройства и два разных конфига.
randrctl проверяет edid устройства, подключенного к аутпуту, и выбирает нужный конфиг.

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


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено freehck , 13-Сен-16 01:39 
> юзкейз такой: у меня один ноутбук, но 4 "рабочих" места: мониторы через докстанцию в офисе, телевизор в офисе, монитор дома, проектор дома. А, и еще просто лептоп, без мониторов, итого — 5.

Вооооот. Вот об этом и *нужно* было писать в новости, edio.

> randrctl позволяет не вызывать 5 скриптов вручную.

Ну зачем же 5 скриптов, да к тому же вручную...
Можно же в shell проверять содержимое /sys, например так:

% find /sys/devices/ -name edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-VGA-1/edid

На эти файлы можно натравить base64, и запомнить edid в текстовом формате.
Ну а дальше - применение настроек тем же самым xrandr, и правило в udev. :)

Возьмите этот метод на заметку, кстати. Всяко лучше, нежели вывод xrandr --verbose парсить. ;)

> randrctl проверяет edid устройства, подключенного к аутпуту, и выбирает нужный конфиг.

По-моему лучше было бы применять настройки к соответствующему output исходя из edid монитора, который к нему подключён.

Резюмируя, скажу, что идея у скрипта хорошая. Я бы наваял на bash, имхо надёжней было. Вашей тулзе желаю успеха. Нужный инструмент всегда найдёт своего пользователя.


"Вышел менеджер настроек экрана randrctl 1.2 "
Отправлено edio , 13-Сен-16 11:31 
в самом начале рассматривал вариант использования /sys, но почему-то тогда от него отказался. Возможно, amd не умели тогда в /sys.

Но вообще, да, идея хорошая, надо будет подумать над ней, спасибо!