Создание оконного менеджера для 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.