From b9272ca006e684b691a2223c81cb60c8c84ea4b9 Mon Sep 17 00:00:00 2001 From: "Tobias C. Berner" Date: Wed, 6 Sep 2017 19:32:40 +0000 Subject: [PATCH] New port: x11/sddm sddm is a QML based X11 and Wayland display manager https://github.com/sddm/sddm Reviewed by: rakuco, groot_kde.org Differential Revision: https://reviews.freebsd.org/D11619 --- GIDs | 2 +- UIDs | 2 +- x11/Makefile | 1 + x11/kde4-workspace/Makefile | 5 +- x11/kde4-workspace/files/kde4.desktop | 7 + x11/kde4-workspace/pkg-plist | 1 + x11/sddm/Makefile | 46 +++++ x11/sddm/distinfo | 3 + x11/sddm/files/patch-CMakeLists.txt | 16 ++ .../files/patch-src_common_Configuration.h | 39 +++++ .../files/patch-src_daemon_CMakeLists.txt | 23 +++ x11/sddm/files/patch-src_daemon_Display.cpp | 39 +++++ .../files/patch-src_greeter_UserModel.cpp | 12 ++ .../files/patch-src_helper_UserSession.cpp | 12 ++ ...patch-src_helper_backend_PasswdBackend.cpp | 46 +++++ x11/sddm/files/sddm.in | 75 ++++++++ x11/sddm/files/xinit-session | 12 ++ x11/sddm/files/xinitrc.desktop | 7 + x11/sddm/pkg-descr | 3 + x11/sddm/pkg-plist | 164 ++++++++++++++++++ 20 files changed, 512 insertions(+), 3 deletions(-) create mode 100644 x11/kde4-workspace/files/kde4.desktop create mode 100644 x11/sddm/Makefile create mode 100644 x11/sddm/distinfo create mode 100644 x11/sddm/files/patch-CMakeLists.txt create mode 100644 x11/sddm/files/patch-src_common_Configuration.h create mode 100644 x11/sddm/files/patch-src_daemon_CMakeLists.txt create mode 100644 x11/sddm/files/patch-src_daemon_Display.cpp create mode 100644 x11/sddm/files/patch-src_greeter_UserModel.cpp create mode 100644 x11/sddm/files/patch-src_helper_UserSession.cpp create mode 100644 x11/sddm/files/patch-src_helper_backend_PasswdBackend.cpp create mode 100644 x11/sddm/files/sddm.in create mode 100644 x11/sddm/files/xinit-session create mode 100644 x11/sddm/files/xinitrc.desktop create mode 100644 x11/sddm/pkg-descr create mode 100644 x11/sddm/pkg-plist diff --git a/GIDs b/GIDs index eeb69ed48cce..f1405ce4f99f 100644 --- a/GIDs +++ b/GIDs @@ -160,7 +160,7 @@ opendnssec:*:215: nsd:*:216: anvil:*:217: zap:*:218: -# free: 219 +sddm:*:219: bs:*:220: # free: 221 rtpproxy:*:222: diff --git a/UIDs b/UIDs index 6ab45edaca0e..6bd0791d3818 100644 --- a/UIDs +++ b/UIDs @@ -165,7 +165,7 @@ opendnssec:*:215:215::0:0:Opendnssec Pseudo User:/nonexistent:/usr/sbin/nologin nsd:*:216:216::0:0:NSD DNS Server:/nonexistent:/usr/sbin/nologin anvil:*:217:217::0:0:anvil certificate dropper:/var/db/anvil:/bin/sh zap:*:218:218::0:0:zap user:/usr/local/zap:/bin/sh -# free: 219 +sddm:*:219:219::0:0:SDDM Display Manager user:/usr/local/etc/sddm/home:/usr/sbin/nologin bs:*:220:220::0:0:Big Sister:/usr/local/bigsister:/bin/sh # free: 221 rtpproxy:*:222:222::0:0:& user:/nonexistent:/sbin/nologin diff --git a/x11/Makefile b/x11/Makefile index 9e8f1ba06055..f1e4a84763ea 100644 --- a/x11/Makefile +++ b/x11/Makefile @@ -296,6 +296,7 @@ SUBDIR += screen-message SUBDIR += scripts SUBDIR += scrnsaverproto + SUBDIR += sddm SUBDIR += sessreg SUBDIR += setlayout SUBDIR += setxkbmap diff --git a/x11/kde4-workspace/Makefile b/x11/kde4-workspace/Makefile index b17a7ca9a117..e8889662afde 100644 --- a/x11/kde4-workspace/Makefile +++ b/x11/kde4-workspace/Makefile @@ -2,7 +2,7 @@ PORTNAME= kde-workspace PORTVERSION= ${KDE4_WORKSPACE_VERSION} -PORTREVISION= 8 +PORTREVISION= 9 CATEGORIES= x11 kde kde-applications MAINTAINER= kde@FreeBSD.org @@ -129,6 +129,9 @@ pre-configure: post-install: ${LN} -sf ${PREFIX}/bin/startkde ${STAGEDIR}${PREFIX}/bin/startkde4 +# Install kde4.desktop to launch kde4 via sddm. + ${MKDIR} ${STAGEDIR}${PREFIX}/share/xsessions + ${INSTALL_DATA} ${FILESDIR}/kde4.desktop ${STAGEDIR}${PREFIX}/share/xsessions post-install-GSTREAMER-on: @${HEAD} -1 ${PKGMESSAGE} >> ${PKGMESSAGE} diff --git a/x11/kde4-workspace/files/kde4.desktop b/x11/kde4-workspace/files/kde4.desktop new file mode 100644 index 000000000000..9b5bb888248d --- /dev/null +++ b/x11/kde4-workspace/files/kde4.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=XSession +Exec=/usr/local/bin/startkde +TryExec=/usr/local/bin/startkde +DesktopNames=KDE +Name=KDE4 diff --git a/x11/kde4-workspace/pkg-plist b/x11/kde4-workspace/pkg-plist index 67c6f016eef8..c7fa75ee303f 100644 --- a/x11/kde4-workspace/pkg-plist +++ b/x11/kde4-workspace/pkg-plist @@ -2122,3 +2122,4 @@ share/polkit-1/actions/org.kde.ksysguard.processlisthelper.policy share/sounds/pop.wav share/wallpapers/stripes.png share/wallpapers/stripes.png.desktop +share/xsessions/kde4.desktop diff --git a/x11/sddm/Makefile b/x11/sddm/Makefile new file mode 100644 index 000000000000..f99aa29e2bd8 --- /dev/null +++ b/x11/sddm/Makefile @@ -0,0 +1,46 @@ +# $FreeBSD$ + +PORTNAME= sddm +PORTVERSION= 0.14.0 +DISTVERSIONPREFIX= v +CATEGORIES= x11 + +MAINTAINER= kde@FreeBSD.org +COMMENT= QML based login manager + +USES= cmake:outsource desktop-file-utils kde:5 +USE_KDE= ecm +USE_QT5= concurrent core dbus gui linguisttools multimedia network \ + printsupport qml quick script sql webkit widgets \ + buildtools_build qmake_build +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 + +USERS= sddm +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 + +post-install: +# Install xsession.desktop to launch .xinitrc via sddm. + ${MKDIR} ${STAGEDIR}${PREFIX}/share/xsessions + ${INSTALL_DATA} ${FILESDIR}/xinitrc.desktop ${STAGEDIR}${PREFIX}/share/xsessions + ${INSTALL_SCRIPT} ${FILESDIR}/xinit-session ${STAGEDIR}${PREFIX}/share/sddm/scripts + +.include diff --git a/x11/sddm/distinfo b/x11/sddm/distinfo new file mode 100644 index 000000000000..ac69c1466563 --- /dev/null +++ b/x11/sddm/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1488014449 +SHA256 (sddm-sddm-v0.14.0_GH0.tar.gz) = a551551a6ba324e9c384c89bc63e871de65fea3740eadbea2d63df86045f8205 +SIZE (sddm-sddm-v0.14.0_GH0.tar.gz) = 3367582 diff --git a/x11/sddm/files/patch-CMakeLists.txt b/x11/sddm/files/patch-CMakeLists.txt new file mode 100644 index 000000000000..2a7e3aa57836 --- /dev/null +++ b/x11/sddm/files/patch-CMakeLists.txt @@ -0,0 +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 +@@ -143,8 +143,8 @@ if(SYSTEMD_FOUND) + set(REBOOT_COMMAND "/usr/bin/systemctl reboot") + else() + set(SYSTEMD_FOUND 0) +- 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(REBOOT_COMMAND "/sbin/shutdown -r now") + endif() + add_feature_info("systemd" SYSTEMD_FOUND "systemd support") diff --git a/x11/sddm/files/patch-src_common_Configuration.h b/x11/sddm/files/patch-src_common_Configuration.h new file mode 100644 index 000000000000..b166b904512c --- /dev/null +++ b/x11/sddm/files/patch-src_common_Configuration.h @@ -0,0 +1,39 @@ +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... + +--- src/common/Configuration.h.orig 2016-08-28 11:54:03 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")); + ); + + Section(Users, +- Entry(DefaultPath, QString, _S("/bin:/usr/bin:/usr/local/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")); + Entry(HideUsers, QStringList, QStringList(), _S("Comma-separated list of users that should not be listed")); diff --git a/x11/sddm/files/patch-src_daemon_CMakeLists.txt b/x11/sddm/files/patch-src_daemon_CMakeLists.txt new file mode 100644 index 000000000000..6e4e688fe83c --- /dev/null +++ b/x11/sddm/files/patch-src_daemon_CMakeLists.txt @@ -0,0 +1,23 @@ +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' + +--- src/daemon/CMakeLists.txt.orig 2016-08-28 11:54:03 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 + SeatManager.cpp + SignalHandler.cpp + SocketServer.cpp +- VirtualTerminal.cpp + ) + + qt5_add_dbus_adaptor(DAEMON_SOURCES "${CMAKE_SOURCE_DIR}/data/interfaces/org.freedesktop.DisplayManager.xml" "DisplayManager.h" SDDM::DisplayManager) diff --git a/x11/sddm/files/patch-src_daemon_Display.cpp b/x11/sddm/files/patch-src_daemon_Display.cpp new file mode 100644 index 000000000000..548b57f5d031 --- /dev/null +++ b/x11/sddm/files/patch-src_daemon_Display.cpp @@ -0,0 +1,39 @@ +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 ++++ src/daemon/Display.cpp +@@ -30,7 +30,9 @@ + #include "Greeter.h" + #include "Utils.h" + #include "SignalHandler.h" ++#if defined(Q_OS_LINUX) + #include "VirtualTerminal.h" ++#endif + + #include + #include +@@ -280,8 +282,10 @@ namespace SDDM { + + // create new VT for Wayland sessions otherwise use greeter vt + int vt = terminalId(); ++#if defined(Q_OS_LINUX) + if (session.xdgSessionType() == QLatin1String("wayland")) + vt = VirtualTerminal::setUpNewVt(); ++#endif + m_lastSession.setVt(vt); + + QProcessEnvironment env; +@@ -321,9 +325,11 @@ namespace SDDM { + stateConfig.Last.Session.setDefault(); + stateConfig.save(); + ++#if defined(Q_OS_LINUX) + // switch to the new VT for Wayland sessions + if (m_lastSession.xdgSessionType() == QLatin1String("wayland")) + VirtualTerminal::jumpToVt(m_lastSession.vt()); ++#endif + + if (m_socket) + emit loginSucceeded(m_socket); diff --git a/x11/sddm/files/patch-src_greeter_UserModel.cpp b/x11/sddm/files/patch-src_greeter_UserModel.cpp new file mode 100644 index 000000000000..421c946818f5 --- /dev/null +++ b/x11/sddm/files/patch-src_greeter_UserModel.cpp @@ -0,0 +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 +@@ -55,6 +55,7 @@ namespace SDDM { + const QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir); + + struct passwd *current_pw; ++ setpwent(); + while ((current_pw = getpwent()) != nullptr) { + + // skip entries with uids smaller than minimum uid diff --git a/x11/sddm/files/patch-src_helper_UserSession.cpp b/x11/sddm/files/patch-src_helper_UserSession.cpp new file mode 100644 index 000000000000..b89fbd121a76 --- /dev/null +++ b/x11/sddm/files/patch-src_helper_UserSession.cpp @@ -0,0 +1,12 @@ +Include '' as 'errno' is used. + +--- src/helper/UserSession.cpp.orig 2016-07-06 14:00:10 UTC ++++ src/helper/UserSession.cpp +@@ -25,6 +25,7 @@ + + #include + #include ++#include + #include + #include + #include diff --git a/x11/sddm/files/patch-src_helper_backend_PasswdBackend.cpp b/x11/sddm/files/patch-src_helper_backend_PasswdBackend.cpp new file mode 100644 index 000000000000..f356b30c74ba --- /dev/null +++ b/x11/sddm/files/patch-src_helper_backend_PasswdBackend.cpp @@ -0,0 +1,46 @@ +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 + #include ++#if defined(Q_OS_LINUX) + #include + #include ++#endif ++#if defined(Q_OS_FREEBSD) ++#include ++#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; + } diff --git a/x11/sddm/files/sddm.in b/x11/sddm/files/sddm.in new file mode 100644 index 000000000000..8855b0f60a97 --- /dev/null +++ b/x11/sddm/files/sddm.in @@ -0,0 +1,75 @@ +#!/bin/sh +# $FreeBSD$ +# +# PROVIDE: sddm +# REQUIRE: LOGIN cleanvar moused syscons dbus hald +# 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="en_US"} # .UTF-8 suffix will be added later to comply with locale format + +command="/usr/local/bin/sddm" +pidfile="/var/run/sddm.pid" +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 + if [ ${iter} -eq 60 ]; then + break + fi + sleep 1 + iter=$((${iter} + 1)) + done + + if checkyesno hald_enable; then + if [ ! -x /usr/local/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 + sleep 1 + iter=$((${iter} + 1)) + done + fi + + 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" diff --git a/x11/sddm/files/xinit-session b/x11/sddm/files/xinit-session new file mode 100644 index 000000000000..804728c9ca53 --- /dev/null +++ b/x11/sddm/files/xinit-session @@ -0,0 +1,12 @@ +#!/bin/sh +# +# Runs the user's .xinitrc (at this point, .xsession has already +# been sourced). + +RC="$HOME/.xinitrc" + +test -f "$RC" || exit 1 + +test -x "$RC" && exec "$RC" +test -f "$RC" && exec /bin/sh "$RC" + diff --git a/x11/sddm/files/xinitrc.desktop b/x11/sddm/files/xinitrc.desktop new file mode 100644 index 000000000000..72c266b4260f --- /dev/null +++ b/x11/sddm/files/xinitrc.desktop @@ -0,0 +1,7 @@ +[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 diff --git a/x11/sddm/pkg-descr b/x11/sddm/pkg-descr new file mode 100644 index 000000000000..b3c4b7af0a63 --- /dev/null +++ b/x11/sddm/pkg-descr @@ -0,0 +1,3 @@ +QML based X11 and Wayland display manager. + +WWW: https://github.com/sddm/sddm diff --git a/x11/sddm/pkg-plist b/x11/sddm/pkg-plist new file mode 100644 index 000000000000..f9c9ac03a60f --- /dev/null +++ b/x11/sddm/pkg-plist @@ -0,0 +1,164 @@ +bin/sddm +bin/sddm-greeter +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 +%%QT_QMLDIR%%/SddmComponents/Background.qml +%%QT_QMLDIR%%/SddmComponents/Button.qml +%%QT_QMLDIR%%/SddmComponents/Clock.qml +%%QT_QMLDIR%%/SddmComponents/ComboBox.qml +%%QT_QMLDIR%%/SddmComponents/ImageButton.qml +%%QT_QMLDIR%%/SddmComponents/LayoutBox.qml +%%QT_QMLDIR%%/SddmComponents/Menu.qml +%%QT_QMLDIR%%/SddmComponents/PasswordBox.qml +%%QT_QMLDIR%%/SddmComponents/PictureBox.qml +%%QT_QMLDIR%%/SddmComponents/TextBox.qml +%%QT_QMLDIR%%/SddmComponents/TextConstants.qml +%%QT_QMLDIR%%/SddmComponents/qmldir +%%QT_QMLDIR%%/SddmComponents/warning.png +libexec/sddm-helper +%%DATADIR%%/faces/.face.icon +%%DATADIR%%/faces/root.face.icon +%%DATADIR%%/flags/ae.png +%%DATADIR%%/flags/am.png +%%DATADIR%%/flags/ar.png +%%DATADIR%%/flags/at.png +%%DATADIR%%/flags/az.png +%%DATADIR%%/flags/be.png +%%DATADIR%%/flags/bg.png +%%DATADIR%%/flags/bh.png +%%DATADIR%%/flags/br.png +%%DATADIR%%/flags/by.png +%%DATADIR%%/flags/ca.png +%%DATADIR%%/flags/ch.png +%%DATADIR%%/flags/cu.png +%%DATADIR%%/flags/cz.png +%%DATADIR%%/flags/de.png +%%DATADIR%%/flags/dj.png +%%DATADIR%%/flags/dk.png +%%DATADIR%%/flags/dz.png +%%DATADIR%%/flags/ee.png +%%DATADIR%%/flags/eg.png +%%DATADIR%%/flags/es.png +%%DATADIR%%/flags/eu.png +%%DATADIR%%/flags/fi.png +%%DATADIR%%/flags/fr.png +%%DATADIR%%/flags/gb.png +%%DATADIR%%/flags/ge.png +%%DATADIR%%/flags/gr.png +%%DATADIR%%/flags/hr.png +%%DATADIR%%/flags/hu.png +%%DATADIR%%/flags/il.png +%%DATADIR%%/flags/in.png +%%DATADIR%%/flags/iq.png +%%DATADIR%%/flags/is.png +%%DATADIR%%/flags/it.png +%%DATADIR%%/flags/jo.png +%%DATADIR%%/flags/jp.png +%%DATADIR%%/flags/km.png +%%DATADIR%%/flags/kr.png +%%DATADIR%%/flags/kw.png +%%DATADIR%%/flags/la.png +%%DATADIR%%/flags/lb.png +%%DATADIR%%/flags/lt.png +%%DATADIR%%/flags/lv.png +%%DATADIR%%/flags/ly.png +%%DATADIR%%/flags/ma.png +%%DATADIR%%/flags/mk.png +%%DATADIR%%/flags/mn.png +%%DATADIR%%/flags/mx.png +%%DATADIR%%/flags/nl.png +%%DATADIR%%/flags/no.png +%%DATADIR%%/flags/om.png +%%DATADIR%%/flags/pl.png +%%DATADIR%%/flags/ps.png +%%DATADIR%%/flags/pt.png +%%DATADIR%%/flags/qa.png +%%DATADIR%%/flags/qc.png +%%DATADIR%%/flags/ro.png +%%DATADIR%%/flags/ru.png +%%DATADIR%%/flags/sa.png +%%DATADIR%%/flags/sd.png +%%DATADIR%%/flags/se.png +%%DATADIR%%/flags/si.png +%%DATADIR%%/flags/sk.png +%%DATADIR%%/flags/so.png +%%DATADIR%%/flags/sr.png +%%DATADIR%%/flags/sy.png +%%DATADIR%%/flags/th.png +%%DATADIR%%/flags/tn.png +%%DATADIR%%/flags/tr.png +%%DATADIR%%/flags/ua.png +%%DATADIR%%/flags/uk.png +%%DATADIR%%/flags/un.png +%%DATADIR%%/flags/us.png +%%DATADIR%%/flags/uy.png +%%DATADIR%%/flags/vn.png +%%DATADIR%%/flags/ye.png +%%DATADIR%%/flags/yu.png +%%DATADIR%%/flags/zz.png +%%DATADIR%%/scripts/Xsession +%%DATADIR%%/scripts/Xsetup +%%DATADIR%%/scripts/Xstop +%%DATADIR%%/scripts/wayland-session +%%DATADIR%%/scripts/xinit-session +%%DATADIR%%/themes/elarun/Main.qml +%%DATADIR%%/themes/elarun/README +%%DATADIR%%/themes/elarun/angle-down.png +%%DATADIR%%/themes/elarun/elarun.jpg +%%DATADIR%%/themes/elarun/images/background.png +%%DATADIR%%/themes/elarun/images/lock.png +%%DATADIR%%/themes/elarun/images/login_active.png +%%DATADIR%%/themes/elarun/images/login_normal.png +%%DATADIR%%/themes/elarun/images/rectangle.png +%%DATADIR%%/themes/elarun/images/rectangle_overlay.png +%%DATADIR%%/themes/elarun/images/session_normal.png +%%DATADIR%%/themes/elarun/images/system_hibernate.png +%%DATADIR%%/themes/elarun/images/system_reboot.png +%%DATADIR%%/themes/elarun/images/system_shutdown.png +%%DATADIR%%/themes/elarun/images/system_suspend.png +%%DATADIR%%/themes/elarun/images/system_switch_user.png +%%DATADIR%%/themes/elarun/images/user_icon.png +%%DATADIR%%/themes/elarun/metadata.desktop +%%DATADIR%%/themes/elarun/theme.conf +%%DATADIR%%/themes/maldives/LICENSE +%%DATADIR%%/themes/maldives/Main.qml +%%DATADIR%%/themes/maldives/README +%%DATADIR%%/themes/maldives/angle-down.png +%%DATADIR%%/themes/maldives/background.jpg +%%DATADIR%%/themes/maldives/maldives.jpg +%%DATADIR%%/themes/maldives/metadata.desktop +%%DATADIR%%/themes/maldives/rectangle.png +%%DATADIR%%/themes/maldives/theme.conf +%%DATADIR%%/translations/ar.qm +%%DATADIR%%/translations/ca.qm +%%DATADIR%%/translations/cs.qm +%%DATADIR%%/translations/de.qm +%%DATADIR%%/translations/es.qm +%%DATADIR%%/translations/et.qm +%%DATADIR%%/translations/fi.qm +%%DATADIR%%/translations/fr.qm +%%DATADIR%%/translations/hu.qm +%%DATADIR%%/translations/it.qm +%%DATADIR%%/translations/ja.qm +%%DATADIR%%/translations/ko.qm +%%DATADIR%%/translations/lt.qm +%%DATADIR%%/translations/lv.qm +%%DATADIR%%/translations/nb.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/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/zh_CN.qm +%%DATADIR%%/translations/zh_TW.qm +share/xsessions/xinitrc.desktop