Создание оконного менеджера для Linux

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

Я просмотрел twmисходный код, который имеет относительно мало наворотов, но кажется очень низким уровнем, так как он не основан на наборе инструментов виджета.1 было бы предпочтительнее использовать инструментарий, такой как GTK+? Боюсь, что некоторые из кода и библиотек в twm может быть слишком устаревший (edit: устарел), и я хочу, чтобы оконный менеджер использовал относительно современные библиотеки. Для понимания мне также было бы интересно узнать, как запустить оконный менеджер с нуля - для этой цели не так много учебных пособий.

обновление: для тех, кто думает о подобных проектах: я в конечном итоге использовал Common Lisp и библиотека CLX. tinywm-lisp служил основой и блестящим CLFSWM и Stumpwm были большой помощью. Для справки я использовал CLX-общий интерфейс LISP X (PDF предупреждение) и #xlib на Freenode.

8 ответов


Что бы вы ни делали, используйте XCB, а не Xlib. Это современный, асинхронный, простой и дает вам прямой доступ к протоколу X11.


очень минималистичный WM является wm2. Я не читал исходный код, и поэтому я не знаю, является ли это примером обучения. Конечно, вы можете использовать библиотеки, которые уже делают большую часть абстракции и рисования для вас, как gdk и gtk. Но поскольку этот проект предназначен только для личного обучения, я бы пошел по трудному пути и использовал Xlib напрямую.

вот некоторые ссылки, которые могут быть полезны для вас:


посмотреть код dwm. Кодовая база красива и проста для понимания. Все это около 2000 строк.


Я написал подробную серию учебников, которая показывает вам, как написать оконный менеджер X11 на C++:

кроме того, вы можете проверить простой пример оконного менеджера, basic_wm, в

Это сильно прокомментировано для педагогических цели.

на Xlib vs XCB-я бы рекомендовал Xlib над XCB, если вы впервые начинаете. XCB более эффективен, но он намного более низкоуровневый и гораздо более подробный (подумайте о языке сборки для GUI). Вы не хотите обременять себя преждевременной оптимизацией, пока у вас уже не будет прототипа.


http://code.google.com/p/partiwm/ это попытка написать оконный менеджер (плитка, а не укладка) с нуля, вам может быть полезно прочитать код.


metacity использует gtk для определенных элементов пользовательского интерфейса. Смотрите его взлом и README.

см. также где некоторые хорошие руководства по программированию Xlib?


для понимания мне также были бы интересны предложения о том, как запустить оконный менеджер с нуля

возможно, вы захотите взглянуть на оконный менеджер aewm. Код небольшой, и он делает основы довольно хорошо. Он написан на C и использует Xlib.

http://www.red-bean.com/decklin/aewm/


Xmonad может быть хорошим местом для начала.