diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3b69bf6..86acc9e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -32,5 +32,6 @@ add_subdirectory(chotkeys)
add_subdirectory(cupdatecursor)
add_subdirectory(gmenuproxy)
add_subdirectory(notificationd)
+add_subdirectory(sddm-helper)
install(FILES cutefish DESTINATION /etc/ COMPONENT Runtime)
diff --git a/sddm-helper/CMakeLists.txt b/sddm-helper/CMakeLists.txt
new file mode 100644
index 0000000..a694795
--- /dev/null
+++ b/sddm-helper/CMakeLists.txt
@@ -0,0 +1,24 @@
+project(cutefish-sddm-helper)
+set(PROJECT_NAME cutefish-sddm-helper)
+
+set(SRCS
+ main.cpp
+)
+
+add_executable(${PROJECT_NAME}
+ ${SRCS}
+)
+
+target_link_libraries(${PROJECT_NAME}
+ Qt5::Core
+ Qt5::Gui
+)
+
+configure_file(
+ com.cutefish.sddm.helper.pkexec.policy.in
+ com.cutefish.sddm.helper.pkexec.policy
+ @ONLY
+)
+
+install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/com.cutefish.sddm.helper.pkexec.policy DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/polkit-1/actions/)
diff --git a/sddm-helper/com.cutefish.sddm.helper.pkexec.policy.in b/sddm-helper/com.cutefish.sddm.helper.pkexec.policy.in
new file mode 100644
index 0000000..346e66b
--- /dev/null
+++ b/sddm-helper/com.cutefish.sddm.helper.pkexec.policy.in
@@ -0,0 +1,15 @@
+
+
+
+ Authentication is required to SDDM DPI
+ battery
+
+ no
+ no
+ yes
+
+ @CMAKE_INSTALL_FULL_BINDIR@/cutefish-sddm-helper
+
+
diff --git a/sddm-helper/main.cpp b/sddm-helper/main.cpp
new file mode 100644
index 0000000..26b2193
--- /dev/null
+++ b/sddm-helper/main.cpp
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2021 CutefishOS Team.
+ *
+ * Author: Kate Leet (kate@cutefishos.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+ QCommandLineParser parser;
+ parser.addHelpOption();
+ parser.addVersionOption();
+
+ QCommandLineOption dpiOption(QStringLiteral("dpi"), QStringLiteral("Set DPI"));
+ parser.addOption(dpiOption);
+ parser.addPositionalArgument("value", "Value");
+
+ parser.process(app);
+
+ if (parser.isSet(dpiOption)) {
+ int value = parser.positionalArguments().value(0).toInt();
+ int minValue = 96;
+
+ if (value < minValue)
+ value = minValue;
+
+ QDir dir("/etc/sddm.conf.d");
+
+ if (!dir.exists()) {
+ dir.mkpath("/etc/sddm.conf.d");
+ }
+
+ QSettings settings("/etc/sddm.conf.d/dpi.conf", QSettings::IniFormat);
+ settings.beginGroup("X11");
+ settings.setValue("ServerArguments", QString("-nolisten tcp -dpi %1").arg(value));
+ }
+
+ return 0;
+}
diff --git a/settings-daemon/theme/thememanager.cpp b/settings-daemon/theme/thememanager.cpp
index b4eda9a..0df82b9 100644
--- a/settings-daemon/theme/thememanager.cpp
+++ b/settings-daemon/theme/thememanager.cpp
@@ -216,6 +216,14 @@ void ThemeManager::setDevicePixelRatio(qreal ratio)
m_settings->sync();
applyXResources();
+ // SDDM
+ QProcess p;
+ p.setProgram("pkexec");
+ p.setArguments(QStringList() << "cutefish-sddm-helper"
+ << "--dpi" << QString::number(fontDpi));
+ p.start();
+ p.waitForFinished(-1);
+
QDBusInterface iface("org.freedesktop.Notifications",
"/org/freedesktop/Notifications",
"org.freedesktop.Notifications",