From da7cada2446c083ebef172a747e68fec877b4ce2 Mon Sep 17 00:00:00 2001 From: h8d13 Date: Wed, 2 Sep 2026 12:49:15 +0200 Subject: [PATCH 1/2] chore(seat): #3467 * no behavior change, simply rename the label from `polkit` => `systemd-logind` Signed-off-by: h8d13 --- archinstall/default_profiles/desktops/hyprland.py | 4 ++-- archinstall/default_profiles/desktops/labwc.py | 6 +++--- archinstall/default_profiles/desktops/niri.py | 6 +++--- archinstall/default_profiles/desktops/sway.py | 6 +++--- archinstall/default_profiles/desktops/utils.py | 10 +++++++++- tests/data/test_config.json | 2 +- tests/test_args.py | 2 +- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 0bf46b96db..398d92667e 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -42,7 +42,7 @@ def default_greeter_type(self) -> GreeterType: @override def services(self) -> list[str]: if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [pref] + return [seat_access_package(pref)] return [] @override diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py index 48fe344e13..013eddb5aa 100644 --- a/archinstall/default_profiles/desktops/labwc.py +++ b/archinstall/default_profiles/desktops/labwc.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -20,7 +20,7 @@ def __init__(self) -> None: def packages(self) -> list[str]: additional = [] if seat := self.custom_settings.get(CustomSetting.SeatAccess, None): - additional = [seat] + additional = [seat_access_package(seat)] return [ 'alacritty', @@ -36,7 +36,7 @@ def default_greeter_type(self) -> GreeterType: @override def services(self) -> list[str]: if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [pref] + return [seat_access_package(pref)] return [] @override diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index d8db75f5da..aef1007504 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -20,7 +20,7 @@ def __init__(self) -> None: def packages(self) -> list[str]: additional = [] if seat := self.custom_settings.get(CustomSetting.SeatAccess, None): - additional = [seat] + additional = [seat_access_package(seat)] return [ 'niri', @@ -44,7 +44,7 @@ def default_greeter_type(self) -> GreeterType: @override def services(self) -> list[str]: if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [pref] + return [seat_access_package(pref)] return [] @override diff --git a/archinstall/default_profiles/desktops/sway.py b/archinstall/default_profiles/desktops/sway.py index 7a038dc0ba..8f3bfac8c5 100644 --- a/archinstall/default_profiles/desktops/sway.py +++ b/archinstall/default_profiles/desktops/sway.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -20,7 +20,7 @@ def __init__(self) -> None: def packages(self) -> list[str]: additional = [] if seat := self.custom_settings.get(CustomSetting.SeatAccess, None): - additional = [seat] + additional = [seat_access_package(seat)] return [ 'sway', @@ -46,7 +46,7 @@ def default_greeter_type(self) -> GreeterType: @override def services(self) -> list[str]: if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [pref] + return [seat_access_package(pref)] return [] @override diff --git a/archinstall/default_profiles/desktops/utils.py b/archinstall/default_profiles/desktops/utils.py index b179ad5061..c25751c7cc 100644 --- a/archinstall/default_profiles/desktops/utils.py +++ b/archinstall/default_profiles/desktops/utils.py @@ -10,7 +10,15 @@ class SeatAccess(Enum): seatd = 'seatd' - polkit = 'polkit' + systemd_logind = 'systemd-logind' + + +# systemd-logind ships with systemd, but Arch builds systemd with polkit +# support so logind hard-depends on polkit for its permission checks +def seat_access_package(seat_access: str) -> str: + if seat_access == SeatAccess.systemd_logind.value: + return 'polkit' + return seat_access def provision_seat_access( diff --git a/tests/data/test_config.json b/tests/data/test_config.json index 618bd8e9c7..03ad618cd3 100644 --- a/tests/data/test_config.json +++ b/tests/data/test_config.json @@ -187,7 +187,7 @@ "profile": { "custom_settings": { "Hyprland": { - "seat_access": "polkit" + "seat_access": "systemd-logind" }, "Sway": { "seat_access": "seatd" diff --git a/tests/test_args.py b/tests/test_args.py index 685c01ff13..d2ee8ad82c 100644 --- a/tests/test_args.py +++ b/tests/test_args.py @@ -177,7 +177,7 @@ def test_config_file_parsing( { 'custom_settings': { 'Hyprland': { - CustomSetting.SeatAccess: 'polkit', + CustomSetting.SeatAccess: 'systemd-logind', }, 'Sway': { CustomSetting.SeatAccess: 'seatd', From 520941a0502caca170756c6a38626d5377c0cbfb Mon Sep 17 00:00:00 2001 From: h8d13 Date: Wed, 2 Sep 2026 13:11:25 +0200 Subject: [PATCH 2/2] chore(parent): `polkit.service` is static and dbus activated, so drop the no-op enable and only enable `seatd` https://wiki.archlinux.org/title/Polkit Signed-off-by: h8d13 --- .../default_profiles/desktops/hyprland.py | 6 ++---- archinstall/default_profiles/desktops/labwc.py | 12 +++--------- archinstall/default_profiles/desktops/niri.py | 12 +++--------- archinstall/default_profiles/desktops/sway.py | 12 +++--------- archinstall/default_profiles/desktops/utils.py | 18 +++++++++++++----- 5 files changed, 24 insertions(+), 36 deletions(-) diff --git a/archinstall/default_profiles/desktops/hyprland.py b/archinstall/default_profiles/desktops/hyprland.py index 398d92667e..f5f2050c9f 100644 --- a/archinstall/default_profiles/desktops/hyprland.py +++ b/archinstall/default_profiles/desktops/hyprland.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_services, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -41,9 +41,7 @@ def default_greeter_type(self) -> GreeterType: @property @override def services(self) -> list[str]: - if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [seat_access_package(pref)] - return [] + return seat_access_services(self.custom_settings.get(CustomSetting.SeatAccess)) @override async def do_on_select(self) -> None: diff --git a/archinstall/default_profiles/desktops/labwc.py b/archinstall/default_profiles/desktops/labwc.py index 013eddb5aa..9eb8f9dcdc 100644 --- a/archinstall/default_profiles/desktops/labwc.py +++ b/archinstall/default_profiles/desktops/labwc.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_packages, seat_access_services, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -18,14 +18,10 @@ def __init__(self) -> None: @property @override def packages(self) -> list[str]: - additional = [] - if seat := self.custom_settings.get(CustomSetting.SeatAccess, None): - additional = [seat_access_package(seat)] - return [ 'alacritty', 'labwc', - ] + additional + ] + seat_access_packages(self.custom_settings.get(CustomSetting.SeatAccess)) @property @override @@ -35,9 +31,7 @@ def default_greeter_type(self) -> GreeterType: @property @override def services(self) -> list[str]: - if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [seat_access_package(pref)] - return [] + return seat_access_services(self.custom_settings.get(CustomSetting.SeatAccess)) @override async def do_on_select(self) -> None: diff --git a/archinstall/default_profiles/desktops/niri.py b/archinstall/default_profiles/desktops/niri.py index aef1007504..27d2f1e6fb 100644 --- a/archinstall/default_profiles/desktops/niri.py +++ b/archinstall/default_profiles/desktops/niri.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_packages, seat_access_services, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -18,10 +18,6 @@ def __init__(self) -> None: @property @override def packages(self) -> list[str]: - additional = [] - if seat := self.custom_settings.get(CustomSetting.SeatAccess, None): - additional = [seat_access_package(seat)] - return [ 'niri', 'alacritty', @@ -33,7 +29,7 @@ def packages(self) -> list[str]: 'swayidle', 'swaylock', 'xdg-desktop-portal-gnome', - ] + additional + ] + seat_access_packages(self.custom_settings.get(CustomSetting.SeatAccess)) @property @override @@ -43,9 +39,7 @@ def default_greeter_type(self) -> GreeterType: @property @override def services(self) -> list[str]: - if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [seat_access_package(pref)] - return [] + return seat_access_services(self.custom_settings.get(CustomSetting.SeatAccess)) @override async def do_on_select(self) -> None: diff --git a/archinstall/default_profiles/desktops/sway.py b/archinstall/default_profiles/desktops/sway.py index 8f3bfac8c5..9b70438902 100644 --- a/archinstall/default_profiles/desktops/sway.py +++ b/archinstall/default_profiles/desktops/sway.py @@ -1,6 +1,6 @@ from typing import override -from archinstall.default_profiles.desktops.utils import seat_access_package, select_seat_access +from archinstall.default_profiles.desktops.utils import seat_access_packages, seat_access_services, select_seat_access from archinstall.default_profiles.profile import CustomSetting, DisplayServerType, GreeterType, Profile, ProfileType @@ -18,10 +18,6 @@ def __init__(self) -> None: @property @override def packages(self) -> list[str]: - additional = [] - if seat := self.custom_settings.get(CustomSetting.SeatAccess, None): - additional = [seat_access_package(seat)] - return [ 'sway', 'swaybg', @@ -35,7 +31,7 @@ def packages(self) -> list[str]: 'pavucontrol', 'foot', 'xorg-xwayland', - ] + additional + ] + seat_access_packages(self.custom_settings.get(CustomSetting.SeatAccess)) @property @override @@ -45,9 +41,7 @@ def default_greeter_type(self) -> GreeterType: @property @override def services(self) -> list[str]: - if pref := self.custom_settings.get(CustomSetting.SeatAccess, None): - return [seat_access_package(pref)] - return [] + return seat_access_services(self.custom_settings.get(CustomSetting.SeatAccess)) @override async def do_on_select(self) -> None: diff --git a/archinstall/default_profiles/desktops/utils.py b/archinstall/default_profiles/desktops/utils.py index c25751c7cc..c52782a960 100644 --- a/archinstall/default_profiles/desktops/utils.py +++ b/archinstall/default_profiles/desktops/utils.py @@ -13,12 +13,20 @@ class SeatAccess(Enum): systemd_logind = 'systemd-logind' -# systemd-logind ships with systemd, but Arch builds systemd with polkit -# support so logind hard-depends on polkit for its permission checks -def seat_access_package(seat_access: str) -> str: +# Arch builds systemd with polkit support, logind depends on it +def seat_access_packages(seat_access: str | None) -> list[str]: + if seat_access == SeatAccess.seatd.value: + return ['seatd'] if seat_access == SeatAccess.systemd_logind.value: - return 'polkit' - return seat_access + return ['polkit'] + return [] + + +# polkit.service is static (dbus activated), only seatd needs enabling +def seat_access_services(seat_access: str | None) -> list[str]: + if seat_access == SeatAccess.seatd.value: + return ['seatd'] + return [] def provision_seat_access(