Подтвердить что ты не робот

Создание диспетчера окон

Один из моих новых домашних проектов будет простым Window Manager, но перед запуском мне нужно знать некоторые вещи:

  • Какой лучший язык для этого?
  • Где получить некоторые ресурсы для изучения?
4b9b3361

Ответ 1

Одним из важных решений является то, как вы собираетесь разговаривать с 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 в документации есть что сказать о том, как она взаимодействует с окнами и какие расширенные свойства он поддерживает.

Ответ 2

tinywm в C может быть полезно для начала.

Ответ 3

В то время как другой язык и набор библиотек технически возможны, я считаю, что лучшим выбором языка будет C, а также библиотеки Xlib или XCB. Большинство оконных менеджеров для X используют это, и здесь уже много импульса и зрелости для этих конкретных библиотек.

Некоторые представляющие интерес документы:

  • Руководство Xlib - должно читать для программирования на низком уровне X.
  • ICCCM - соглашения и интерфейсы для связи между приложениями X и оконным менеджером.
  • XCB - замена 21-го века для Xlib. Это немного более низкий уровень и принимает меньше решений для вас, чем Xlib. Из того, что я собираю, результат потенциально лучше работает из-за большего потенциала асинхронности, но я должен предупредить, что я никогда с ним не работал.

Ответ 4

  • Какой лучший язык для этого?

    Что вам больше всего нравится. Существует множество примеров успешных оконных менеджеров на разных языках. Qtile и xmonad - хорошие примеры, написанные на Python и Haskell соответственно.

  • Где получить некоторые ресурсы для изучения?

    Я бы посмотрел на некоторых существующих оконных менеджеров. Их много, поэтому по крайней мере некоторые из них должны иметь читаемый код. Вот Полный список менеджеров окон для Unix.

Ответ 5

Я знаю, что эта тема немного устарела, но мне было интересно то же самое. Этот диспетчер окон под названием i3 кажется хорошим, чтобы учиться тоже.