diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 68406da6..6c791aba 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -1215,7 +1215,7 @@ init_drm(struct drm_compositor *ec, struct udev_device *device) } filename = udev_device_get_devnode(device); - fd = open(filename, O_RDWR | O_CLOEXEC); + fd = weston_launcher_open(&ec->base, filename, O_RDWR); if (fd < 0) { /* Probably permissions error */ weston_log("couldn't open %s, skipping\n", diff --git a/src/weston-launch.c b/src/weston-launch.c index 7264f7e2..be77a345 100644 --- a/src/weston-launch.c +++ b/src/weston-launch.c @@ -58,6 +58,8 @@ #include "weston-launch.h" +#define DRM_MAJOR 226 + #define MAX_ARGV_SIZE 256 struct weston_launch { @@ -313,10 +315,11 @@ handle_open(struct weston_launch *wl, struct msghdr *msg, ssize_t len) goto err0; } - if (major(s.st_rdev) != INPUT_MAJOR) { + if (major(s.st_rdev) != INPUT_MAJOR && + major(s.st_rdev) != DRM_MAJOR) { close(fd); fd = -1; - fprintf(stderr, "Device %s is not an input device\n", + fprintf(stderr, "Device %s is not an input or drm device\n", message->path); goto err0; }