Para activar otra ventana, lo que hay que hacer en la capa de protocolo Xlib es enviar un mensaje _NET_ACTIVE_WINDOW como se describe en la especificación EWMH http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html
Esto podría hacerse con el pitón-xlib (presumiblemente) o con gdk_window_focus() en una GdkWindow extranjera usando GDK a través de pygtk
_NET_ACTIVE_WINDOW es superior a XRaiseWindow() y ha estado en todos los WM importantes durante muchos años.
Debe evitar XSetInputFocus(), lo que causará problemas (especialmente si obtiene la marca de tiempo incorrecta). El problema es que WM no puede interceptar el SetInputFocus() por lo que causa condiciones de carrera raras e incoherencias de UI.
Realmente solo _NET_ACTIVE_WINDOW funciona correctamente, razón por la cual fue inventado, porque los hacks anteriores eran malos.
Hay una biblioteca llamada libwnck que te permitirá activar Windows (entre otras cosas) pero lamentablemente agrega bastante sobrecarga porque siempre rastrea todas las ventanas abiertas desde cualquier aplicación, incluso si no tienes que hacer ese. Sin embargo, si desea rastrear ventanas desde otras aplicaciones de todos modos, entonces libwnck tiene una función para activar esas ventanas que hace lo correcto y sería una buena opción.
El enfoque estrictamente correcto es comprobar si hay compatibilidad con EWMH _NET_ACTIVE_WINDOW (los documentos EWMH explican cómo hacerlo) y recurrir a XRaiseWindow si la WM no tiene _NET_ACTIVE_WINDOW. Sin embargo, dado que cualquier WM en el que se ha trabajado activamente en los últimos años tiene EWMH, muchas personas son flojas con respecto a la alternativa de las WM heredadas.