diff --git a/x11/sddm/Makefile b/x11/sddm/Makefile index 33b42d349f8b..5d6f5defaba5 100644 --- a/x11/sddm/Makefile +++ b/x11/sddm/Makefile @@ -1,78 +1,79 @@ PORTNAME= sddm DISTVERSIONPREFIX= v DISTVERSION= 0.21.0-36 DISTVERSIONSUFFIX= -gc2b97dd -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= x11 MAINTAINER= kde@FreeBSD.org COMMENT= QML based login manager WWW= https://github.com/sddm/sddm # 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_CC-BY-3.0= ${WRKSRC}/LICENSE.CC-BY-3.0 LICENSE_FILE_GPLv2+ = ${WRKSRC}/LICENSE BUILD_DEPENDS= rst2man:textproc/py-docutils@${PY_FLAVOR} RUN_DEPENDS= consolekit2>1.2.5:sysutils/consolekit2 \ dbus-launch:devel/dbus \ xauth:x11/xauth \ xmessage:x11/xmessage \ xrdb:x11/xrdb \ - xsetroot:x11/xsetroot + xsetroot:x11/xsetroot \ + setxkbmap:x11/setxkbmap USES= cmake compiler:c++17-lang cpe gl pkgconfig python:build qt:6 xorg CPE_VENDOR= ${PORTNAME}_project USE_GITHUB= yes USE_GL= gl opengl # GLX USE_QT= base declarative \ tools:build USE_RC_SUBR= sddm USE_XORG= xau xcb CMAKE_ARGS= -DACCOUNTSSERVICE_DATA_DIR:PATH=/var/db/AccountsService \ -DCMAKE_INSTALL_SYSCONFDIR:PATH=${LOCALBASE}/etc \ -DRST2MAN_EXECUTABLE=${LOCALBASE}/bin/rst2man \ -DSDDM_INITIAL_VT=7 \ -DUID_MIN=1000 \ -DUID_MAX=65000 CMAKE_ON= BUILD_MAN_PAGES \ BUILD_WITH_QT6 CONFLICTS_INSTALL= lightdm SUB_FILES= xinit-session \ 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/#' \ -e 's#%%LOCALBASE%%#${LOCALBASE}#g' \ ${WRKSRC}/data/scripts/Xsession \ ${WRKSRC}/src/common/Configuration.h \ ${WRKSRC}/src/greeter/waylandkeyboardbackend.cpp post-install: # Install xsession.desktop to launch .xinitrc via sddm. ${MKDIR} ${STAGEDIR}${PREFIX}/share/xsessions ${INSTALL_DATA} ${FILESDIR}/sddm.conf.default ${STAGEDIR}${PREFIX}/etc ${INSTALL_DATA} ${WRKDIR}/xinitrc.desktop ${STAGEDIR}${PREFIX}/share/xsessions ${INSTALL_SCRIPT} ${WRKDIR}/xinit-session ${STAGEDIR}${PREFIX}/share/sddm/scripts # Install our own PAM configs. Upstream is no longer providing these for any # platform and now just leaves this part to downstream packagers. # https://github.com/sddm/sddm/commit/b82f9be9cbd25e734958ad5eb3465579befcd0c0 # https://github.com/sddm/sddm/commit/ae072f901671b68861da9577e3e12e350a9053d5 ${CP} ${FILESDIR}/sddm.default ${STAGEDIR}${PREFIX}/etc/pam.d ${CP} ${FILESDIR}/sddm-autologin.default ${STAGEDIR}${PREFIX}/etc/pam.d ${CP} ${FILESDIR}/sddm-greeter.default ${STAGEDIR}${PREFIX}/etc/pam.d .include diff --git a/x11/sddm/files/patch-data_scripts_Xsetup b/x11/sddm/files/patch-data_scripts_Xsetup new file mode 100644 index 000000000000..988dac46f9df --- /dev/null +++ b/x11/sddm/files/patch-data_scripts_Xsetup @@ -0,0 +1,20 @@ +--- data/scripts/Xsetup.orig 2025-01-31 09:57:01 UTC ++++ data/scripts/Xsetup +@@ -1,3 +1,17 @@ + #!/bin/sh + # Xsetup - run as root before the login dialog appears + ++if /usr/sbin/sysrc -ne sddm_xkb_layout; then ++ sddm_xkb_layout=$(/usr/sbin/sysrc -ne sddm_xkb_layout) ++elif /usr/sbin/sysrc -ne sddm_lang; then ++ sddm_lang=$(/usr/sbin/sysrc -ne sddm_lang) ++ sddm_xkb_layout=$(echo $sddm_lang | sed 's/.*_//' | tr '[:upper:]' '[:lower:]') ++else ++ sddm_xkb_layout="us" ++fi ++ ++if [ "$sddm_xkb_layout" != "us" ]; then ++ sddm_xkb_layout="us,${sddm_xkb_layout}" ++fi ++ ++setxkbmap -layout $sddm_xkb_layout diff --git a/x11/sddm/files/sddm.in b/x11/sddm/files/sddm.in index 13631420f546..b5358af736bf 100644 --- a/x11/sddm/files/sddm.in +++ b/x11/sddm/files/sddm.in @@ -1,41 +1,45 @@ #!/bin/sh # PROVIDE: sddm # REQUIRE: LOGIN cleanvar moused syscons dbus # KEYWORD: shutdown # # Add the following to /etc/rc.conf to start SDDM at boot time: # # sddm_enable="YES" . /etc/rc.subr name=sddm rcvar=sddm_enable load_rc_config ${name} +# sddm_lang also controls the list of keyboard layouts in the breeze theme +# if your layouts are messed up you can override it by setting +# sddm_xkb_layout="us,de,fr,it,ru" +# in /etc/rc.conf : ${sddm_lang="en_US"} # .UTF-8 suffix will be added later to comply with locale format : ${sddm_enable="NO"} command="%%PREFIX%%/bin/sddm" start_cmd="sddm_start" sddm_start() { echo "Starting ${name}." local iter ( iter=0 while ! pgrep -f "^/usr/libexec/getty " > /dev/null; do if [ ${iter} -eq 60 ]; then break fi sleep 1 iter=$((${iter} + 1)) done LANG=${sddm_lang}.UTF-8 ${command} ${sddm_flags} ) & } run_rc_command "$1"