diff --git a/data/dbus/sm.puri.OSK0.xml b/data/dbus/sm.puri.OSK0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a543ee1d2b15f1d42ed255603e35c25484ff1fc1
--- /dev/null
+++ b/data/dbus/sm.puri.OSK0.xml
@@ -0,0 +1,20 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+  <interface name="sm.puri.OSK0">
+    <method name="SetVisible">
+      <arg name="visible" type="b" direction="in"/>
+      <doc:doc><doc:description>
+        Switch keyboard visibility
+      </doc:description></doc:doc>
+    </method>
+    <method name="GetVisible">
+      <arg name="visible" type="b" direction="out"/>
+      <doc:doc><doc:description>
+        Get keyboard visibility
+      </doc:description></doc:doc>
+    </method>
+    <property name="Visible" type="b" access="read">
+    </property>
+  </interface>
+</node>
diff --git a/src/meson.build b/src/meson.build
index 1b304308c72460ec72d147175595b298ef4e3cb9..fc3ddc0494991d9744a2f8f657ecc458d235ceed 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,7 +1,7 @@
 gnome = import('gnome')
 dbus_src = gnome.gdbus_codegen(
     'sm.puri.OSK0',
-    join_paths(dbusdir, 'sm.puri.OSK0.xml')
+    join_paths(meson.source_root() / 'data' / 'dbus', 'sm.puri.OSK0.xml')
 )
 
 squeekboard_resources = gnome.compile_resources(