diff --git a/daemon/src/consolekit.rs b/daemon/src/consolekit.rs index 8e00754..9e138de 100644 --- a/daemon/src/consolekit.rs +++ b/daemon/src/consolekit.rs @@ -174,7 +174,7 @@ impl Session { #[zbus(name = "IsActive")] fn is_active(&self) -> fdo::Result { - self.with_session(|session| session.active == session_core_v1::ActiveState::Active) + self.with_session(is_active) } #[zbus(name = "IsLocal")] @@ -443,14 +443,13 @@ fn append_database(database: &mut String, sessions: &[SessionInfo]) { } fn append_session_group(database: &mut String, session: &SessionInfo, id: &str) { - let is_active = session.active == session_core_v1::ActiveState::Active; let _ = writeln!(database, "[Session {id}]"); let _ = writeln!(database, "uid={}", session.uid); let _ = writeln!(database, "seat={}", key_file_escape(seat_name(session))); let _ = writeln!(database, "type=unspecified"); let _ = writeln!(database, "display_device="); let _ = writeln!(database, "remote_host_name="); - let _ = writeln!(database, "is_active={}", key_file_bool(is_active)); + let _ = writeln!(database, "is_active={}", key_file_bool(is_active(session))); let _ = writeln!(database, "is_local={}", key_file_bool(session.is_local)); let _ = writeln!(database, "XDG_RUNTIME_DIR=/run/user/{}", session.uid); let _ = writeln!( @@ -516,6 +515,13 @@ const fn seat_name(session: &SessionInfo) -> &str { } } +const fn is_active(session: &SessionInfo) -> bool { + matches!( + session.active, + session_core_v1::ActiveState::Active | session_core_v1::ActiveState::Online + ) +} + const fn key_file_bool(value: bool) -> &'static str { if value { "true" } else { "false" } } diff --git a/flake.nix b/flake.nix index a06b05e..ff3c0d3 100644 --- a/flake.nix +++ b/flake.nix @@ -65,7 +65,10 @@ }; packages = forAllSystems (pkgs: { - polkit = pkgs.callPackage ./nix/polkit { }; + polkit = pkgs.callPackage ./nix/polkit { + useConsoleKit = true; + useSystemd = false; + }; sessiond = pkgs.callPackage ./nix/package.nix { rustPlatform = let diff --git a/nix/finix-checks.nix b/nix/finix-checks.nix index 52b9d88..ebc4b7e 100644 --- a/nix/finix-checks.nix +++ b/nix/finix-checks.nix @@ -16,6 +16,10 @@ let inherit sessiondTest; sessiondModule = import (self + "/nix/finix.nix"); sessiondPackage = self.packages.${pkgs.stdenv.hostPlatform.system}.sessiond; + polkitPackage = pkgs.callPackage ./polkit { + useConsoleKit = true; + useSystemd = false; + }; }; checks = prefixAttrs "finix" { diff --git a/nix/package.nix b/nix/package.nix index 5b0ec53..e2873f6 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -43,9 +43,13 @@ rustPlatform.buildRustPackage { installShellFiles ]; - cargoBuildFlags = [ "--workspace" ]; - - cargoFeatures = lib.optionals withConsoleKit [ "consolekit" ]; + cargoBuildFlags = [ + "--workspace" + ] + ++ lib.optionals withConsoleKit [ + "--features" + "daemon/consolekit" + ]; postInstall = '' mkdir -p $out/lib/security @@ -53,6 +57,13 @@ rustPlatform.buildRustPackage { mv $out/bin/daemon $out/bin/sessiond mv $out/bin/ctl $out/bin/sessionctl + installShellCompletion --cmd sessionctl \ + --bash <($out/bin/sessionctl completions bash) \ + --zsh <($out/bin/sessionctl completions zsh) \ + --fish <($out/bin/sessionctl completions fish) \ + --nushell <($out/bin/sessionctl completions nushell) + '' + + lib.optionals withConsoleKit '' mkdir -p $out/share/dbus-1/system.d cat > $out/share/dbus-1/system.d/org.freedesktop.ConsoleKit.conf <<'EOF' EOF - - installShellCompletion --cmd sessionctl \ - --bash <($out/bin/sessionctl completions bash) \ - --zsh <($out/bin/sessionctl completions zsh) \ - --fish <($out/bin/sessionctl completions fish) \ - --nushell <($out/bin/sessionctl completions nushell) ''; meta = { - description = ""; + description = "session and seat management daemon"; homepage = "https://tangled.org/r0chd.pl/sessiond"; license = lib.licenses.gpl3; maintainers = builtins.attrValues { inherit (lib.maintainers) r0chd; }; diff --git a/nix/tests/finix/basic.nix b/nix/tests/finix/basic.nix index 1fe7af6..4037cf6 100644 --- a/nix/tests/finix/basic.nix +++ b/nix/tests/finix/basic.nix @@ -3,6 +3,7 @@ sessiondTest, sessiondModule, sessiondPackage, + ... }: sessiondTest { name = "sessiond-basic-finix"; diff --git a/nix/tests/finix/consolekit.nix b/nix/tests/finix/consolekit.nix index 7161577..8056a64 100644 --- a/nix/tests/finix/consolekit.nix +++ b/nix/tests/finix/consolekit.nix @@ -3,6 +3,7 @@ sessiondTest, sessiondModule, sessiondPackage, + polkitPackage, }: let polkitTestAction = pkgs.writeTextFile { @@ -63,6 +64,7 @@ sessiondTest { services.mdevd.enable = true; services.polkit = { enable = true; + package = polkitPackage; extraConfig = '' polkit.addRule(function(action, subject) { if (