Merge pull request #44820 from michaelpj/fix/redshift-geoclue-agents
redshift/geoclue/localtime: progress in fixing agent confusion
This commit is contained in:
commit
fe51bf322c
@ -4,6 +4,10 @@
|
|||||||
|
|
||||||
with lib;
|
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
|
###### interface
|
||||||
@ -21,21 +25,42 @@ with lib;
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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
|
###### implementation
|
||||||
|
|
||||||
config = mkIf config.services.geoclue2.enable {
|
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" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,14 +22,8 @@ in {
|
|||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
services.geoclue2.enable = true;
|
services.geoclue2.enable = true;
|
||||||
|
|
||||||
security.polkit.extraConfig = ''
|
# so polkit will pick up the rules
|
||||||
polkit.addRule(function(action, subject) {
|
environment.systemPackages = [ pkgs.localtime ];
|
||||||
if (action.id == "org.freedesktop.timedate1.set-timezone"
|
|
||||||
&& subject.user == "localtimed") {
|
|
||||||
return polkit.Result.YES;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
'';
|
|
||||||
|
|
||||||
users.users = [{
|
users.users = [{
|
||||||
name = "localtimed";
|
name = "localtimed";
|
||||||
|
@ -97,6 +97,8 @@ in {
|
|||||||
services.udisks2.enable = true;
|
services.udisks2.enable = true;
|
||||||
services.accounts-daemon.enable = true;
|
services.accounts-daemon.enable = true;
|
||||||
services.geoclue2.enable = mkDefault 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-renderer.enable = mkDefault true;
|
||||||
services.dleyna-server.enable = mkDefault true;
|
services.dleyna-server.enable = mkDefault true;
|
||||||
services.gnome3.at-spi2-core.enable = true;
|
services.gnome3.at-spi2-core.enable = true;
|
||||||
|
@ -116,6 +116,9 @@ in {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# needed so that .desktop files are installed, which geoclue cares about
|
||||||
|
environment.systemPackages = [ cfg.package ];
|
||||||
|
|
||||||
services.geoclue2.enable = mkIf (cfg.provider == "geoclue2") true;
|
services.geoclue2.enable = mkIf (cfg.provider == "geoclue2") true;
|
||||||
|
|
||||||
systemd.user.services.redshift =
|
systemd.user.services.redshift =
|
||||||
|
@ -61,6 +61,15 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
postFixup = "wrapPythonPrograms";
|
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;
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
|
@ -7,17 +7,19 @@ with stdenv.lib;
|
|||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "geoclue-${version}";
|
name = "geoclue-${version}";
|
||||||
version = "2.4.10";
|
version = "2.4.12";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://www.freedesktop.org/software/geoclue/releases/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
|
url = "https://www.freedesktop.org/software/geoclue/releases/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
|
||||||
sha256 = "0h4n8jf7w457sglfdhghkyf8n4v4a5jrx8dgdy5zn35nbscx24l4";
|
sha256 = "1jnad1f3rf8h05sz1lc172jnqdhqdpz76ff6m7i5ss3s0znf5l05";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = [ "out" "dev" "devdoc" ];
|
outputs = [ "out" "dev" "devdoc" ];
|
||||||
|
|
||||||
nativeBuildInputs = [
|
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 = [
|
buildInputs = [
|
||||||
@ -41,11 +43,6 @@ stdenv.mkDerivation rec {
|
|||||||
"--disable-nmea-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; {
|
meta = with stdenv.lib; {
|
||||||
description = "Geolocation framework and some data providers";
|
description = "Geolocation framework and some data providers";
|
||||||
homepage = https://gitlab.freedesktop.org/geoclue/geoclue/wikis/home;
|
homepage = https://gitlab.freedesktop.org/geoclue/geoclue/wikis/home;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user