Merge pull request #44820 from michaelpj/fix/redshift-geoclue-agents

redshift/geoclue/localtime: progress in fixing agent confusion

Changed files
+51 -21
nixos
modules
services
desktops
system
x11
desktop-managers
pkgs
applications
misc
redshift
development
libraries
geoclue
+30 -5
nixos/modules/services/desktops/geoclue2.nix
···
with lib;
+
let
+
# the demo agent isn't built by default, but we need it here
+
package = pkgs.geoclue2.override { withDemoAgent = config.services.geoclue2.enableDemoAgent; };
+
in
{
###### interface
···
'';
};
+
enableDemoAgent = mkOption {
+
type = types.bool;
+
default = true;
+
description = ''
+
Whether to use the GeoClue demo agent. This should be
+
overridden by desktop environments that provide their own
+
agent.
+
'';
+
};
+
};
};
###### implementation
-
config = mkIf config.services.geoclue2.enable {
-
environment.systemPackages = [ pkgs.geoclue2 ];
+
environment.systemPackages = [ package ];
-
services.dbus.packages = [ pkgs.geoclue2 ];
+
services.dbus.packages = [ package ];
-
systemd.packages = [ pkgs.geoclue2 ];
-
+
systemd.packages = [ package ];
+
+
# this needs to run as a user service, since it's associated with the
+
# user who is making the requests
+
systemd.user.services = mkIf config.services.geoclue2.enableDemoAgent {
+
"geoclue-agent" = {
+
description = "Geoclue agent";
+
script = "${package}/libexec/geoclue-2.0/demos/agent";
+
# this should really be `partOf = [ "geoclue.service" ]`, but
+
# we can't be part of a system service, and the agent should
+
# be okay with the main service coming and going
+
wantedBy = [ "default.target" ];
+
};
+
};
};
}
+2 -8
nixos/modules/services/system/localtime.nix
···
config = mkIf cfg.enable {
services.geoclue2.enable = true;
-
security.polkit.extraConfig = ''
-
polkit.addRule(function(action, subject) {
-
if (action.id == "org.freedesktop.timedate1.set-timezone"
-
&& subject.user == "localtimed") {
-
return polkit.Result.YES;
-
}
-
});
-
'';
+
# so polkit will pick up the rules
+
environment.systemPackages = [ pkgs.localtime ];
users.users = [{
name = "localtimed";
+2
nixos/modules/services/x11/desktop-managers/gnome3.nix
···
services.udisks2.enable = true;
services.accounts-daemon.enable = true;
services.geoclue2.enable = mkDefault true;
+
# GNOME should have its own geoclue agent
+
services.geoclue2.enableDemoAgent = false;
services.dleyna-renderer.enable = mkDefault true;
services.dleyna-server.enable = mkDefault true;
services.gnome3.at-spi2-core.enable = true;
+3
nixos/modules/services/x11/redshift.nix
···
}
];
+
# needed so that .desktop files are installed, which geoclue cares about
+
environment.systemPackages = [ cfg.package ];
+
services.geoclue2.enable = mkIf (cfg.provider == "geoclue2") true;
systemd.user.services.redshift =
+9
pkgs/applications/misc/redshift/default.nix
···
postFixup = "wrapPythonPrograms";
+
# the geoclue agent may inspect these paths and expect them to be
+
# valid without having the correct $PATH set
+
postInstall = ''
+
substituteInPlace $out/share/applications/redshift.desktop \
+
--replace 'Exec=redshift' "Exec=$out/bin/redshift"
+
substituteInPlace $out/share/applications/redshift.desktop \
+
--replace 'Exec=redshift-gtk' "Exec=$out/bin/redshift-gtk"
+
'';
+
enableParallelBuilding = true;
meta = with stdenv.lib; {
+5 -8
pkgs/development/libraries/geoclue/default.nix
···
stdenv.mkDerivation rec {
name = "geoclue-${version}";
-
version = "2.4.10";
+
version = "2.4.12";
src = fetchurl {
url = "https://www.freedesktop.org/software/geoclue/releases/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
-
sha256 = "0h4n8jf7w457sglfdhghkyf8n4v4a5jrx8dgdy5zn35nbscx24l4";
+
sha256 = "1jnad1f3rf8h05sz1lc172jnqdhqdpz76ff6m7i5ss3s0znf5l05";
};
outputs = [ "out" "dev" "devdoc" ];
nativeBuildInputs = [
-
pkgconfig intltool gtk-doc docbook_xsl docbook_xml_dtd_412 wrapGAppsHook gobjectIntrospection
+
pkgconfig intltool wrapGAppsHook gobjectIntrospection
+
# devdoc
+
gtk-doc docbook_xsl docbook_xml_dtd_412
];
buildInputs = [
···
"--disable-modem-gps-source"
"--disable-nmea-source"
];
-
-
# https://gitlab.freedesktop.org/geoclue/geoclue/issues/73
-
postInstall = ''
-
sed -i $dev/lib/pkgconfig/libgeoclue-2.0.pc -e "s|includedir=.*|includedir=$dev/include|"
-
'';
meta = with stdenv.lib; {
description = "Geolocation framework and some data providers";