From 00972dc89ce01a025efe3e33b116b4722fc4ce4b Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Thu, 9 May 2019 19:04:34 +0300 Subject: [PATCH] nixos/gdm: use Fedora's PulseAudio configuration This is needed to avoid GDM PulseAudio instance acting as a network source/sink or grabing the A2DP bluetooth sink making A2DP unusable for any other user. In the future having this fixed in PulseAudio would be preferred [0]. Current possible upstream fix could be [1]. [0]: https://github.com/NixOS/nixpkgs/pull/61746#issuecomment-493956980 [1]: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/merge_requests/10 --- .../services/x11/display-managers/gdm.nix | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/nixos/modules/services/x11/display-managers/gdm.nix b/nixos/modules/services/x11/display-managers/gdm.nix index 3edf7c8d9ca..ff4b91923e0 100644 --- a/nixos/modules/services/x11/display-managers/gdm.nix +++ b/nixos/modules/services/x11/display-managers/gdm.nix @@ -14,6 +14,23 @@ let exec "$@" ''; + # Solves problems like: + # https://wiki.archlinux.org/index.php/Talk:Bluetooth_headset#GDMs_pulseaudio_instance_captures_bluetooth_headset + # Instead of blacklisting plugins, we use Fedora's PulseAudio configuration for GDM: + # https://src.fedoraproject.org/rpms/gdm/blob/master/f/default.pa-for-gdm + pulseConfig = pkgs.writeText "default.pa" '' + load-module module-device-restore + load-module module-card-restore + load-module module-udev-detect + load-module module-native-protocol-unix + load-module module-default-device-restore + load-module module-rescue-streams + load-module module-always-sink + load-module module-intended-roles + load-module module-suspend-on-idle + load-module module-position-event-sounds + ''; + in { @@ -126,6 +143,11 @@ in GDM_X_SESSION_WRAPPER = "${xSessionWrapper}"; }; execCmd = "exec ${gdm}/bin/gdm"; + preStart = optionalString config.hardware.pulseaudio.enable '' + mkdir -p /run/gdm/.config/pulse + ln -sf ${pulseConfig} /run/gdm/.config/pulse/default.pa + chown -R gdm:gdm /run/gdm/.config + ''; }; # Because sd_login_monitor_new requires /run/systemd/machines