Index: src/daemon/XorgDisplayServer.cpp
--- src/daemon/XorgDisplayServer.cpp.orig
+++ src/daemon/XorgDisplayServer.cpp
@@ -103,28 +103,39 @@ namespace SDDM {
 
         //create pipe for communicating with X server
         //0 == read from X, 1== write to from X
+#ifndef Q_OS_OPENBSD
         int pipeFds[2];
         if (pipe(pipeFds) != 0) {
             qCritical("Could not create pipe to start X server");
         }
+#endif
 
         // start display server
         QStringList args;
         if (!daemonApp->testing()) {
             process->setProgram(mainConfig.X11.ServerPath.get());
             args << mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), Qt::SkipEmptyParts)
+#ifdef Q_OS_OPENBSD
+                 << QStringLiteral(":0")
+                 << QStringLiteral("vt05");
+#else
                  << QStringLiteral("-background") << QStringLiteral("none")
                  << QStringLiteral("-seat") << displayPtr()->seat()->name()
                  << QStringLiteral("vt%1").arg(displayPtr()->terminalId());
+#endif
         } else {
             process->setProgram(mainConfig.X11.XephyrPath.get());
             args << QStringLiteral("-br")
                  << QStringLiteral("-screen") << QStringLiteral("800x600");
         }
 
+#ifdef Q_OS_OPENBSD
+        args << QStringLiteral("-auth") << m_xauth.authPath();
+#else
         args << QStringLiteral("-auth") << m_xauth.authPath()
              << QStringLiteral("-noreset")
              << QStringLiteral("-displayfd") << QString::number(pipeFds[1]);
+#endif
 
         process->setArguments(args);
         qDebug() << "Running:"
@@ -138,14 +149,21 @@ namespace SDDM {
             qCritical() << "Failed to start display server process.";
 
             // return fail
+#ifndef Q_OS_OPENBSD
             close(pipeFds[0]);
+#endif
             return false;
         }
 
         // close the other side of pipe in our process, otherwise reading
         // from it may stuck even X server exit.
-        close(pipeFds[1]);
+#ifndef Q_OS_OPENBSD
+        close(pipeFds[0]);
+#endif
 
+#ifdef Q_OS_OPENBSD
+        m_display = QString::fromLocal8Bit(":0");
+#else
         QFile readPipe;
 
         if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) {
@@ -166,10 +184,10 @@ namespace SDDM {
         }
         displayNumber.prepend(QByteArray(":"));
         displayNumber.remove(displayNumber.size() -1, 1); // trim trailing whitespace
-        m_display = QString::fromLocal8Bit(displayNumber);
 
         // close our pipe
-        close(pipeFds[0]);
+        //close(pipeFds[0]);
+#endif
 
         // The file is also used by the greeter, which does care about the
         // display number. Write the proper entry, if it's different.
@@ -327,7 +345,7 @@ namespace SDDM {
 
     void XorgDisplayServer::changeOwner(const QString &fileName) {
         // change the owner and group of the auth file to the sddm user
-        struct passwd *pw = getpwnam("sddm");
+        struct passwd *pw = getpwnam("_x11");
         if (!pw)
             qWarning() << "Failed to find the sddm user. Owner of the auth file will not be changed.";
         else {
