The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Вышел менеджер настроек экрана randrctl 1.2

10.09.2016 15:39

Состоялся релиз randrctl 1.2, менеджера настроек экрана для мульти-мониторных конфигураций. В рамках проекта randrctl развивается утилита, написанная на языке Python, которая позволяет сохранить текущие настройки экрана в файл с тем чтобы применить их позже (вручную либо автоматически), когда к компьютеру будет подключен тот же или подобный набор мониторов.

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

  1. Главная ссылка к новости (http://github.com/edio/randrct...)
Автор новости: edio
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/45116-randr
Ключевые слова: randr
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (35) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 22:59, 10/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Так а в чём собственно отличие от xrandr?
     
     
  • 2.2, Андрей (??), 23:47, 10/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А он умеет сохранять в файл (и восстанвливать)?
     
  • 2.4, Аноним84701 (?), 23:50, 10/09/2016 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Так а в чём собственно отличие от xrandr?

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

     
     
  • 3.10, X2asd (ok), 10:20, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >  настроил один раз, сохранил в файл и можешь в следующий раз загрузить готовое.

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

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

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

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

     
     
  • 4.11, edio (?), 11:17, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Со скриптов все и началось. Но когда их стало >3, и когда я начал забывать, где и какой надо запустить, понял, что это не очень удобно.

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

     
  • 4.12, derlafff (ok), 11:26, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ну это нужно вручную опознавать нужный .sh

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

     
  • 4.15, rshadow (ok), 15:37, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Один фиг иксы не умеют в идентификатор монитора. Оперируют выходами. Выходы перепутал и вся конфигурация по *** пошла.

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

     
  • 4.16, Аноним84701 (?), 16:23, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >>  настроил один раз, сохранил в файл и можешь в следующий раз загрузить готовое.
    > Вот ты сейчас описал работу randr..
    > Настроил 1 раз
    > Записал в файл (.sh)
    > Следующий раз просто запускаешь файл (.sh)

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

     

  • 1.3, Андрей (??), 23:49, 10/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    А вот зачем эту системную утилитку нужно было писать на питоне?
     
     
  • 2.5, Avari (?), 00:04, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Затем, что _обвязку_ к системной утилитке xrandr вполне разумно писать на каком-нибудь скриптовом языке.
     
     
  • 3.6, Neurotic (?), 00:16, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Если кому надо подобное на bash, https://github.com/Vladimir-csp/rerandr3
     
     
  • 4.34, freehck (ok), 01:45, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Если кому надо подобное на bash, https://github.com/Vladimir-csp/rerandr3

    Спасибо!

     
  • 3.17, Андрей (??), 17:03, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > _обвязку_ к системной утилитке xrandr

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

     
     
  • 4.21, edio (?), 19:21, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Вроде, именно так и написано

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

     

  • 1.7, EuPhobos (ok), 00:33, 11/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Кто-то не осилил конфигурацию иксов?
     
     
  • 2.8, Аноним (-), 01:10, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Кто-то юзает иксы? лично мы используем радугу на OSX
     
     
  • 3.9, Аноним (-), 09:20, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ага а ещё Metal вместо OpenGL и Swift вместо С\С++. Велосипедисты ненужны.
     

  • 1.13, Аноним (-), 12:49, 11/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Поддержка wayland планируется?
    Очень не хватает утилиты вроде xrandr для него, которая работала бы в разных композиторах.
     
     
  • 2.24, Аноним (-), 23:12, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Нет и не будет в силу его убогой негибкой архитектуры.
     

  • 1.14, Аноним (-), 13:13, 11/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Очень не хватает утилиты вроде xrandr для него, которая работала бы в разных композиторах.

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

     
  • 1.18, Аноним (-), 17:21, 11/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    а systemd-randrctld обещают?
     
     
  • 2.25, Аноним (-), 23:29, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Обещают systemd-opennet-anonymous-commentd.
     

  • 1.19, Wladmis (ok), 18:11, 11/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вот уж по-настоящему большое ненужно. Мало того, что это просто обвязка вокруг xrandr(1) и оно не умеет RandR 1.2 в Wayland, так и то, что оно делает, решается использованием xrandr(1) + правилами udev.

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

     
     
  • 2.20, аноним123 (?), 19:17, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > решается использованием xrandr(1) + правилами udev.

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

     
     
  • 3.22, Wladmis (ok), 19:25, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> решается использованием xrandr(1) + правилами udev.
    > Это и есть решение с использованием xrandr и udev. Готовое, легкое в
    > использовании решение.

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

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

     
     
  • 4.23, edio (?), 20:14, 11/09/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > А у пользователей маленьких оконных менеджеров, если им это надо, уже всё давно настроено.

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

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

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

     

  • 1.26, freehck (ok), 09:22, 12/09/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > позволяет сохранить текущие настройки экрана в файл с тем чтобы применить их позже (вручную либо автоматически), когда к компьютеру будет подключен тот же или подобный набор мониторов.

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

     
     
  • 2.27, edio (?), 11:20, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, только на том же аутпуте.

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

     
     
  • 3.28, Аноним (-), 22:00, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А что если настроил, а потом внешний моник отключил? А потом снова подключил? А потом перезагрузился без моника и подключил его позже? Или загрузился сразу с ним? Мне вот сейчас каждый раз приходится с помощью xrandr вручную добавлять (что вызывает ошибку если он не подключен в этот момент, на сколько я помню) полноценное разрешение 1280x1024 для внешнего монитора (автоматом система его распознаёт только на 1024x768). ОС Ubuntu 16.04 (в прочем, проблеме больше 5 лет точно), моник подключен через D-Sub, видеокарта Intel.
     
     
  • 4.31, edio (?), 00:10, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > А что если настроил, а потом внешний моник отключил? А потом снова
    > подключил? А потом перезагрузился без моника и подключил его позже? Или
    > загрузился сразу с ним? Мне вот сейчас каждый раз приходится с
    > помощью 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

     
  • 4.32, edio (?), 00:18, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Пример по поводу udev и отключений/подключений.

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

     
  • 3.29, freehck (ok), 22:31, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Нет, только на том же аутпуте.

    Тогда Вы меня окончательно запутали. В сообщении №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 Вашего скрипта, извините.

     
     
  • 4.30, edio (?), 23:58, 12/09/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    юзкейз такой: у меня один ноутбук, но 4 "рабочих" места: мониторы через докстанцию в офисе, телевизор в офисе, монитор дома, проектор дома. А, и еще просто лептоп, без мониторов, итого — 5.

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

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

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

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

     
     
  • 5.33, freehck (ok), 01:39, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > юзкейз такой: у меня один ноутбук, но 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, имхо надёжней было. Вашей тулзе желаю успеха. Нужный инструмент всегда найдёт своего пользователя.

     
     
  • 6.35, edio (?), 11:31, 13/09/2016 [^] [^^] [^^^] [ответить]  
  • +/
    в самом начале рассматривал вариант использования /sys, но почему-то тогда от него отказался. Возможно, amd не умели тогда в /sys.

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

     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру