Update x11/sddm to 0.17.

This is still one minor release behind, but a big update relative to
the previous version. Thanks to tijl@ for the patches, dbn@ for
initial testing.

PR:		228116
Submitted by:	tijl
This commit is contained in:
Adriaan de Groot 2018-09-08 10:28:11 +00:00
parent 8070376c60
commit 2d4534668d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=479245
23 changed files with 353 additions and 172 deletions

View file

@ -2,7 +2,7 @@
PORTNAME= plasma-workspace
DISTVERSION= ${KDE_PLASMA_VERSION}
PORTREVISION= 3
PORTREVISION= 4
CATEGORIES= x11 kde kde-plasma
MAINTAINER= kde@FreeBSD.org

View file

@ -1,10 +0,0 @@
--- plasma.desktop.cmake.orig 2018-05-05 17:27:16 UTC
+++ plasma.desktop.cmake
@@ -1,6 +1,6 @@
[Desktop Entry]
Type=XSession
-Exec=${CMAKE_INSTALL_FULL_BINDIR}/startkde
+Exec=ck-launch-session ${CMAKE_INSTALL_FULL_BINDIR}/startkde
TryExec=${CMAKE_INSTALL_FULL_BINDIR}/startkde
DesktopNames=KDE
Name=Plasma

View file

@ -1,14 +1,16 @@
# $FreeBSD$
PORTNAME= sddm
PORTVERSION= 0.14.0
PORTVERSION= 0.17.0
DISTVERSIONPREFIX= v
CATEGORIES= x11
MAINTAINER= kde@FreeBSD.org
COMMENT= QML based login manager
USES= cmake:outsource desktop-file-utils kde:5 qt:5
RUN_DEPENDS= dbus-run-session:devel/dbus
USES= cmake:outsource kde:5 qt:5
USE_KDE= ecm
USE_QT= concurrent core dbus gui linguisttools multimedia network \
printsupport qml quick script sql webkit widgets \
@ -18,12 +20,9 @@ USE_XORG= xcb
CMAKE_ARGS= -DUID_MIN=1000 \
-DUID_MAX=65000 \
-DCMAKE_INSTALL_SYSCONFDIR:PATH=${LOCALBASE}/etc
# We need to disable PAM at the moment and use the passwd-based backend;
# the two backend are mutually exclusive, and we have to investigate how
# to make it compatible with OpenPAM.
CMAKE_ARGS+= -DENABLE_PAM:BOOL=FALSE
USE_RC_SUBR= sddm
SUB_FILES= xinitrc.desktop
USERS= sddm
GROUPS= sddm
@ -31,16 +30,18 @@ GROUPS= sddm
USE_GITHUB= yes
post-patch:
# Patch in the correct location for X11 startup files, and make the session start
# script of sddm use the value of ${STARTUP} defined by 90-consolekit
${REINPLACE_CMD} -e 's#/etc/X11#${LOCALBASE}/etc/X11#g' \
-e '/exec.*session/s#exec#exec $${STARTUP}#g' \
${PATCH_WRKSRC}/data/scripts/Xsession
@${REINPLACE_CMD} -e 's#/etc/X11#${LOCALBASE}/etc/X11#' \
-e 's#/usr/bin/#${LOCALBASE}/bin/#g' \
-e 's#/usr/share/#${LOCALBASE}/share/#' \
${WRKSRC}/data/scripts/Xsession \
${WRKSRC}/src/common/Configuration.h
post-install:
${MV} ${STAGEDIR}${PREFIX}/etc/sddm.conf \
${STAGEDIR}${PREFIX}/etc/sddm.conf.sample
# Install xsession.desktop to launch .xinitrc via sddm.
${MKDIR} ${STAGEDIR}${PREFIX}/share/xsessions
${INSTALL_DATA} ${FILESDIR}/xinitrc.desktop ${STAGEDIR}${PREFIX}/share/xsessions
${INSTALL_DATA} ${WRKDIR}/xinitrc.desktop ${STAGEDIR}${PREFIX}/share/xsessions
${INSTALL_SCRIPT} ${FILESDIR}/xinit-session ${STAGEDIR}${PREFIX}/share/sddm/scripts
.include <bsd.port.mk>

