diff --git a/common/utils/T/tracer/gui/gui.c b/common/utils/T/tracer/gui/gui.c
index 55c7a3680aa04b23341cd2d6c123acf6e0a96cfe..2166774d929f441595ca06d6fa080a2980324c12 100644
--- a/common/utils/T/tracer/gui/gui.c
+++ b/common/utils/T/tracer/gui/gui.c
@@ -9,11 +9,13 @@ void glock(gui *_gui)
 {
   struct gui *g = _gui;
   if (pthread_mutex_lock(g->lock)) ERR("mutex error\n");
+  xlock(g->x);
 }
 
 void gunlock(gui *_gui)
 {
   struct gui *g = _gui;
+  xunlock(g->x);
   if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n");
 }
 
diff --git a/common/utils/T/tracer/gui/init.c b/common/utils/T/tracer/gui/init.c
index c708639674f88099dc1cdaf7c6df6ff96fa0ed11..445f696643c0eba3c4ef6ac18e72fa26cb8889dd 100644
--- a/common/utils/T/tracer/gui/init.c
+++ b/common/utils/T/tracer/gui/init.c
@@ -12,6 +12,8 @@ gui *gui_init(void)
 {
   struct gui *ret;
 
+  x_init_threading();
+
   ret = calloc(1, sizeof(struct gui));
   if (ret == NULL) OOM;
 
diff --git a/common/utils/T/tracer/gui/x.c b/common/utils/T/tracer/gui/x.c
index 50164dce359a570a2df901b5e1c3dac46bb8dae6..12888da468986fa52c292d9626c09799c97bff1f 100644
--- a/common/utils/T/tracer/gui/x.c
+++ b/common/utils/T/tracer/gui/x.c
@@ -6,6 +6,23 @@
 #include <stdlib.h>
 #include <string.h>
 
+void x_init_threading(void)
+{
+  if (XInitThreads() == False) abort();
+}
+
+void xlock(x_connection *_x)
+{
+  struct x_connection *x = _x;
+  XLockDisplay(x->d);
+}
+
+void xunlock(x_connection *_x)
+{
+  struct x_connection *x = _x;
+  XUnlockDisplay(x->d);
+}
+
 int x_connection_fd(x_connection *_x)
 {
   struct x_connection *x = _x;
diff --git a/common/utils/T/tracer/gui/x.h b/common/utils/T/tracer/gui/x.h
index c1f8d33d89e8831c8a1882ecbf737763c02191fb..82e46cac9da477c0159de80903877e87c21af7c6 100644
--- a/common/utils/T/tracer/gui/x.h
+++ b/common/utils/T/tracer/gui/x.h
@@ -6,6 +6,11 @@
 typedef void x_connection;
 typedef void x_window;
 
+void x_init_threading(void);
+
+void xlock(x_connection *x);
+void xunlock(x_connection *x);
+
 x_connection *x_open(void);
 
 x_window *x_create_window(x_connection *x, int width, int height,