LINUX.ORG.RU
ФорумTalks

Про архитектуру display manager'ов

 ,


0

2

Почему разработчики решили, что запихнуть логику управления местами в главный процесс display manager'а и забить на возможность одновременного запуска нескольких его экземпляров хорошая идея? Попытался сделать для LightDM instantiated сервис (lightdm@.service, чтоб запускать/останавливать по отдельности lightdm@seat0, lightdm@seat1) с костыльными конфигами, в которых для всех мест кроме управляемого текущим экземпляром команда запуска иксов переопределяется на false - не сработало, второй экземпляр ругается на невозможность занять имя на шине DBus. Судя по документации, все основные альтернативы работают так же. Кто-нибудь знает юзабельную?

★★

Снеси системду и запускай сколько хочешь dm.

Только что запустил парочку xdm

xdm -server ":1 Test1 local /usr/bin/X :1"
xdm -server ":2 Test2 local /usr/bin/X :2"
вуаля - пара новых dm на консолях Alt-F8/F9

Stanson ★★★★★
()

Потому что seat-ы — это виртуальная конструкция, они появляются динамически в зависимости от воткнутого железа. Как ты себе представляешь несколько экземпляров LightDM, договаривающихся друг с другом, какой видеовыход куда относится?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

договаривающихся друг с другом, какой видеовыход куда относится?

Если бы было можно создавать seat-ы для видеовыходов... Пока только для видеокарт.

utf8nowhere ★★★
()
Ответ на: комментарий от utf8nowhere

Угу. Multiseat - занятнейшая шняга. Я делал, чисто для прикола. Завелось, правда, только для гнома.

tiinn ★★★★★
()
Ответ на: комментарий от intelfx

Как ты себе представляешь несколько экземпляров LightDM, договаривающихся друг с другом, какой видеовыход куда относится?

Так ведь этим не LightDM занимается, а иксы, запущенные с параметром -seat. LightDM всего лишь запрашивает список мест у logind, стартует по иксам с соответствующими параметрами на каждом и сессии с гритерами. Можно написать отдельного демона, который будет слушать logind и при появлении новых мест автоматически запускать lightdm@seatname.

shatsky ★★
() автор топика
Ответ на: комментарий от tiinn

Кстати, интересно, насколько это полноценно реализуемо на современных видеокартах, т. е. насколько на самом деле независимы их видеовыходы. Я настраивал Aster под виндой с общей видеокартой, и это работало, но при переключении видеорежима на одном из мест на дисплее второго тоже временно пропадало изображение, причем некоторые запущенные на нем в полноэкранном режиме игрушки не всегда могли его восстановить - видимо, отвечающий за это код выполнялся только по событиям, которые предусмотрели разработчики, таким как переключение разрешения из самой игрушки или переключение на ее «окно». Учитывая, что винда сбрасывает видеорежим даже при отображении диалога UAC (насколько я понял, там адовый костыль для того, чтоб они не могли сами имитировать нажатие на кнопку подтверждения)...

shatsky ★★
() автор топика
Ответ на: комментарий от tiinn

Я про

Aster

, проприетарный костыль отечественной разработки

shatsky ★★
() автор топика
Ответ на: комментарий от shatsky

Да, ты прав. Я сейчас посмотрел — раздачей номеров ситам занимается logind.

Тогда объяснение на самом деле очень простое: lightdm (да и все остальные multiseat-aware DM) создавались, когда systemd ещё в проекте не было. В это время в каждой программе было принято костылить свой супервизор.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от shatsky

Кстати, интересно, насколько это полноценно реализуемо на современных видеокартах, т. е. насколько на самом деле независимы их видеовыходы.

Насколько я знаю, это зависит от количества CRTC (в терминологии DRM) у видеокарты. CRTC отвечает за разрешение экрана. С одной стороны он подключается к фреймбуферу, а к CRTC могут подключаться видеовыходы. При этом на всех видеовыходах будет одно и то же разрешение и одна и та же картинка.

Если видеокарты 2 CRTC и 3 выхода (например, VGA и 2 HDMI), то «независимыми» могут быть только 2 из них.

utf8nowhere ★★★
()

Про мультисит

В принципе, сейчас возможно сделать мультисит на одном GPU с несколькими видеовыходами без костылей вроде Xnest. Пару лет назад в DRM (так что nvidia в пролёте) завезли leases — возможность отделять часть DRM-ресурсов (CRTC, видеовыходы, разрешения и т.д.) от DRM-мастера и отдавать их кому-то. Например, VR-шлему. Чтобы он полностью ими управлял и не зависел от оконной системы.

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

Но ядерщики считают, что раз logind рулит seat-ами, он может и leases создавать сам. А Лёнька считает, что раз logind умеет подхватывать автоматически видеокарты и делать на них seat, то делать ему ничего не надо, пусть ядерщики делают драйвер, который будет делить один адаптер на несколько виртуальных.

Такие дела.

utf8nowhere ★★★
()
Последнее исправление: utf8nowhere (всего исправлений: 1)
Ответ на: Про мультисит от utf8nowhere

Спасибо, даже не знал про эту фичу. А откуда сведения о позиции Поттеринга по данному вопросу? Заметил, что loginctl показывает выходы видеокарт и позволяет аттачить их к местам по отдельности. Иксы, конечно же, не запускаются, спотыкаясь на DRM_IOCTL_SET_VERSION карты, занятой экземпляром, который успел. И даже непонятно, как эта конфигурация хранится - создаваемое в разультате аттача правило в /etc/udev/rules.d ставит тег на всю карту по PCI ID, про указанный выход там ничего не видно, хотя последующие выполнения loginctl seat-status показывают, что он помнит аттач именно отдельного выхода.

shatsky ★★
() автор топика
Ответ на: комментарий от shatsky

А откуда сведения о позиции Поттеринга по данному вопросу?

Наткнулся в каком-то мейл. листе на его сообщение. Потом потерял и обратно нагуглить не смог.

utf8nowhere ★★★
()
Последнее исправление: utf8nowhere (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.