LinuxForum.Fans
Тема

Как написать свой оконный менеджер для X11?

Автор: teodicea 14 сообщений 5055 просмотров
#101327

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

Хотелось бы знать, где копать, что-то вроде конкретного руководства:
1. Каким образом один Х клиент (WM), может управлять окнами других программ,
2. Как добавлять к чужим окнам свои украшения и кнопки,
3. Как сделать копию окна запущенной программы (не еще один экземпляр программы в новом окне, но окно-копию имеющегося, запущенной программы),
4. Как вообще потом зарегистрировать новый WM в системе именно как оконный менеджер и загружаться с него.

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

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

#101534

Попробуй посмотреть исходники DWM.

teodicea написал:
1. Каким образом один Х клиент (WM), может управлять окнами других программ,

WM разьве является X клиентом?

teodicea написал:
4. Как вообще потом зарегистрировать новый WM в системе именно как оконный менеджер и загружаться с него.

Просто запустить бинарник при вырубленном WM.

#101565
SkaarjZR написал:

WM разьве является X клиентом?

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

#101604

стесняюсь спросить: вы man X читали? по ссылкам ходили?

#101732
drBatty написал:
стесняюсь спросить: вы man X читали? по ссылкам ходили?

Нет man Xorg`а не читал, но ведь я не по стандартному Х протоколу хочу писать - уже давно существует библиотека Xlib, но я нигде не видел руководства по Xlib, где бы говорилось как написать Оконный менеджер, в основном только все о взаимодействии с ним (чтобы обойти его и самому управлять окном своей программы), мне же нужно, чтобы сам WM распоряжался всеми окнами.

Просмотрел исходники DWM - там действительно, как то еще можно разобраться. Там создается структура "Window", в которой все новые окна, помещаются в стек, а от туда, структурой "Client", они организовываются специальными командами (из библиотеки Xlib) для задания им новых параметров (координат и размеров). Это насколько я понял по исходникам.

Попробую разобраться с имеющимся материалом, если получится - напишу руководство. Думаю написание WM лучшее средство, чтобы выучить Xlib, потому, что для других прикладных программ используют библиотеки более верхнего уровня (GDM, QT, Tk, wxWidgets и другие, кому какие нравятся).

Если кто-то владеет опытом написания Менеджера окон или может предложить конкретные примеры по указанным, в головном посте, пунктам, пишите, с удовольствием посмотрим. Думаю эта тема интересна пользователям. Видел на других форумах подобные темы (открытые не мной), которые остались без ответов.

#102045

Эх, погорячился я :rolleyes:
Действительно в man`е X много полезной информации, а также в манах команд Xlib.

#102077
teodicea написал:
man`е X много полезной информации

алсо, посмотрите SEE ALSO ;)

teodicea написал:
Попробую разобраться с имеющимся материалом, если получится - напишу руководство. Думаю написание WM лучшее средство, чтобы выучить Xlib

было-бы просто чудесно!

#102121
drBatty написал:

алсо, посмотрите SEE ALSO ;)
!

Что это? :o

#102123

речь идет о man-страницах... в конце которых всегда пишется "SEE ALSO", что значит "СМОТРИТЕ ТАК ЖЕ".... т.е. список тем имеющих отношение к этой...

#102127

Понял, сасибо! wink

#102328
teodicea написал:
Просмотренная мной документация по Xlib говорит только о взаимодействии окон новых программ с уже имеющимся менеджером окон, а не о управлении окнами других программ как своими собственными, на правах оконного менеджера.

Исходные коды. Если нужно что-то конкретное, то всегда можно спросить в рассылке или IRC у разработчиков/майнтейнеров.

Но для начала попробуйте понять как работают уже написанные оконные менеждеры. Возмите что-то простое и поиграйтесь с этим.

Например fluxbox:

text
mkdir hacking
cd hacking
git clone git://git.fluxbox.org/fluxbox.git fluxbox
cd fluxbox
du -sh src/
2.6M    src/

Думаю, что два с половиной метра исходников переработать будет возможно.

p.s.
Блин, аж самому интересно стало wink

#102333
UTe11ok написал:
Но для начала попробуйте понять как работают уже написанные оконные менеждеры. Возмите что-то простое и поиграйтесь с этим.

Например fluxbox:

в слаке и качать ничего не надо.

#102340
drBatty написал:
в слаке и качать ничего не надо.

Не знал, что у ТС слака

#102364
UTe11ok написал:
[quote=drBatty]в слаке и качать ничего не надо.

Не знал, что у ТС слака[/quote]

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

Войдите или зарегистрируйтесь, чтобы ответить.