launcher: Set make sure we're drm master when opening the drm device

In case we try to run on a tty where some other process is already
drm master, back off and exit with an error message.
diff --git a/src/launcher-util.c b/src/launcher-util.c
index 237f8c5..88eb06a 100644
--- a/src/launcher-util.c
+++ b/src/launcher-util.c
@@ -65,6 +65,26 @@
 	struct wl_event_source *vt_source;
 };
 
+#ifdef BUILD_DRM_COMPOSITOR
+static int
+drm_drop_master(int drm_fd)
+{
+	if (drm_fd != -1)
+		return drmDropMaster(drm_fd);
+	return -EBADF;
+}
+static int
+drm_set_master(int drm_fd)
+{
+	if (drm_fd != -1)
+		return drmSetMaster(drm_fd);
+	return -EBADF;
+}
+#else
+static int drm_drop_master(int drm_fd) {return 0;}
+static int drm_set_master(int drm_fd) {return 0;}
+#endif
+
 int
 weston_launcher_open(struct weston_launcher *launcher,
 		     const char *path, int flags)
@@ -81,7 +101,6 @@
 
 	if (launcher->fd == -1) {
 		fd = open(path, flags | O_CLOEXEC);
-
 		if (fd == -1)
 			return -1;
 
@@ -90,8 +109,14 @@
 			return -1;
 		}
 
-		if (major(s.st_rdev) == DRM_MAJOR)
+		if (major(s.st_rdev) == DRM_MAJOR) {
 			launcher->drm_fd = fd;
+			if (drm_set_master(fd) == -1) {
+				weston_log("could not set master on drm fd\n");
+				close(fd);
+				return -1;
+			}
+		}
 
 		return fd;
 	}
@@ -198,26 +223,6 @@
 	return 1;
 }
 
-#ifdef BUILD_DRM_COMPOSITOR
-static int
-drm_drop_master(int drm_fd)
-{
-	if (drm_fd != -1)
-		return drmDropMaster(drm_fd);
-	return -EBADF;
-}
-static int
-drm_set_master(int drm_fd)
-{
-	if (drm_fd != -1)
-		return drmSetMaster(drm_fd);
-	return -EBADF;
-}
-#else
-static int drm_drop_master(int drm_fd) {return 0;}
-static int drm_set_master(int drm_fd) {return 0;}
-#endif
-
 static int
 vt_handler(int signal_number, void *data)
 {