Add headless output if no gpus in session supports KMS

This commit is contained in:
ThevGPUSupplier 2026-03-07 02:06:36 +00:00
parent a5858018d8
commit 2db4602bcd
2 changed files with 19 additions and 5 deletions

View file

@ -735,8 +735,7 @@ void CCompositor::removeLockFile() {
std::filesystem::remove(PATH);
}
void CCompositor::prepareFallbackOutput() {
// create a backup monitor
void CCompositor::prepareFallbackOutputs() {
SP<Aquamarine::IBackendImplementation> headless;
for (auto const& impl : m_aqBackend->getImplementations()) {
if (impl->type() == Aquamarine::AQ_BACKEND_HEADLESS) {
@ -746,14 +745,29 @@ void CCompositor::prepareFallbackOutput() {
}
if (!headless) {
Log::logger->log(Log::WARN, "No headless in prepareFallbackOutput?!");
Log::logger->log(Log::WARN, "No headless in prepareFallbackOutputs?!");
return;
}
// create a backup monitor
headless->createOutput();
if (m_monitors.empty())
enterUnsafeState();
// create a headless monitor if no card support kms.
bool supportsKMS = false;
if (m_aqBackend->hasSession()) {
for (SP<CSessionDevice> dev : m_aqBackend->session->sessionDevices) {
supportsKMS |= dev->supportsKMS();
}
}
if (supportsKMS)
return;
Log::logger->log(Log::DEBUG, "Running on DRM-only gpu. Creating initial HEADLESS-0 output.");
headless->createOutput("HEADLESS-0");
}
void CCompositor::startCompositor() {
@ -775,7 +789,7 @@ void CCompositor::startCompositor() {
Log::logger->log(Log::DEBUG, "Running on WAYLAND_DISPLAY: {}", m_wlDisplaySocket);
prepareFallbackOutput();
prepareFallbackOutputs();
g_pHyprRenderer->setCursorFromName("left_ptr");

View file

@ -178,7 +178,7 @@ class CCompositor {
void cleanEnvironment();
void setRandomSplash();
void initManagers(eManagersInitStage stage);
void prepareFallbackOutput();
void prepareFallbackOutputs();
void createLockFile();
void removeLockFile();
void setMallocThreshold();