Hab’ das vor ein paar Jahren mal gemacht. Blogpost mit Erfahrungsbericht dazu (kein Tutorial). Benutze ich auch heute alles noch, hat sich also für mich gelohnt. Und es hat sehr viel Spaß gemacht. ☺
TinyWM ist ein ganz okay-er Einstieg, aber da fehlt natürlich viel.
In meiner Wahrnehmung war ein großes Problem, dass es eben keine „Tutorials“ oder „Erklärungen“ gibt. Das beste, was du noch finden kannst, ist ICCCM (Kapitel 4 ist für einen WM das wichtigste). Wenn du dich daran orientierst, bekommst du schonmal einen gut funktionieren WM hin. Ist aber eben eine Spec und kein Tutorial. Ob und inwieweit du die EWMH-Specs implementierst, hängt von dir ab – vieles wird krumm aussehen, wenn du manches weglässt, aber ich persönlich habe zum Beispiel explizit mit manchem gebrochen, weil es mir einfach nicht zusagte: Ich will nicht auf physischem Monitor A den virtuellen Workspace wechseln und dann ändert sich auch der Workspace auf physischem Monitor B.
Ich würde wärmstens empfehlen, im ersten Schritt keinen Reparenting-WM zu schreiben, weil das komplizierter ist. Das kannst du machen, sobald du mit der Materie vertrauter bist. (Erstrecht willst du am Anfang keinen Compositor bauen.)
Es hilft auch ungemein, wenn man schon eine Zeit lang sowas wie dwm benutzt hat: Einen WM, der keinerlei Konfigurationsdateien bietet und den man nur durch Editieren des Quellcodes anpassen kann. Dadurch lernst du zwangsläufig schonmal einiges. Und selbst, wenn du ihn nicht wirklich im Alltag benutzen willst, kannst du dir hier und da was abgucken. Aber Vorsicht: dwm implementiert längst nicht alle Specs knallhart. Im Zweifel immer in ICCCM oder EWMH nachschauen, wie es „richtig“ geht.
Zum Allgemeinen Verständnis hilft bestimmt auch das: https://venam.nixers.net/blog/unix/2018/05/10/reparenting-redirecting-composition-rendering.html
Manchmal googlet man sich ja selbst hinterher und so bin ich mal auf die Bachelorarbeit von Max van Deurzen gestoßen (wo mein WM erwähnt wird). Ich hab’ die jetzt nicht im Detail reviewed, aber sieht so aus, als würdest du da nochmal viele zeitgemäße Erklärungen finden. Könnte sich lohnen, da ab und zu mal reinzuschauen.
Was dir bei der Entwicklung noch helfen wird, ist Xephyr. Und früher oder später willst du das X11-Protokoll inspizieren, also sehen, welche Nachrichten da zwischen den Programmen geschickt werden. Der Autor von i3 hatte sich dafür damals x11vis geschrieben (was ich aufgrund der vielen Perl-Abhängigkeiten aber nie benutzt habe) – es geht aber auch mit SSH-X11-Forwarding und Wireshark.
Hoffe, das hilft dir erstmal ein bisschen … ☺