ventanas reparar mucho mucha escritorio consume administrador linux x11 window-managers

linux - reparar - Construyendo un administrador de ventanas



administrador de ventanas linux (5)

Uno de mis nuevos proyectos será un administrador de ventanas simple, pero antes de empezar necesito saber algunas cosas:

  • ¿Cuál es el mejor idioma para hacer esto?
  • ¿Dónde obtener algunos recursos para aprender?

Sé que este tema es un poco viejo, pero me preguntaba lo mismo. Este gestor de ventanas llamado i3 parece ser uno bueno para aprender también.


Si bien otro idioma y un conjunto de bibliotecas son técnicamente posibles, creo que la mejor opción de idioma sería C y las bibliotecas Xlib o XCB. La mayoría de los administradores de ventanas para X usan eso, y ya hay mucho impulso aquí y madurez para estas bibliotecas en particular.

Algunos documentos de interés:

  • Xlib : debe leerse para la programación X de bajo nivel.
  • ICCCM : convenciones e interfaces para la comunicación entre aplicaciones X y el administrador de ventanas.
  • XCB : un reemplazo del siglo XXI para Xlib. Este es un nivel un poco más bajo, y toma menos decisiones para ti que Xlib. Por lo que sé, el resultado es un rendimiento potencialmente mejor debido a un mayor potencial de asincronicidad, pero debo advertir que nunca he trabajado con él.

Una decisión importante es cómo vas a hablar con el servidor X. Puede usar los enlaces Xlib para su idioma de elección, o puede usar los enlaces XCB nivel superior. (Si estás insane , puedes abrir un socket directamente al servidor X.)

Para saber cómo debe comportarse un administrador de ventanas, hay dos documentos que especifican las convenciones y políticas: EWMH e ICCCM 1 . Conforme a esto significa que su administrador de ventanas se comportará bien en GNOME, KDE, XFCE y cualquier otro entorno de escritorio que se presente, aunque simplemente ignorarlos es ciertamente más fácil en su primer intento.

Un gestor de ventanas no tiene que ser una bola enorme y complicada de C: los gerentes de ventanas exitosos se han escrito en lenguajes de alto nivel como Lisp, Haskell y Python, e incluso algunos en C han permanecido pequeños y legibles. XMonad , escrito en Haskell, se mantuvo por debajo de 1000 líneas durante bastante tiempo. StumpWM (Common Lisp) y DWM (C) son bastante minimalistas. Es posible que pueda leer su código fuente para obtener inspiración sobre cómo diseñar un WM.

1 Elijah Newren escribió:

NO VAYA A LEER ESAS COSAS. ESTÁN REALMENTE HORRIBLES. Si lo haces, probablemente terminarás poniéndote al día con tu sueño en lugar de hackear a Metacity. ;-)

Ahora que lo pienso, la documentación de Metacity tiene mucho que decir sobre cómo interactúa con Windows y qué tipo de propiedades extendidas admite.


el tinywm en C puede ser útil para comenzar.


  • ¿Cuál es el mejor idioma para hacer esto?

    Con el que te sientas más cómodo. Hay muchos ejemplos de administradores de ventanas exitosos en muchos idiomas diferentes. Qtile y xmonad son buenos ejemplos, escritos en Python y Haskell respectivamente.

  • ¿Dónde obtener algunos recursos para aprender?

    Iría a ver algunos de los administradores de ventanas existentes. Hay muchos de ellos, por lo que al menos algunos de ellos deben tener un código legible. Aquí está la lista completa de administradores de ventanas para Unix .