diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp index 731825456b..9ab0bf67c0 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp @@ -1221,17 +1221,18 @@ bool init_drm(struct drm_t *drm, int width, int height, int refresh) } drm->fd = wlsession_open_kms( drm->device_name ); - if ( drm->fd < 0 ) + if ( drm->fd < 0 && drm->device_name ) { - drm_log.errorf("Could not open KMS device"); - return false; + drm_log.infof("retrying with an arbitrary DRM device"); + free( drm->device_name ); + drm->device_name = nullptr; + drm->fd = wlsession_open_kms( nullptr ); } - if ( !drmIsKMS( drm->fd ) ) + if ( drm->fd < 0 ) { - drm_log.errorf( "'%s' is not a KMS device", drm->device_name ); - wlsession_close_kms(); - return -1; + drm_log.errorf("Could not open KMS device"); + return false; } if (drmSetClientCap(drm->fd, DRM_CLIENT_CAP_ATOMIC, 1) != 0) { diff --git a/src/wlserver.cpp b/src/wlserver.cpp index 1631ca780d..2c09188072 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -1686,6 +1686,12 @@ int wlsession_open_kms( const char *device_name ) { wlserver.wlr.device = wlr_session_open_file( wlserver.wlr.session, device_name ); if ( wlserver.wlr.device == nullptr ) return -1; + if ( !drmIsKMS(wlserver.wlr.device->fd) ) { + wl_log.errorf( "'%s' is not a KMS device", device_name ); + wlr_session_close_file( wlserver.wlr.session, wlserver.wlr.device ); + wlserver.wlr.device = nullptr; + return -1; + } } else {