From X's perspective, a cursor consists of a cursor source, mask, colors, and a hotspot. The mask pixmap determines the shape of the cursor and must be a depth of one. The source pixmap must have a depth of one, and the colors determine the colors of the source. The hotspot defines the point on the cursor that is reported when a pointer event occurs. There may be limitations imposed by the hardware on cursors as to size and whether a mask is implemented. XQueryBestCursor() can be used to find out what sizes are possible. There is a standard font for creating cursors, but Xlib provides functions that you can use to create cursors from an arbitrary font or from bitmaps.
To create a cursor from the standard cursor font, use XCreateFontCursor().
To create a cursor from font glyphs, use XCreateGlyphCursor().
To create a cursor from two bitmaps, use XCreatePixmapCursor().
To determine useful cursor sizes, use XQueryBestCursor().
To change the color of a given cursor, use XRecolorCursor().
To free (destroy) a given cursor, use XFreeCursor().