View file

@ -1,3 +1,3 @@
TIMESTAMP = 1488014449
SHA256 (sddm-sddm-v0.14.0_GH0.tar.gz) = a551551a6ba324e9c384c89bc63e871de65fea3740eadbea2d63df86045f8205
SIZE (sddm-sddm-v0.14.0_GH0.tar.gz) = 3367582
TIMESTAMP = 1525019041
SHA256 (sddm-sddm-v0.17.0_GH0.tar.gz) = c6da2862688d21a091f1568b78a5f5900cd2e02a83dd42c016f0c5867e69a92d
SIZE (sddm-sddm-v0.17.0_GH0.tar.gz) = 3524362

View file

@ -1,16 +1,16 @@
1) On FreeBSD X is normally started on VT9.
2) The shutdown command uses '-p' and not '-P' on FreeBSD.
--- CMakeLists.txt.orig 2016-08-28 11:54:03 UTC
--- CMakeLists.txt.orig 2017-12-05 16:00:16 UTC
+++ CMakeLists.txt
@@ -143,8 +143,8 @@ if(SYSTEMD_FOUND)
set(REBOOT_COMMAND "/usr/bin/systemctl reboot")
else()
set(SYSTEMD_FOUND 0)
@@ -168,8 +168,8 @@ add_feature_info("elogind" ELOGIND_FOUND "elogind supp
# Default behaviour if neither systemd nor elogind is used
if (NOT ELOGIND_FOUND AND NOT SYSTEMD_FOUND)
- set(MINIMUM_VT 7)
- set(HALT_COMMAND "/sbin/shutdown -h -P now")
+ set(MINIMUM_VT 9)
+ set(HALT_COMMAND "/sbin/shutdown -h -p now")
+ set(HALT_COMMAND "/sbin/shutdown -p now")
set(REBOOT_COMMAND "/sbin/shutdown -r now")
endif()
add_feature_info("systemd" SYSTEMD_FOUND "systemd support")

View file

@ -0,0 +1,23 @@
Fix use of "$@" (see sh(1)).
There's no systemd on FreeBSD so start the session using $STARTUP which is
defined in 90-consolekit if ConsoleKit2 is installed. By default this allows
local users to shutdown/reboot the machine and access devices like USB keys.
Also use dbus-run-session so libdbus doesn't have to autolauch the session bus
daemon on first use. Autolaunched dbus daemons tend to linger and may only
exit if the X server exits.
--- data/scripts/Xsession.orig 2017-12-05 16:00:16 UTC
+++ data/scripts/Xsession
@@ -94,8 +94,8 @@ if [ -f "$USERXSESSION" ]; then
. "$USERXSESSION"
fi
-if [ -z "$@" ]; then
+if [ -z "$1" ]; then
exec xmessage -center -buttons OK:0 -default OK "Sorry, $DESKTOP_SESSION is no valid session."
else
- exec $@
+ exec $STARTUP /usr/bin/dbus-run-session --dbus-daemon=/usr/bin/dbus-daemon -- "$@"
fi

View file

@ -0,0 +1,23 @@
--- services/sddm-autologin.pam.orig 2017-12-05 16:00:16 UTC
+++ services/sddm-autologin.pam
@@ -1,13 +1,9 @@
#%PAM-1.0
-auth required pam_env.so
-auth required pam_tally.so file=/var/log/faillog onerr=succeed
-auth required pam_shells.so
-auth required pam_nologin.so
auth required pam_permit.so
--auth optional pam_gnome_keyring.so
--auth optional pam_kwallet5.so
-account include system-local-login
-password include system-local-login
-session include system-local-login
--session optional pam_gnome_keyring.so auto_start
--session optional pam_kwallet5.so auto_start
+#auth optional pam_gnome_keyring.so
+#auth optional pam_kwallet5.so
+account include login
+password required pam_deny.so
+session include login
+#session optional pam_gnome_keyring.so auto_start
+#session optional pam_kwallet5.so auto_start

View file

@ -0,0 +1,19 @@
--- services/sddm-greeter.pam.orig 2017-12-05 16:00:16 UTC
+++ services/sddm-greeter.pam
@@ -1,8 +1,5 @@
#%PAM-1.0
-# Load environment from /etc/environment and ~/.pam_environment
-auth required pam_env.so
-
# Always let the greeter start without authentication
auth required pam_permit.so
@@ -13,6 +10,4 @@ account required pam_permit.so
password required pam_deny.so
# Setup session
-session required pam_unix.so
--session optional pam_systemd.so
--session optional pam_elogind.so
+session required pam_permit.so

View file

@ -0,0 +1,27 @@
--- services/sddm.pam.orig 2017-12-05 16:00:16 UTC
+++ services/sddm.pam
@@ -1,15 +1,14 @@
#%PAM-1.0
-auth include system-login
--auth optional pam_gnome_keyring.so
--auth optional pam_kwallet5.so
+auth include login
+#auth optional pam_gnome_keyring.so
+#auth optional pam_kwallet5.so
-account include system-login
+account include login
-password include system-login
--password optional pam_gnome_keyring.so use_authtok
+password include login
+#password optional pam_gnome_keyring.so use_authtok
-session optional pam_keyinit.so force revoke
-session include system-login
--session optional pam_gnome_keyring.so auto_start
--session optional pam_kwallet5.so auto_start
+session include login
+#session optional pam_gnome_keyring.so auto_start
+#session optional pam_kwallet5.so auto_start

View file

@ -1,38 +1,36 @@
Modify the default configuration to fit in to FreeBSD. That is replace '/usr/bin'
with '/usr/local/bin' and so on.
The setting of '$PATH' I find a bit dumb... this should respect the values of the
users profile...
Leave InputMethod empty by default since qtvirtualkeyboard does not appear to
be supported by the included themes. The keyboard is drawn on top of the
login screen and has to be clicked away (button lower-right).
--- src/common/Configuration.h.orig 2016-08-28 11:54:03 UTC
Set the default theme and cursor theme to breeze, because sddm is most likely
used together with Plasma. If they aren't available sddm falls back to a
compiled-in theme.
--- src/common/Configuration.h.orig 2017-12-05 16:00:16 UTC
+++ src/common/Configuration.h
@@ -58,11 +58,11 @@ namespace SDDM {
// TODO: Not absolutely sure if everything belongs here. Xsessions, VT and probably some more seem universal
Section(X11,
- Entry(ServerPath, QString, _S("/usr/bin/X"), _S("Path to X server binary"));
+ Entry(ServerPath, QString, _S("/usr/local/bin/X"), _S("Path to X server binary"));
Entry(ServerArguments, QString, _S("-nolisten tcp"), _S("Arguments passed to the X server invocation"));
- Entry(XephyrPath, QString, _S("/usr/bin/Xephyr"), _S("Path to Xephyr binary"));
- Entry(XauthPath, QString, _S("/usr/bin/xauth"), _S("Path to xauth binary"));
- Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Directory containing available X sessions"));
+ Entry(XephyrPath, QString, _S("/usr/local/bin/Xephyr"), _S("Path to Xephyr binary"));
+ Entry(XauthPath, QString, _S("/usr/local/bin/xauth"), _S("Path to xauth binary"));
+ Entry(SessionDir, QString, _S("/usr/local/share/xsessions"), _S("Directory containing available X sessions"));
Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session"));
Entry(SessionLogFile, QString, _S(".local/share/sddm/xorg-session.log"), _S("Path to the user session log file"));
Entry(UserAuthFile, QString, _S(".Xauthority"), _S("Path to the Xauthority file"));
@@ -72,13 +72,13 @@ namespace SDDM {
);
Section(Wayland,
- Entry(SessionDir, QString, _S("/usr/share/wayland-sessions"), _S("Directory containing available Wayland sessions"));
+ Entry(SessionDir, QString, _S("/usr/local/share/wayland-sessions"), _S("Directory containing available Wayland sessions"));
Entry(SessionCommand, QString, _S(WAYLAND_SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session"));
Entry(SessionLogFile, QString, _S(".local/share/sddm/wayland-session.log"),_S("Path to the user session log file"));
@@ -42,14 +42,14 @@ namespace SDDM {
Entry(Numlock, NumState, NUM_NONE, _S("Initial NumLock state. Can be on, off or none.\n"
"If property is set to none, numlock won't be changed\n"
"NOTE: Currently ignored if autologin is enabled."));
- Entry(InputMethod, QString, QStringLiteral("qtvirtualkeyboard"), _S("Input method module"));
+ Entry(InputMethod, QString, QString(), _S("Input method module"));
// Name Entries (but it's a regular class again)
Section(Theme,
Entry(ThemeDir, QString, _S(DATA_INSTALL_DIR "/themes"), _S("Theme directory path"));
- Entry(Current, QString, _S(""), _S("Current theme name"));
+ Entry(Current, QString, _S("breeze"), _S("Current theme name"));
Entry(FacesDir, QString, _S(DATA_INSTALL_DIR "/faces"), _S("Global directory for user avatars\n"
"The files should be named <username>.face.icon"));
- Entry(CursorTheme, QString, QString(), _S("Cursor theme used in the greeter"));
+ Entry(CursorTheme, QString, _S("breeze_cursors"), _S("Cursor theme used in the greeter"));
Entry(EnableAvatars, bool, true, _S("Enable display of custom user avatars"));
Entry(DisableAvatarsThreshold,int, 7, _S("Number of users to use as threshold\n"
"above which avatars are disabled\n"
@@ -80,7 +80,7 @@ namespace SDDM {
);
Section(Users,
- Entry(DefaultPath, QString, _S("/bin:/usr/bin:/usr/local/bin"), _S("Default $PATH for logged in users"));
- Entry(DefaultPath, QString, _S("/usr/local/bin:/usr/bin:/bin"), _S("Default $PATH for logged in users"));
+ Entry(DefaultPath, QString, _S("/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"), _S("Default $PATH for logged in users"));
Entry(MinimumUid, int, UID_MIN, _S("Minimum user id for displayed users"));
Entry(MaximumUid, int, UID_MAX, _S("Maximum user id for displayed users"));

View file

@ -1,19 +1,9 @@
This patch does two things:
1) Add the include directories for 'libxcb' to the compiler search directories,
2) Remove VirtualTerminal.cpp from the sources that need to be built.
see also 'patch-src_daemon_Display.cpp'
Remove VirtualTerminal.cpp from the sources that need to be built.
See also 'patch-src_daemon_Display.cpp'.
--- src/daemon/CMakeLists.txt.orig 2016-08-28 11:54:03 UTC
--- src/daemon/CMakeLists.txt.orig 2017-12-05 16:00:16 UTC
+++ src/daemon/CMakeLists.txt
@@ -3,6 +3,7 @@ include_directories(
"${CMAKE_SOURCE_DIR}/src/auth"
)
include_directories("${CMAKE_BINARY_DIR}/src/common")
+include_directories("${LIBXCB_INCLUDE_DIR}")
set(DAEMON_SOURCES
${CMAKE_SOURCE_DIR}/src/common/Configuration.cpp
@@ -26,7 +27,6 @@ set(DAEMON_SOURCES
@@ -29,7 +29,6 @@ set(DAEMON_SOURCES
SeatManager.cpp
SignalHandler.cpp
SocketServer.cpp

View file

@ -0,0 +1,22 @@
On FreeBSD console-kit-daemon isn't started by the init system, so try to
start it from sddm.
--- src/daemon/DaemonApp.cpp.orig 2017-12-05 16:00:16 UTC
+++ src/daemon/DaemonApp.cpp
@@ -28,6 +28,7 @@
#include "MessageHandler.h"
+#include <QDBusConnectionInterface>
#include <QDebug>
#include <QHostInfo>
#include <QTimer>
@@ -48,6 +49,8 @@ namespace SDDM {
// set testing parameter
m_testing = (arguments().indexOf(QStringLiteral("--test-mode")) != -1);
+
+ QDBusConnection::systemBus().interface()->startService(QStringLiteral("org.freedesktop.ConsoleKit"));
// create display manager
m_displayManager = new DisplayManager(this);

View file

@ -2,7 +2,12 @@ VirtualTerminal for Wayland is only present on Linux at the moment.
As we are only interested in an X11 session at the moment, we therefore
can hide it behind a Q_OS_LINUX.
--- src/daemon/Display.cpp.orig 2016-08-28 11:54:03 UTC
Only set XDG_CURRENT_DESKTOP and XDG_SESSION_DESKTOP if the xsession .desktop
file defines DesktopNames. Our xinitrc.desktop does not set it because that
may confuse the desktop session started from ~/.xinitrc. These environment
variables are used for OnlyShowIn and NotShowIn in .desktop files.
--- src/daemon/Display.cpp.orig 2017-12-05 16:00:16 UTC
+++ src/daemon/Display.cpp
@@ -30,7 +30,9 @@
#include "Greeter.h"
@ -14,7 +19,7 @@ can hide it behind a Q_OS_LINUX.
#include <QDebug>
#include <QFile>
@@ -280,8 +282,10 @@ namespace SDDM {
@@ -310,8 +312,10 @@ namespace SDDM {
// create new VT for Wayland sessions otherwise use greeter vt
int vt = terminalId();
@ -25,7 +30,21 @@ can hide it behind a Q_OS_LINUX.
m_lastSession.setVt(vt);
QProcessEnvironment env;
@@ -321,9 +325,11 @@ namespace SDDM {
@@ -321,11 +325,13 @@ namespace SDDM {
env.insert(QStringLiteral("XDG_SEAT_PATH"), daemonApp->displayManager()->seatPath(seat()->name()));
env.insert(QStringLiteral("XDG_SESSION_PATH"), daemonApp->displayManager()->sessionPath(QStringLiteral("Session%1").arg(daemonApp->newSessionId())));
env.insert(QStringLiteral("DESKTOP_SESSION"), session.desktopSession());
+ if (!session.desktopNames().isEmpty())
env.insert(QStringLiteral("XDG_CURRENT_DESKTOP"), session.desktopNames());
env.insert(QStringLiteral("XDG_SESSION_CLASS"), QStringLiteral("user"));
env.insert(QStringLiteral("XDG_SESSION_TYPE"), session.xdgSessionType());
env.insert(QStringLiteral("XDG_SEAT"), seat()->name());
+ if (!session.desktopNames().isEmpty())
env.insert(QStringLiteral("XDG_SESSION_DESKTOP"), session.desktopNames());
if (seat()->name() == QLatin1String("seat0")) {
env.insert(QStringLiteral("XDG_VTNR"), QString::number(vt));
@@ -366,9 +372,11 @@ namespace SDDM {
stateConfig.Last.Session.setDefault();
stateConfig.save();

View file

@ -0,0 +1,13 @@
Disable ConsoleKit seat management for now. It is mistakenly assumed to have
the same D-Bus interface as logind.
--- src/daemon/LogindDBusTypes.cpp.orig 2017-12-05 16:00:16 UTC
+++ src/daemon/LogindDBusTypes.cpp
@@ -58,6 +58,7 @@ LogindPathInternal::LogindPathInternal()
return;
}
+ if (0)
if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.ConsoleKit"))) {
qDebug() << "Console kit interface found";
available = true;

View file

@ -0,0 +1,45 @@
From 62d776518594f517dc59de3c87e53afdda339079 Mon Sep 17 00:00:00 2001
From: Romain Labolle <ravomavain@gmail.com>
Date: Sat, 3 Mar 2018 22:09:30 +0100
Subject: [PATCH] Add SOCK_CLOEXEC to signal handling sockets
SDDM is currennty leaking 8 sockets file descriptors to the user session.
Adding the CLOEXEC flag to the fd to avoid thoses leaks.
---
src/daemon/SignalHandler.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/daemon/SignalHandler.cpp b/src/daemon/SignalHandler.cpp
index 5c536603..3054e635 100644
--- src/daemon/SignalHandler.cpp.orig 2017-12-05 16:00:16 UTC
+++ src/daemon/SignalHandler.cpp
@@ -34,25 +34,25 @@ namespace SDDM {
int sigusr1Fd[2];
SignalHandler::SignalHandler(QObject *parent) : QObject(parent) {
- if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sighupFd))
+ if (::socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sighupFd))
qCritical() << "Failed to create socket pair for SIGHUP handling.";
snhup = new QSocketNotifier(sighupFd[1], QSocketNotifier::Read, this);
connect(snhup, SIGNAL(activated(int)), this, SLOT(handleSighup()));
- if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sigintFd))
+ if (::socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sigintFd))
qCritical() << "Failed to create socket pair for SIGINT handling.";
snint = new QSocketNotifier(sigintFd[1], QSocketNotifier::Read, this);
connect(snint, SIGNAL(activated(int)), this, SLOT(handleSigint()));
- if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sigtermFd))
+ if (::socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sigtermFd))
qCritical() << "Failed to create socket pair for SIGTERM handling.";
snterm = new QSocketNotifier(sigtermFd[1], QSocketNotifier::Read, this);
connect(snterm, SIGNAL(activated(int)), this, SLOT(handleSigterm()));
- if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sigusr1Fd))
+ if (::socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sigusr1Fd))
qCritical() << "Failed to create socket pair for SIGUSR1 handling.";
snusr1 = new QSocketNotifier(sigusr1Fd[1], QSocketNotifier::Read, this);

View file

@ -1,12 +1,12 @@
Call 'setpwent' to rewind to the beginning of the passwd database.
--- src/greeter/UserModel.cpp.orig 2016-07-10 21:26:13 UTC
--- src/greeter/UserModel.cpp.orig 2017-12-05 16:00:16 UTC
+++ src/greeter/UserModel.cpp
@@ -55,6 +55,7 @@ namespace SDDM {
const QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir);
const QString defaultFace = QStringLiteral("file://%1/.face.icon").arg(facesDir);
struct passwd *current_pw;
+ setpwent();
while ((current_pw = getpwent()) != nullptr) {
// skip entries with uids smaller than minimum uid

View file

@ -0,0 +1,48 @@
--- src/helper/HelperApp.cpp.orig 2017-12-05 16:00:16 UTC
+++ src/helper/HelperApp.cpp
@@ -33,8 +33,11 @@
#include <iostream>
#include <unistd.h>
#include <sys/socket.h>
+#include <sys/time.h>
+#if defined(Q_OS_LINUX)
#include <utmp.h>
+#endif
#include <utmpx.h>
#include <QByteArray>
@@ -301,12 +304,20 @@ namespace SDDM {
// append to failed login database btmp
if (!authSuccessful) {
+#if defined(Q_OS_FREEBSD)
+ pututxline(&entry);
+#else
updwtmpx("/var/log/btmp", &entry);
+#endif
}
// append to wtmp
else {
+#if defined(Q_OS_FREEBSD)
+ pututxline(&entry);
+#else
updwtmpx("/var/log/wtmp", &entry);
+#endif
}
}
@@ -342,8 +353,12 @@ namespace SDDM {
qWarning() << "Failed to write utmpx: " << strerror(errno);
endutxent();
+#if defined(Q_OS_FREEBSD)
+ pututxline(&entry);
+#else
// append to wtmp
updwtmpx("/var/log/wtmp", &entry);
+#endif
}
}

View file

@ -1,12 +1,24 @@
Include '<errno.h>' as 'errno' is used.
Run sddm-greeter via the session command (Xsession script) so it also gets X
resources and a ConsoleKit and D-Bus session. The ConsoleKit session has its
session-class set to "user" instead of "greeter" because ck-launch-session
doesn't provide a way to change this. ConsoleKit doesn't do anything with
this value though so it is believed to be harmless. The XDG_SESSION_CLASS
environment variable does have the value "greeter".
--- src/helper/UserSession.cpp.orig 2016-07-06 14:00:10 UTC
Remove double quotes because we fixed the use of "$@" in the script.
--- src/helper/UserSession.cpp.orig 2017-12-05 16:00:16 UTC
+++ src/helper/UserSession.cpp
@@ -25,6 +25,7 @@
@@ -45,10 +45,8 @@ namespace SDDM {
bool UserSession::start() {
QProcessEnvironment env = qobject_cast<HelperApp*>(parent())->session()->processEnvironment();
#include <sys/types.h>
#include <sys/ioctl.h>
+#include <errno.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
- if (env.value(QStringLiteral("XDG_SESSION_CLASS")) == QLatin1String("greeter")) {
- QProcess::start(m_path);
- } else if (env.value(QStringLiteral("XDG_SESSION_TYPE")) == QLatin1String("x11")) {
- const QString cmd = QStringLiteral("%1 \"%2\"").arg(mainConfig.X11.SessionCommand.get()).arg(m_path);
+ if (env.value(QStringLiteral("XDG_SESSION_TYPE")) == QLatin1String("x11")) {
+ const QString cmd = QStringLiteral("%1 %2").arg(mainConfig.X11.SessionCommand.get()).arg(m_path);
qInfo() << "Starting:" << cmd;
QProcess::start(cmd);
} else if (env.value(QStringLiteral("XDG_SESSION_TYPE")) == QLatin1String("wayland")) {

View file

@ -1,46 +0,0 @@
Implement password authentication on FreeBSD.
This needs review :)
--- src/helper/backend/PasswdBackend.cpp.orig 2016-07-06 14:00:10 UTC
+++ src/helper/backend/PasswdBackend.cpp
@@ -27,8 +27,13 @@
#include <sys/types.h>
#include <pwd.h>
+#if defined(Q_OS_LINUX)
#include <shadow.h>
#include <crypt.h>
+#endif
+#if defined(Q_OS_FREEBSD)
+#include <unistd.h>
+#endif
namespace SDDM {
PasswdBackend::PasswdBackend(HelperApp *parent)
@@ -72,6 +77,17 @@ namespace SDDM {
return false;
}
+#if defined(Q_OS_FREEBSD)
+ if (!*pw->pw_passwd)
+ {
+ //empty password
+ return true;
+ }
+ char *crypted = crypt(qPrintable(password), pw->pw_passwd);
+ if (0 == strcmp(crypted, pw->pw_passwd)) {
+ return true;
+ }
+#else
struct spwd *spw = getspnam(pw->pw_name);
if (!spw) {
qWarning() << "[Passwd] Could get passwd but not shadow";
@@ -85,7 +101,7 @@ namespace SDDM {
if (0 == strcmp(crypted, spw->sp_pwdp)) {
return true;
}
-
+#endif
m_app->error(QStringLiteral("Wrong user/password combination"), Auth::ERROR_AUTHENTICATION);
return false;
}

View file

@ -19,28 +19,16 @@ load_rc_config ${name}
: ${sddm_lang="en_US"} # .UTF-8 suffix will be added later to comply with locale format
: ${sddm_enable="NO"}
command="/usr/local/bin/sddm"
pidfile="/var/run/sddm.pid"
command="%%PREFIX%%/bin/sddm"
start_cmd="sddm_start"
stop_cmd="sddm_stop"
# Creates /etc/sddm.conf after `sddm --example-config` if it's not there already.
sddm_genconf()
{
if [ ! -r /etc/sddm.conf ]; then
echo "Generating SDDM configuration."
${command} --example-config > /etc/sddm.conf
fi
}
sddm_start()
{
echo "Starting ${name}."
local iter
sddm_genconf
( iter=0
while ! ps -axoargs | grep "^/usr/libexec/getty" | grep -qv grep > /dev/null 2>&1; do
while ! pgrep -f "^/usr/libexec/getty " > /dev/null; do
if [ ${iter} -eq 60 ]; then
break
fi
@ -49,13 +37,13 @@ sddm_start()
done
if checkyesno hald_enable; then
if [ ! -x /usr/local/sbin/hald ]; then
if [ ! -x %%LOCALBASE%%/sbin/hald ]; then
err 1 "Hald does not seem to be installed."
fi
iter=0
while [ ${iter} -lt 60 ] &&
!pgrep -f "^/usr/local/sbin/hald" > /dev/null 2>&1; do
! pgrep -f "^%%LOCALBASE%%/sbin/hald" > /dev/null; do
sleep 1
iter=$((${iter} + 1))
done
@ -64,13 +52,4 @@ sddm_start()
LANG=${sddm_lang}.UTF-8 ${command} ${sddm_flags} ) &
}
# Only takes the user back to the sddm screen when run from X
sddm_stop()
{
echo "Stopping ${name}."
/bin/kill -9 $(/bin/cat "${pidfile}")
pkill -9 -U ${name}
pkill -9 X
}
run_rc_command "$1"

View file

@ -1,7 +0,0 @@
[Desktop Entry]
Encoding=UTF-8
Type=XSession
Exec=/usr/local/share/sddm/scripts/xinit-session
TryExec=/usr/local/share/sddm/scripts/xinit-session
DesktopNames=User Session
Name=User Session

View file

@ -0,0 +1,6 @@
[Desktop Entry]
Encoding=UTF-8
Type=XSession
Exec=%%PREFIX%%/share/sddm/scripts/xinit-session
TryExec=%%PREFIX%%/share/sddm/scripts/xinit-session
Name=User Session

View file

@ -4,7 +4,7 @@ etc/dbus-1/system.d/org.freedesktop.DisplayManager.conf
etc/pam.d/sddm
etc/pam.d/sddm-autologin
etc/pam.d/sddm-greeter
etc/sddm.conf
@sample etc/sddm.conf.sample
%%QT_QMLDIR%%/SddmComponents/Background.qml
%%QT_QMLDIR%%/SddmComponents/Button.qml
%%QT_QMLDIR%%/SddmComponents/Clock.qml
@ -132,33 +132,52 @@ libexec/sddm-helper
%%DATADIR%%/themes/maldives/metadata.desktop
%%DATADIR%%/themes/maldives/rectangle.png
%%DATADIR%%/themes/maldives/theme.conf
%%DATADIR%%/themes/maya/LICENSE
%%DATADIR%%/themes/maya/Main.qml
%%DATADIR%%/themes/maya/README
%%DATADIR%%/themes/maya/components/SpButton.qml
%%DATADIR%%/themes/maya/components/SpClock.qml
%%DATADIR%%/themes/maya/fonts/OpenSans_CondLight.ttf
%%DATADIR%%/themes/maya/images/ic_arrow_drop_down_white_24px.svg
%%DATADIR%%/themes/maya/images/ic_power_settings_new_white_24px.svg
%%DATADIR%%/themes/maya/images/ic_refresh_white_24px.svg
%%DATADIR%%/themes/maya/images/ic_warning_white_24px.svg
%%DATADIR%%/themes/maya/metadata.desktop
%%DATADIR%%/themes/maya/screenshots/hi_IN.png
%%DATADIR%%/themes/maya/theme.conf
%%DATADIR%%/translations/ar.qm
%%DATADIR%%/translations/ca.qm
%%DATADIR%%/translations/cs.qm
%%DATADIR%%/translations/da.qm
%%DATADIR%%/translations/de.qm
%%DATADIR%%/translations/es.qm
%%DATADIR%%/translations/et.qm
%%DATADIR%%/translations/fi.qm
%%DATADIR%%/translations/fr.qm
%%DATADIR%%/translations/hi_IN.qm
%%DATADIR%%/translations/hu.qm
%%DATADIR%%/translations/it.qm
%%DATADIR%%/translations/ja.qm
%%DATADIR%%/translations/kk.qm
%%DATADIR%%/translations/ko.qm
%%DATADIR%%/translations/lt.qm
%%DATADIR%%/translations/lv.qm
%%DATADIR%%/translations/nb.qm
%%DATADIR%%/translations/nl.qm
%%DATADIR%%/translations/nn.qm
%%DATADIR%%/translations/pl.qm
%%DATADIR%%/translations/pt_BR.qm
%%DATADIR%%/translations/pt_PT.qm
%%DATADIR%%/translations/ro.qm
%%DATADIR%%/translations/ru.qm
%%DATADIR%%/translations/sk.qm
%%DATADIR%%/translations/sr.qm
%%DATADIR%%/translations/sr@ijekavian.qm
%%DATADIR%%/translations/sr@ijekavianlatin.qm
%%DATADIR%%/translations/sr@latin.qm
%%DATADIR%%/translations/sv.qm
%%DATADIR%%/translations/tr.qm
%%DATADIR%%/translations/uk.qm
%%DATADIR%%/translations/zh_CN.qm
%%DATADIR%%/translations/zh_TW.qm
share/xsessions/xinitrc.desktop