Index: head/x11/sddm/Makefile =================================================================== --- head/x11/sddm/Makefile (revision 527831) +++ head/x11/sddm/Makefile (revision 527832) @@ -1,57 +1,57 @@ # $FreeBSD$ PORTNAME= sddm PORTVERSION= 0.18.1 DISTVERSIONPREFIX= v -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= x11 MAINTAINER= kde@FreeBSD.org COMMENT= QML based login manager # The source code is GPLv2+, but the provided themes are: # - CC-BY 3.0 (default greeter theme, maldives) # - CC-BY 4.0 (maya) # - Apache20 (font included with maya) LICENSE= GPLv2+ CC-BY-3.0 CC-BY-4.0 APACHE20 LICENSE_COMB= multi LICENSE_FILE_GPLv2+ = ${WRKSRC}/LICENSE LICENSE_FILE_CC-BY-3.0= ${WRKSRC}/LICENSE.CC-BY-3.0 BUILD_DEPENDS= rst2man.py-${PYTHON_VER}:textproc/py-docutils@${PY_FLAVOR} RUN_DEPENDS= dbus-run-session:devel/dbus USES= cmake compiler:c++11-lang kde:5 pkgconfig python:build qt:5 xorg USE_GITHUB= yes USE_KDE= ecm USE_QT= core declarative dbus gui network \ buildtools_build linguisttools_build qmake_build USE_XORG= xcb CMAKE_ARGS= -DUID_MIN=1000 \ -DUID_MAX=65000 \ -DCMAKE_INSTALL_SYSCONFDIR:PATH=${LOCALBASE}/etc \ -DBUILD_MAN_PAGES=ON \ -DRST2MAN_EXECUTABLE=${LOCALBASE}/bin/rst2man.py-${PYTHON_VER} USE_RC_SUBR= sddm SUB_FILES= xinitrc.desktop USERS= sddm GROUPS= sddm post-patch: @${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 @${CP} ${PATCHDIR}/VirtualTerminal_FreeBSD.cpp ${WRKSRC}/src/daemon post-install: # Install xsession.desktop to launch .xinitrc via sddm. ${MKDIR} ${STAGEDIR}${PREFIX}/share/xsessions ${INSTALL_DATA} ${WRKDIR}/xinitrc.desktop ${STAGEDIR}${PREFIX}/share/xsessions ${INSTALL_SCRIPT} ${FILESDIR}/xinit-session ${STAGEDIR}${PREFIX}/share/sddm/scripts .include Index: head/x11/sddm/files/patch-src_helper_Backend.cpp =================================================================== --- head/x11/sddm/files/patch-src_helper_Backend.cpp (revision 527831) +++ head/x11/sddm/files/patch-src_helper_Backend.cpp (revision 527832) @@ -1,40 +1,48 @@ ---- src/helper/Backend.cpp.orig 2019-03-13 10:22:35.000000000 +0100 -+++ src/helper/Backend.cpp 2020-02-16 16:39:53.134892000 +0100 +--- src/helper/Backend.cpp.orig 2019-03-13 09:22:35 UTC ++++ src/helper/Backend.cpp @@ -29,6 +29,10 @@ #include #include +#if defined(Q_OS_FREEBSD) +#include +#include +#endif /* defined(Q_OS_FREEBSD) */ namespace SDDM { Backend::Backend(HelperApp* parent) -@@ -70,6 +74,26 @@ +@@ -70,6 +74,34 @@ namespace SDDM { .arg(mainConfig.X11.UserAuthFile.get()); env.insert(QStringLiteral("XAUTHORITY"), value); } +#if defined(Q_OS_FREEBSD) + /* get additional environment variables via setclassenvironment(); + this needs to be done here instead of in UserSession::setupChildProcess -+ as the environment for execve() is prepared here */ ++ as the environment for execve() is prepared here; ++ save and restore SDDM's environment because setclassenvironment() mangles it */ + login_cap_t *lc; + -+ if ((lc = login_getpwclass(pw)) != 0) { ++ auto savedEnv = QProcessEnvironment::systemEnvironment(); ++ ++ if ((lc = login_getpwclass(pw)) != NULL) { + setclassenvironment(lc, pw, 1); /* path variables */ + setclassenvironment(lc, pw, 0); /* non-path variables */ + login_close(lc); -+ if ((lc = login_getuserclass(pw)) != NULL) { -+ setclassenvironment(lc, pw, 1); -+ setclassenvironment(lc, pw, 0); -+ } -+ if (lc != NULL) -+ login_close(lc); ++ } ++ if ((lc = login_getuserclass(pw)) != NULL) { ++ setclassenvironment(lc, pw, 1); /* path variables */ ++ setclassenvironment(lc, pw, 0); /* non-path variables */ ++ login_close(lc); ++ } + /* copy all environment variables that are now set */ ++ QString savedLang = env.value(QStringLiteral("LANG")); + env.insert(QProcessEnvironment::systemEnvironment()); -+ } ++ if (qobject_cast(parent())->user() == QStringLiteral("sddm")) ++ env.insert(QStringLiteral("LANG"), savedLang); ++ /* restore original environment */ ++ QProcessEnvironment::systemEnvironment().clear(); ++ QProcessEnvironment::systemEnvironment().insert(savedEnv); +#endif /* defined(Q_OS_FREEBSD) */ // TODO: I'm fairly sure this shouldn't be done for PAM sessions, investigate! m_app->session()->setProcessEnvironment(env); }