LINUX.ORG.RU
ФорумTalks

Поясните за wm, de, x11 и всё всё всё

 , , , ,


0

1

Хотелось бы почитать толковое чтиво по теме, что бы минимум буков - максимум инфы, дабы разобраться фундаментально.

В первую очередь интересует, как панелька DE(ну или отдельная) узнаёт о списке запущенных окон приложения. А самое главное, можно ли унифицированно заставить эту панельку работать с окнами из 2 X11 серверов.

Чего хотелось бы добиться - шарить набор запущенных клиентов между несколькими x11 и переключать их разными способами.

x2go, xpra и прочее сетевое куллером шуршащее - это план Б.

★★★★★

https://www.freedesktop.org/wiki/Specifications/

как панелька DE(ну или отдельная) узнаёт о списке запущенных окон приложения

https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html#idm140130317701136

А самое главное, можно ли унифицированно заставить эту панельку работать с окнами из 2 X11 серверов.

коннектишься к двум серверам, и жонглируешь

шарить набор запущенных клиентов между несколькими x11 и переключать их разными способами

в теории можно. в пределах одного х-сервера переключаешь как обычная панелька; активный x-сервер переключаешь через loginctl(systemd)

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

Можно, для примера, сматчить коннектишься к двум серверам, и жонглируешь с вышеприведённой документацией. Интересует естественно неинтрузивный вариант.

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

ну смотри. обычная панелька коннектится XOpenDisplay($DISPLAY), и запускает event loop, в котором обрабатывает события ввода и мониторит изменение этой самой _NET_CLIENT_LIST на корневом окне.

тебе же нужно делать два соединения XOpenDisplay(:0) и XOpenDisplay(:1), например. и делать все то же самое, но с двумя соединениями.

select в помощь, чтобы ивенты с обоих соединений обрабатывать в одном event-loop-е.

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

Т.е. ты предлагаешь сделать ещё одну панельку?

типа того. только ui у этих панелек общий будет, если вообще будет - тут уж как сам захочешь.

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

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

по крайней мере о существующем софте с требуемым функционалом я не слышал.

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

Не, панелек и так уже много. Нужен диспетчер какой-то между ними.

Например - иногда, очень хочется в тайлинг, а вот в остальных 80% времени, тайлинг это оверкилл(субъективно, нравится тайлинг 100% времени или 0% - к в вопросу отношения не имеет).

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

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

Т.е. - условно в компизе имеем 4 эмулятора терминала каждый из которых открыт в полноэкранном режиме. На другом tty наблюдаем эти терминалы в мозайке тайлинга. Ну и так любое совместимое ПО.

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

Нужен диспетчер какой-то между ними

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

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

Т.е. - условно в компизе имеем 4 эмулятора терминала каждый из которых открыт в полноэкранном режиме. На другом tty наблюдаем эти терминалы в мозайке тайлинга. Ну и так любое совместимое ПО.

мне кажется, какой-нибудь awesome такое должен уметь.

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

А, ну до меня дошло, спасибо. Но есть нюанс - как заставить всех остальных клиентов - тоже подключаться к двум серверам?

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

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

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

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

На другом tty наблюдаем эти терминалы в мозайке тайлинга. Ну и так любое совместимое ПО.

Если тебе нужны только терминалы - screen/tmux, terminator.

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

Не… терминалы для примера. Нужны разные комбинации, их не очень много, но 90% - gui, перевозить в терминал не вижу пока возможности.

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

кеды - нормально, крыса - нормально, гном - не поверишь, нормально. А Unity не знаю, не пробовал (DE просто не люблю). Так что дерзай. На ЛОРе пробегали любители и тайла и комфортного DE (фларри через семерки, такой Ник)...

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

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

Мне нужно не франкотайлинг 100% времени, а возможность подёргать клиентов через другую перспективу, когда так удобней.

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

А кто мешает почитать? Если ты понимаешь, что Xmonad - это конструктор, надстройка над DE в тавоём случае, то уже за тебя всё написали, дали примеры, разжевали многие подходы. Бери и пользуйся.
Некоторые прутся. И да, надстройку можно как интегрировать (сила интеграции тоже зависит от желания) так и отключить ))) На время откючить ))) Навсегда )))

n1rdeks ()
Ответ на: комментарий от pon4ik

Ладно, сорян, что-то тролль во мне тоже бурлит (жара). Xmonad для многомониторной конфы голенький - бомба. С xmonad-contrib превращается вообще во всё, на что хватит фантазии (99% таки действительно написали). Если мне вдруг что-то надоедает тайлинг, то я не переключаю никаких режимов, всё автоматом. По meta и и левой кнопке мыши окно становится float и тяни его в любую часть монитора, дальше meta+правая кнопка - изменение размера. Набаловался, комбинация - тайл.

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

