From bb2b451ad06a429fa8aaa48eb48bc661869f616f Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 1 Jul 2024 14:33:20 +0200 Subject: [PATCH] support headless --- src/Compositor.cpp | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index d95fcd8d..d3c30bdc 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -228,6 +228,9 @@ void CCompositor::initServer() { std::vector implementations; Aquamarine::SBackendImplementationOptions option; + option.backendType = Aquamarine::eBackendType::AQ_BACKEND_HEADLESS; + option.backendRequestMode = Aquamarine::eBackendRequestMode::AQ_BACKEND_REQUEST_MANDATORY; + implementations.emplace_back(option); option.backendType = Aquamarine::eBackendType::AQ_BACKEND_DRM; option.backendRequestMode = Aquamarine::eBackendRequestMode::AQ_BACKEND_REQUEST_IF_AVAILABLE; implementations.emplace_back(option); @@ -534,23 +537,21 @@ void CCompositor::removeLockFile() { } void CCompositor::prepareFallbackOutput() { - // TODO: - // // create a backup monitor - // wlr_backend* headless = nullptr; - // wlr_multi_for_each_backend( - // m_sWLRBackend, - // [](wlr_backend* b, void* data) { - // if (wlr_backend_is_headless(b)) - // *((wlr_backend**)data) = b; - // }, - // &headless); + // create a backup monitor + SP headless; + for (auto& impl : m_pAqBackend->getImplementations()) { + if (impl->type() == Aquamarine::AQ_BACKEND_HEADLESS) { + headless = impl; + break; + } + } - // if (!headless) { - // Debug::log(WARN, "Unsafe state will be ineffective, no fallback output"); - // return; - // } + if (!headless) { + Debug::log(WARN, "No headless in prepareFallbackOutput?!"); + return; + } - // wlr_headless_add_output(headless, 1920, 1080); + headless->createOutput(); } void CCompositor::startCompositor(std::string socketName, int socketFd) { @@ -2858,8 +2859,10 @@ static void checkDefaultCursorWarp(SP PNEWMONITOR, std::string monitor void CCompositor::onNewMonitor(SP output) { // add it to real auto PNEWMONITOR = g_pCompositor->m_vRealMonitors.emplace_back(makeShared()); - if (std::string("HEADLESS-1") == output->name) + if (std::string("HEADLESS-1") == output->name) { g_pCompositor->m_pUnsafeOutput = PNEWMONITOR.get(); + output->name = "FALLBACK"; // we are allowed to do this :) + } Debug::log(LOG, "New output with name {}", output->name);