Как начать писать композитинг WM?
Я хотел бы написать простой оконный менеджер с аппаратным ускорением, так что я искал некоторую документацию о том, как начать, но мне удалось найти только этот учебник, который использует устаревшую версию Clutter и не будет сборка с любой доступной версией. Есть ли другие хорошие ресурсы для того, как это сделать, или, альтернативно, действительно скелеты, сочетающие WM для поиска источника?
3 ответа
В вашем вопросе две части: 1) Как написать WM 2) Как написать композитный менеджер
Некоторые ссылки, помогающие понять вторую часть (в дополнение к источнику xcompmgr):
- http://www.talisman.org/~erlkonig/misc/x11-composite-tutorial/ (использует Qt, но очень общий и низкий уровень)
- https://github.com/gustavosbarreto/compmgr
- http://projects.mini-dweeb.org/projects/unagi
Оконный менеджер, "часть первая":
- У меня есть простой ~100 loc wm в JavaScript: https://github.com/sidorares/node-x11/blob/master/examples/windowmanager/wm.js
- другой минималистичный wm (на C), неплохо начать как ссылку: https://code.google.com/p/winmalist/
- Самое важное ключевое слово:
SubstructureRedirect
маска события. Немного документации здесь
Первым демо-компоновщиком был xcompmgr, который я бы порекомендовал для понимания базовых расширений X.
Если вы используете OpenGL для рендеринга с аппаратным ускорением, вам нужно прочитать EXT_texture_from_pixmap
расширение, чтобы избежать копирования содержимого окна через пользовательское пространство. Это расширение позволяет вместо этого использовать блиты с аппаратным ускорением для этих копий.
Возможно, вас также заинтересует спецификация для _NET_WM_SYNC_REQUEST, чтобы позволить рендеринг без разрывов, синхронизированный с вертикальным возвратом.
Вы можете попробовать qtile, он очень настраиваемый с конфигурацией python (что также упрощает начало работы), вы можете выбирать между wayland и x11, и, несмотря на то, что он написан на python, он очень быстрый