Нет никаких современных книг, о которых я знаю. Вам действительно нужно прочитать кучу спецификаций и исходного кода. К счастью, это не , что сложно.
Я бы сказал, что чтение исходного кода для gtk + / gdk / x11 (X-бэкэнд для GTK) и источника для вашей любимой пары WM будет иметь большое значение. Спецификации ICCCM и EMWH являются существенными.
Огромное изменение в X-программировании, поскольку старые руководства заключаются в том, что никто больше не любит использовать многие средства на стороне сервера для рисования, шрифтов, печати и т. Д. Итак, функции XDrawFoo, все о шрифтах, XPrint, GC, цветовых картах, все, что более или менее устарело. Обычно рисование выполняется на стороне клиента с помощью таких библиотек, как Cairo или Skia.
Материал об окнах и растровых изображениях, а также о том, как X работает в этих старых книгах, все равно будет точным.
Несколько хороших общих советов по Х, если вы связываетесь с WM:
вам нужно реагировать на события, а не получать состояние. Например, всегда рассматривайте ваш размер как последний размер, для которого вы получили ConfigureNotify; не вызывайте XGetGeometry или что-то еще, чтобы получить ваш размер. Получение состояния имеет две проблемы: оно убивает производительность (блокировка для туда-обратно = смерть производительности) и вводит условия гонки.
в WM вы имеете дело с окнами других приложений, и они могут быть уничтожены в любое время, что приведет к ошибке, если вы дотронетесь до этого окна. поэтому любая функция, которую вы вызываете в окне, может дать сбой.
никогда не используйте CurrentTime, всегда используйте реальную временную отметку, иначе вы создадите причудливые ошибки состояния гонки, которые сведут вас с ума
Думаю, есть еще много советов, но вот три, которые помогут вам избежать распространенных ошибок; -)