diff --git a/moonlight-common-c b/moonlight-common-c index e60a7ef7..cfeb0ffd 160000 --- a/moonlight-common-c +++ b/moonlight-common-c @@ -1 +1 @@ -Subproject commit e60a7ef75f02559e7c5271f4e08f815af5f4a8cc +Subproject commit cfeb0ffd90992ee0fa4b6b4a179652e3e2786873 diff --git a/sunshine/platform/linux.cpp b/sunshine/platform/linux.cpp index 58528f0f..370f5ef8 100644 --- a/sunshine/platform/linux.cpp +++ b/sunshine/platform/linux.cpp @@ -134,7 +134,15 @@ void blend_cursor(Display *display, std::uint8_t *img_data, int width, int heigh } } struct x11_attr_t : public display_t { - x11_attr_t() : xdisplay {XOpenDisplay(nullptr) }, xwindow {DefaultRootWindow(xdisplay.get()) }, xattr {} { + x11_attr_t() : xdisplay {XOpenDisplay(nullptr) }, xwindow { }, xattr {} { + if(!xdisplay) { + BOOST_LOG(fatal) << "Could not open x11 display"sv; + log_flush(); + std::abort(); + } + + xwindow = DefaultRootWindow(xdisplay.get()); + refresh(); } diff --git a/sunshine/platform/linux_evdev.cpp b/sunshine/platform/linux_evdev.cpp index db19cfae..c26622b9 100644 --- a/sunshine/platform/linux_evdev.cpp +++ b/sunshine/platform/linux_evdev.cpp @@ -421,16 +421,22 @@ input_t input() { auto &gp = *(input_raw_t*)result.get(); gp.keyboard.reset(XOpenDisplay(nullptr)); + + // If we do not have a keyboard, gamepad or mouse, no input is possible and we should abort if(!gp.keyboard) { - return nullptr; + BOOST_LOG(fatal) << "Could not open x11 display for keyboard"sv; + log_flush(); + std::abort(); } if(gamepad(gp)) { - return nullptr; + log_flush(); + std::abort(); } if(mouse(gp)) { - return nullptr; + log_flush(); + std::abort(); } std::filesystem::path mouse_path { "sunshine_mouse" };