sddm: respect services.xserver.displayManager.defaultSession
This commit is contained in:
parent
60f2a331cc
commit
91812b84b8
4 changed files with 76 additions and 1 deletions
|
@ -280,7 +280,7 @@ in
|
|||
null;
|
||||
example = "gnome";
|
||||
description = ''
|
||||
Graphical session to pre-select in the session chooser (only effective for GDM and LightDM).
|
||||
Graphical session to pre-select in the session chooser (only effective for GDM, LightDM and SDDM).
|
||||
|
||||
On GDM, LightDM and SDDM, it will also be used as a session for auto-login.
|
||||
'';
|
||||
|
|
|
@ -30,6 +30,9 @@ let
|
|||
HaltCommand = "/run/current-system/systemd/bin/systemctl poweroff";
|
||||
RebootCommand = "/run/current-system/systemd/bin/systemctl reboot";
|
||||
Numlock = if cfg.autoNumlock then "on" else "none"; # on, off none
|
||||
|
||||
# Implementation is done via pkgs/applications/display-managers/sddm/sddm-default-session.patch
|
||||
DefaultSession = optionalString (dmcfg.defaultSession != null) "${dmcfg.defaultSession}.desktop";
|
||||
};
|
||||
|
||||
Theme = {
|
||||
|
|
|
@ -19,6 +19,7 @@ in mkDerivation {
|
|||
|
||||
patches = [
|
||||
./sddm-ignore-config-mtime.patch
|
||||
./sddm-default-session.patch
|
||||
# Load `/etc/profile` for `environment.variables` with zsh default shell.
|
||||
# See: https://github.com/sddm/sddm/pull/1382
|
||||
(fetchpatch {
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
diff --git a/src/common/Configuration.h b/src/common/Configuration.h
|
||||
index cf44a62..7bb9c03 100644
|
||||
--- a/src/common/Configuration.h
|
||||
+++ b/src/common/Configuration.h
|
||||
@@ -44,6 +44,7 @@ namespace SDDM {
|
||||
"NOTE: Currently ignored if autologin is enabled."));
|
||||
Entry(InputMethod, QString, QStringLiteral("qtvirtualkeyboard"), _S("Input method module"));
|
||||
Entry(Namespaces, QStringList, QStringList(), _S("Comma-separated list of Linux namespaces for user session to enter"));
|
||||
+ Entry(DefaultSession, QString, QString(), _S("System-wide default session"));
|
||||
// Name Entries (but it's a regular class again)
|
||||
Section(Theme,
|
||||
Entry(ThemeDir, QString, _S(DATA_INSTALL_DIR "/themes"), _S("Theme directory path"));
|
||||
diff --git a/src/greeter/SessionModel.cpp b/src/greeter/SessionModel.cpp
|
||||
index 1953c76..54fe2f2 100644
|
||||
--- a/src/greeter/SessionModel.cpp
|
||||
+++ b/src/greeter/SessionModel.cpp
|
||||
@@ -43,6 +43,7 @@ namespace SDDM {
|
||||
beginResetModel();
|
||||
populate(Session::WaylandSession, mainConfig.Wayland.SessionDir.get());
|
||||
populate(Session::X11Session, mainConfig.X11.SessionDir.get());
|
||||
+ selectDefaultSession();
|
||||
endResetModel();
|
||||
|
||||
// refresh everytime a file is changed, added or removed
|
||||
@@ -52,6 +53,7 @@ namespace SDDM {
|
||||
d->sessions.clear();
|
||||
populate(Session::WaylandSession, mainConfig.Wayland.SessionDir.get());
|
||||
populate(Session::X11Session, mainConfig.X11.SessionDir.get());
|
||||
+ selectDefaultSession();
|
||||
endResetModel();
|
||||
});
|
||||
watcher->addPath(mainConfig.Wayland.SessionDir.get());
|
||||
@@ -149,11 +151,25 @@ namespace SDDM {
|
||||
else
|
||||
delete si;
|
||||
}
|
||||
+ }
|
||||
+
|
||||
+ void SessionModel::selectDefaultSession() {
|
||||
+ d->lastIndex = 0;
|
||||
+
|
||||
// find out index of the last session
|
||||
for (int i = 0; i < d->sessions.size(); ++i) {
|
||||
if (d->sessions.at(i)->fileName() == stateConfig.Last.Session.get()) {
|
||||
d->lastIndex = i;
|
||||
- break;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ // Otherwise, fallback to system-wide default session.
|
||||
+ auto defaultSession = mainConfig.DefaultSession.get();
|
||||
+ for (int i = 0; i < d->sessions.size(); ++i) {
|
||||
+ if (QFileInfo(d->sessions.at(i)->fileName()).fileName() == defaultSession) {
|
||||
+ d->lastIndex = i;
|
||||
+ return;
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/greeter/SessionModel.h b/src/greeter/SessionModel.h
|
||||
index 2e2efa9..a93315c 100644
|
||||
--- a/src/greeter/SessionModel.h
|
||||
+++ b/src/greeter/SessionModel.h
|
||||
@@ -58,6 +58,7 @@ namespace SDDM {
|
||||
SessionModelPrivate *d { nullptr };
|
||||
|
||||
void populate(Session::Type type, const QString &path);
|
||||
+ void selectDefaultSession();
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in a new issue