Один из моих новых домашних проектов будет простым Window Manager, но перед запуском мне нужно знать некоторые вещи:
- Какой лучший язык для этого?
- Где получить некоторые ресурсы для изучения?
Один из моих новых домашних проектов будет простым Window Manager, но перед запуском мне нужно знать некоторые вещи:
Одним из важных решений является то, как вы собираетесь разговаривать с X-сервером. Вы можете использовать привязки Xlib для выбранного вами языка, или вы можете использовать более высокий уровень XCB привязки. (Если вы безумный, вы можете напрямую открыть сокет для X-сервера.)
Чтобы знать, как должен работать диспетчер окон, есть два документа, которые определяют соглашения и политики: EWMH и ICCCM 1. В соответствии с этим ваш оконный менеджер будет хорошо вести себя в GNOME, KDE, XFCE и любой другой среде рабочего стола, хотя и просто игнорируя их, с первой попытки, безусловно, проще.
Диспетчер окон не обязательно должен быть огромным сложным шаром C. Успешные оконные менеджеры были написаны на языках высокого уровня, таких как Lisp, Haskell и Python, и даже некоторые из C остались маленькими и читабельными. XMonad, написанный в Haskell, довольно долгое время оставался под 1000 строк. StumpWM (общий Lisp) и DWM (C) оба минимальны. Возможно, вы сможете прочитать их исходный код, чтобы получить вдохновение в том, как создавать WM файлы.
1 Илья Ньюрен писал:
НЕ ИДИТЕ И ПРОЧИТАЙТЕ ЭТИ ВЕЩИ. ОНИ ДЕЙСТВИТЕЛЬНО, ДЕЙСТВИТЕЛЬНО БОРИС. Если вы это сделаете, вы, вероятно, в конечном итоге догоните ваш сон вместо взлома на Metacity.; -)
Подумайте об этом, Metacity в документации есть что сказать о том, как она взаимодействует с окнами и какие расширенные свойства он поддерживает.
tinywm в C может быть полезно для начала.
В то время как другой язык и набор библиотек технически возможны, я считаю, что лучшим выбором языка будет C, а также библиотеки Xlib или XCB. Большинство оконных менеджеров для X используют это, и здесь уже много импульса и зрелости для этих конкретных библиотек.
Некоторые представляющие интерес документы:
Какой лучший язык для этого?
Что вам больше всего нравится. Существует множество примеров успешных оконных менеджеров на разных языках. Qtile и xmonad - хорошие примеры, написанные на Python и Haskell соответственно.
Где получить некоторые ресурсы для изучения?
Я бы посмотрел на некоторых существующих оконных менеджеров. Их много, поэтому по крайней мере некоторые из них должны иметь читаемый код. Вот Полный список менеджеров окон для Unix.
Я знаю, что эта тема немного устарела, но мне было интересно то же самое. Этот диспетчер окон под названием i3 кажется хорошим, чтобы учиться тоже.