Ты не понял меня защитник животных. Если бы ты был другой овцой Я хочу переключаться между unity a.k.a плагин к compiz, и вторым wm, на одном и том же наборе x11 клиентов. Желательно уже на самом деле на разных инстансах x11 серверов.

Ну, либо я тебя не понял.

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

Так переключайся, проблем то нет. Но зачем? Я не понимаю, где это нужно. Мой мир не видит применения. Опыта у меня нет. Как говаривал мой друг-философ - спрашивай короче )))

n1rdeks ()
Ответ на: комментарий от pon4ik

ага. Ты хочешь следить? Я правильно понимаю? Перехватывать сессию пользователя и выводить их в разные режимы?

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

Зачем, это извечный вопрос на лоре. Затем. Вопрос не зачем, а как.

Как работает replace - я могу понять, но я не хочу делать replace, я хочу 2 дисплея, с одним набором клиентов и разными wm если обобщить. Если в xmonad уже встроен такой шлюз - я с удовольствием глянул бы на эту часть документации.

Куда короче - мне непонятно. Если в xmonad есть такой режим, то наверняка он включается парой флагов, на которые знаток вроде тебя приведёт ссылки за считанные секунды. Это гораздо продуктивнее, чем читать абстрактную инфо в абстрактном интернете.

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

следить

Это частный случай, но он кажется сложнее чем переключение, и проще его реализовать как redirect возможно.

Как писал выше - хочу в одном wm окно на полный экран а в другом в тайлинге.

Чисто теоретически - такое возможно можно накостылить на x2go, но это куча проблем с открытым графическим языком и такое себе быстродействие.

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

:facepalm:

Я не хочу менять wm, я хочу ещё один…

Но, по крайней мере, похоже получилось сформировать чего я на самом деле хочу - а именно мультиплексер для x11 соединения.

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

https://wiki.haskell.org/Xmonad/Using_xmonad_in_KDE

Вот за этим «сидел» Flu77i или как-то так... я не помню. Он ежа с ужом радостно соединил и был доволен. На одном мониторе у него был xmonad, на втором полноценное KDE. Я плотно не разбирался, я даже нуб в DE. Так как использовал довольно давно.

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

В общем и целом, я таки почитал док и понял, почему ты так настойчиво рекомендуешь xmonad. Там и правда заявлена такая возможность. Правда раздел всё же другой:

https://wiki.haskell.org/Xmonad/Config_archive/Running_multiple_xsessions_at_once

Буду разбираться дальше, спасибо. Хотя, чую, что всё сведётся к replace по очереди, который таки не работает с unity by design.

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

Это «как ты видишь». Поверь, то, что ты описал можно сделать разными способами. Мой не лучший, не идеальный и т.д.. Просто как показала практика, всё уже сделали до нас. Постмодерн...

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

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

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

Такое только GTK2 умел. Делаешь unmap(main_window) на первом сервере и map(main_window) на втором. Морда твоей программы убирается с первого и появляется на втором. Работает в том числе и по сети, можно, например, не прерывая выполнение программы, перекинуть её окно с ноута на десктоп, а с декстопа на телефон.

Вот тут раскопки велись: xorg, перекидывание окна на другой DISPLAY, какого хрена? а тут сцылка на решение xorg, перекидывание окна на другой DISPLAY, какого хрена? (комментарий)

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

Понял, спасибо, что подтвердил чутьё моей интуёвины - таки replace.

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

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

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

Это не умение приложений, это умение именно тулкита. Т.к. только тулкит может «знать» текущее состояние всех графических элементов, чтобы их заново перерисовать на новом display. у xorg просто недостаточно информации для этого, и она привязана к текущему display/screen (шрифты, глубина, разрешение и т.п.), а софтина может и не хранить состояние элементов отдавая это на откуп тулкиту и лишь запрашивать это текущее состояние (напр. крыжик включен или выключен) лишь при необходимости. Т.е. уметь map/unmap должен именно тулкит. На самом деле зачатки этого есть почти во всех тулкитах, но они, в основном, глубоко в потрохах, и только в GTK gtk_window_set_screen делающая корректный unmap/map для окна и всех его потомков доступна в API

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

Мде, в gdi всё гораздо проще, по крайней мере - в рамках локального хоста…

Вот почему reparent не позволяет сменить дисплей?

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

Мде, в gdi всё гораздо проще, по крайней мере - в рамках локального хоста…

В рамках локального хоста - это вообще не решение озвученной задачи. Между разными screen одного display тебе и штатный WM всё прекрасно перетащит.

Вот почему reparent не позволяет сменить дисплей?

Потому что это другой display, и, соответсвенно, другой сервер. Надо заново создать все окна, примитивы и пр.

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