Компоненты x, y структуры, возвращаемые XGetWindowAttributes, относятся к источнику родителя окна.Это не то же самое, что относительно левого верхнего угла экрана.
Вызов XTranslateCoordinates, проходящий через корневое окно, и 0,0 дает координаты окна относительно экрана.Я пишу:
int x, y;
Window child;
XWindowAttributes xwa;
XTranslateCoordinates( display, window, root_window, 0, 0, &x, &y, &child );
XGetWindowAttributes( display, window, &xwa );
printf( "%d %d\n", x - xwa.x, y - xwa.y );
Значения, отображаемые в printf, - это те значения, которые при передаче в XMoveWindow сохраняют окно в его текущей позиции.Таким образом, эти координаты обоснованно считаются положением окна.