Erstellen eines Fenstermanagers für Linux [closed]

Lesezeit: 5 Minuten

Benutzer-Avatar
Island_jack

Ich möchte einen einfachen Stacking Window Manager (in C) für den privaten Gebrauch, hauptsächlich zum Zwecke des Lernens und der eigenen Herausforderung.

Ich habe durchgeschaut twm‘s Quellcode, der relativ wenig Schnickschnack hat, aber auf sehr niedrigem Niveau erscheint, da er nicht auf einem Widget-Toolkit basiert.1 Wäre die Verwendung eines Toolkits wie GTK+ vorzuziehen? Ich fürchte, dass ein Teil des Codes und der Bibliotheken in twm vielleicht zu antiquiert (bearbeiten: veraltet) und ich möchte, dass der Fenstermanager relativ moderne Bibliotheken verwendet. Zum Verständnis wäre ich auch an Vorschlägen interessiert, wie man einen Fenstermanager von Grund auf neu startet – dazu gibt es nicht viele Tutorials.

Aktualisieren: Für diejenigen, die an ähnliche Projekte denken: Am Ende habe ich Common Lisp und die CLX-Bibliothek. tinywm-lispeln diente als Grundlage und das genial CLFSWM und Stumpfwm waren eine große Hilfe. Als Referenz habe ich die verwendet CLX – Gemeinsame LISP X-Schnittstelle (PDF-Warnung) und #xlib auf Freenode.

  • Widgets leben im Grunde in Windows, daher kann das meiste, was ein Fenstermanager tut, nicht von Widgets abhängen.

    – Jerry Sarg

    12. August 2010 um 22:40 Uhr

  • Ich denke schon, deshalb habe ich auf Wikipedia verwiesen; „[twm is] geschrieben in C direkt gegen Xlib und nicht basierend auf einem Widget-Toolkit.“ Ich nahm an, dass dies modernere Fenstermanager bedeutete sind basierend auf Widget-Toolkits.

    – Iceland_jack

    12. August 2010 um 22:50 Uhr


  • Aus irgendeinem Grund hat mich diese Frage zum Nachdenken gebracht Dies

    – Brian Nixon

    12. August 2010 um 23:07 Uhr

Was auch immer Sie tun, verwenden Sie XCB und nicht Xlib. Es ist moderner, asynchroner, einfacher und gibt Ihnen direkten Zugriff auf das X11-Protokoll.

  • Sehen Sie, das war einer der Gründe, warum ich gefragt habe! quinmars empfohlen, dass ich benutze Xlib die die meisten Fenstermanager zu verwenden scheinen, habe ich keine Fenstermanager gesehen, die dies verwenden XCB (außer Awesome) – liegt das nur daran, dass alle anderen Fenstermanager alt sind oder gibt es einen Grund, sie zu verwenden? XCB heute bei Null anfangen? Das Xlib Code ein twm funktioniert noch etwa zwanzig Jahre später mit der neusten Version von Xorg — will XCB Code funktioniert in dieser Zeit noch?

    – Iceland_jack

    13. August 2010 um 18:56 Uhr


  • Um anderen Leuten zu helfen, die daran interessiert sein könnten, dasselbe zu tun, würde ich empfehlen mcwm (hack.org/mc/hacks/mcwm), die vollständig auf basiert XCB.

    – Iceland_jack

    24. August 2010 um 10:33 Uhr


  • @Baldur: Dieser Beitrag ist ziemlich alt, aber ich steige jetzt in XCB ein. Die Dokumentation ist sehr unvollständig, aber die API ist sehr transparent und bildet XLib-Konzepte genau ab, also ist es nicht wirklich ein Problem. Ich empfehle Ihnen von ganzem Herzen, sich den Quellcode von awesome anzusehen (ich lerne xcb persönlich durch awesome). Es verdient seinen Namen.

    – Alexander C.

    6. August 2011 um 22:16 Uhr

Ich habe eine ausführliche Tutorial-Serie geschrieben, die Ihnen zeigt, wie Sie einen X11-Fenstermanager in C++ schreiben:

Außerdem können Sie sich einen einfachen Beispiel-Fenstermanager, basic_wm, unter ansehen

Es ist aus pädagogischen Gründen stark kommentiert.

Über Xlib vs. XCB – Ich würde Xlib gegenüber XCB empfehlen, wenn Sie zum ersten Mal anfangen. XCB ist effizienter, aber viel einfacher und ausführlicher (denken Sie an Assemblersprache für die GUI). Sie möchten sich nicht mit vorzeitiger Optimierung belasten, bis Sie bereits einen funktionierenden Prototyp haben.

Ein sehr minimalistisches WM ist wm2. Ich habe den Quellcode nicht gelesen und weiß daher nicht, ob es sich um ein Lehrbeispiel handelt. Natürlich können Sie gerne Bibliotheken verwenden, die bereits einen Großteil der Abstraktions- und Zeichenarbeit für Sie erledigen gdk und gtk. Aber da dieses Projekt nur dem persönlichen Lernen dient, würde ich den harten Weg gehen und Xlib direkt verwenden.

Hier sind einige Links, die für Sie nützlich sein könnten:

  • Ich werde dann Xlib verwenden. Kennen Sie Fenstermanager, die so etwas wie GTK+ für “Abstraktions- und Zeichenarbeiten” verwenden?

    – Iceland_jack

    13. August 2010 um 14:51 Uhr

  • AFAIK, die API von xcb ist noch nicht stabil, da Sie nicht vorhaben, Ihr WM jemals zu veröffentlichen, sollte dies kein Showstopper sein.

    – Quinmare

    14. August 2010 um 13:04 Uhr

  • Es gibt mehrere WMs, die gtk verwenden, um ihre Widgets zu zeichnen, wie Metacity, xfce wm, lxde. Ich weiß nicht, wie weit sie gdk verwenden. Oder wenn sie xlib oder xcb direkt verwenden.

    – Quinmare

    14. August 2010 um 17:10 Uhr

Schauen Sie sich den Code für an dwm. Die Codebasis ist schön und leicht zu verstehen. Das Ganze umfasst etwa 2000 Zeilen.

http://code.google.com/p/partiwm/ ein Versuch ist, einen Fenstermanager (Kacheln, nicht Stapeln) von Grund auf neu zu schreiben, könnte es für Sie nützlich sein, den Code durchzulesen.

Benutzer-Avatar
Gemeinschaft

metacity verwendet gtk für bestimmte UI-Elemente. Siehe HACKING und README.

siehe auch Wo sind einige gute Xlib-Programmieranleitungen?

Benutzer-Avatar
Frank Hale

Zum Verständnis wäre ich auch an Vorschlägen interessiert, wie man einen Fenstermanager von Grund auf neu startet

Vielleicht möchten Sie einen Blick auf den Fenstermanager von aewm werfen. Der Code ist klein und macht die Grundlagen recht gut. Es ist in C geschrieben und verwendet Xlib.

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

1360050cookie-checkErstellen eines Fenstermanagers für Linux [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy