2010-08-12 14 views
22

Quiero crear un gestor de ventanas de apilamiento simple (en C) para uso privado, principalmente con el propósito de aprender y desafiarme a mí mismo.Crear un administrador de ventanas para Linux

He revisado el código fuente de twm, que tiene relativamente pocas ventajas pero parece muy bajo, ya que no está basado en un kit de herramientas de widgets. 1 ¿Sería preferible usar un kit de herramientas como GTK +? Me temo que algunos de los códigos y bibliotecas en twm podrían ser demasiado anticuados (editar: en desuso) y quiero que el administrador de ventanas use bibliotecas relativamente modernas. En aras de la comprensión, también me interesarían las sugerencias sobre cómo iniciar un administrador de ventanas desde cero, ya que no hay muchos tutoriales para este propósito.

Actualización: Para aquellos que piensan en proyectos similares: Terminé usando Common Lisp y el CLX library. tinywm-lisp sirvió como base y los brillantes CLFSWM y Stumpwm fueron de gran ayuda. Como referencia utilicé el CLX — Common LISP X Interface (PDF warning) y #xlib en Freenode.

+0

Los widgets básicamente viven dentro de las ventanas, por lo que la mayor parte de lo que hace un administrador de ventanas no puede depender de los widgets. –

+0

Creo que sí, es por eso que hice referencia a Wikipedia; "[Twm] está escrito en C directamente contra Xlib en lugar de basarse en un kit de herramientas de widgets". Supuse que eso significaba que los administradores de ventanas más modernos _se_ basaban en kits de herramientas de widgets. –

+4

Por alguna razón, esta pregunta me hizo pensar en [esto] (http://www.art.net/~hopkins/Don/unix-haters/x-windows/disaster.html) ... –

Respuesta

20

lo que haga, el uso XCB y no Xlib. Es moderno, asíncrono, más simple y te da acceso directo al protocolo X11.

+3

¡Ver esta fue una de las razones por las que pregunté! 'quinmars' recomendó usar' Xlib' que la mayoría de los administradores de ventanas parecen usar, no he visto administradores de ventanas que usen 'XCB' (excepto Awesome) - ¿eso es simplemente porque todos los otros gestores de ventanas son viejos o hay una ¿Por qué usar 'XCB' hoy en día cuando se empieza desde cero? El código 'Xlib' en' twm' todavía funciona unos veinte años después con la versión más reciente de Xorg. ¿El código 'XCB' aún funcionará en ese momento? –

+2

Para ayudar a otras personas que podrían estar interesadas en hacer lo mismo, recomendaría el 'mcwm' (http://hack.org/mc/hacks/mcwm/) que se basa completamente en' XCB'. –

+2

@Baldur: esta publicación es bastante antigua, pero ahora entraré en XCB. La documentación es muy incompleta, pero la API es muy transparente y se aproxima a los conceptos de XLib, por lo que no es realmente un problema. Recomiendo encarecidamente que mires el código fuente de awesome (aprendo xcb a través de awesome personalmente). Merece su nombre. –

6

Un WM muy minimalista es wm2. No he leído el código fuente y, por lo tanto, no sé si es un ejemplo de enseñanza. Por supuesto, puede utilizar bibliotecas que ya hacen gran parte del trabajo de abstracción y dibujo como gdk y gtk. Pero dado que este proyecto es solo para aprendizaje personal, iría por las malas y usaría Xlib directamente.

Éstos son algunos enlaces que pueden ser útiles para usted:

+0

Utilizaré Xlib entonces. ¿Conoces algún administrador de ventanas que use algo como GTK + para "abstracción y dibujo"? –

+0

Serge recomienda usar XCB –

+0

AFAIK, la API de xcb no es estable todavía, ya que no tiene planeado lanzar su WM nunca debería ser un stopper. – quinmars

0

Xmonad podría ser un buen lugar para comenzar.

+0

Xmonad está escrito en Haskell, op quería usar C. – solusipse

2

En aras de la comprensión Yo también estaría interesado en sugerencias de cómo iniciar un gestor de ventanas desde cero

Es posible que desee echar un vistazo al gestor de ventanas AEWM. El código es pequeño y hace bastante bien las funciones básicas. Está escrito en C y usa Xlib.

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

5

Tener un vistazo al código de dwm. La base de código es hermosa y fácil de entender. Todo es alrededor de 2000 líneas.

3

He escrito una serie en profundidad tutorial que muestra cómo escribir un gestor de ventanas X11 en C++:

Además, puedes leer un ejemplo sencillo gestor de ventanas, basic_wm, en

Se comenta mucho con fines pedagógicos.

En Xlib vs XCB - Yo recomendaría Xlib sobre XCB si está comenzando por primera vez. XCB es más eficiente, pero es mucho más de bajo nivel y mucho más detallado (piensa en el lenguaje ensamblador para la GUI). No querrá abrumarse con una optimización prematura hasta que ya tenga un prototipo funcionando.

Cuestiones relacionadas