summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/harddrake/sound.pm73
1 files changed, 46 insertions, 27 deletions
diff --git a/perl-install/harddrake/sound.pm b/perl-install/harddrake/sound.pm
index aed60e119..7801bf8c8 100644
--- a/perl-install/harddrake/sound.pm
+++ b/perl-install/harddrake/sound.pm
@@ -1,15 +1,5 @@
package harddrake::sound;
-# 2023-03-18 ghibo: cleanup against perl_checker
-# 2023-03-18 anaselli: add reboot requester
-# 2023-03-17 ghibo: stop also wireplumber in disable_all_pipewire
-# 2023-03-17 ghibo: stop pulseaudio with the running user
-# 2023-03-17 anaselli: suspend pipewire before configuring pulseaudio
-# 2023-03-13 ghibo: added {start|stop}_{pipewire,wireplumber,pipewire-media-session}(), _pidof_pid(); _user_pid()
-# 2023-03-13 ghibo: use rooted_get_stdout instead of get_stdout
-# 2023-03-11 Angelo Naselli: added pipewire support
-#
-#
# TODO:
# o ensure sound is not user (either dsp/midi/sequencer/mixer)
# o fix sound/alsa services
@@ -22,9 +12,10 @@ use list_modules;
use detect_devices;
use log;
-sub is_pulseaudio_enabled() {
+sub is_pulseaudio_enabled {
+ my ($in) = @_;
my $soundprofile = common::read_alternative('soundprofile');
- $soundprofile =~ /pulse$/;
+ return $in->do_pkgs->is_installed('task-pulseaudio') && ($soundprofile =~ /pulse$/);
}
sub set_pulseaudio {
@@ -71,6 +62,16 @@ sub set_pulseaudio_glitchfree {
} $pa_startup_scriptfile;
}
+sub is_pipewire_wireplumber_enabled {
+ my ($in) = @_;
+ return $in->do_pkgs->is_installed('pipewire') && $in->do_pkgs->is_installed('wireplumber');
+}
+
+sub is_pipewire_media_session_enabled {
+ my ($in) = @_;
+ return $in->do_pkgs->is_installed('pipewire') && $in->do_pkgs->is_installed('pipewire-media-session');
+}
+
sub rooted {
run_program::rooted($::prefix, @_);
}
@@ -441,8 +442,7 @@ sub config {
push @alternative, $driver;
my %des = modules::category2modules_and_description('multimedia/sound');
- my $is_pulseaudio_installed = -f $pa_startup_scriptfile && -d $::prefix . '/etc/sound/profiles/pulse';
- my $is_pulseaudio_enabled_val = is_pulseaudio_enabled();
+ my $is_pulseaudio_enabled_val = is_pulseaudio_enabled($in);
my $is_pulseaudio_glitchfree_enabled_val = is_pulseaudio_glitchfree_enabled();
my $audiosystem = 'None';
@@ -450,9 +450,9 @@ sub config {
$audiosystem = 'PulseAudioGF';
} elsif ($is_pulseaudio_enabled_val) {
$audiosystem = 'PulseAudio';
- } elsif (_pidof('/usr/bin/wireplumber')) {
+ } elsif (is_pipewire_wireplumber_enabled($in) || _pidof('/usr/bin/wireplumber')) {
$audiosystem = 'PipeWireWP';
- } elsif (_pidof('/usr/bin/pipewire-media-session')) {
+ } elsif (is_pipewire_media_session_enabled($in) || _pidof('/usr/bin/pipewire-media-session')) {
$audiosystem = 'PipeWireMS';
}
@@ -490,10 +490,28 @@ sub config {
#TODO Error here
}
- $in->ask_warn('', N("You need to reboot for changes to take effect"));
+ $in->ask_warn('', N("You need to reboot for changes to take effect")) if $::isStandalone;
};
+ my $warn_both = ($in->do_pkgs->is_installed('pipewire') && $in->do_pkgs->is_installed('pulseaudio')) ?
+ N("WARNING both pulseaudio and pipewire are installed, please fix configuration applying your choice") :
+ "";
+
+ my $is_pipewire_available = $in->do_pkgs->is_available('task-pipewire');
+ my $warn_pipewire_unavailable = (not $is_pipewire_available) ?
+ N("Warning: task-pipewire is not available on any media sources, so pipewire cannot be set up. Plese fix your repo configuration.") :
+ "";
+
+ my @service_list = (
+ 'None',
+ 'PulseAudio',
+ 'PulseAudioGF',
+ );
+ if ($is_pipewire_available) {
+ push @service_list, 'PipeWireWP';
+ push @service_list, 'PipeWireMS';
+ }
my @common = (
{
label => N("Select the sound server"),
@@ -501,13 +519,7 @@ sub config {
},
{
val => \$audiosystem,
- list => [
- 'None',
- 'PulseAudio',
- 'PulseAudioGF',
- 'PipeWireWP',
- 'PipeWireMS',
- ],
+ list => \@service_list,
format => sub {
my ($choice) = @_;
+{
@@ -531,6 +543,15 @@ sub config {
},
);
+ my @messages = ( "<b><i>" . $device->{description} . "</i></b>",
+ N("Your card uses the <b>\"%s\"</b> driver\n", $driver) );
+
+ if ($warn_both) {
+ push @messages, ("<b>" . $warn_both . "</b>") ;
+ }
+ if (not $is_pipewire_available) {
+ push @messages, "<b>" . $warn_pipewire_unavailable . "</b>" ;
+ }
if ($driver eq 'unknown') {
if ($in->ask_from_({
title => N("No alternative driver"),
@@ -543,9 +564,7 @@ sub config {
}
} elsif ($in->ask_from_({ title => N("Sound configuration"),
interactive_help_id => 'soundConfig',
- messages =>
- "<b><i>" . $device->{description} . "</i></b>" .
- "\n\n" . N("Your card uses the <b>\"%s\"</b> driver\n", $driver),
+ messages => \@messages
},
\@common,
))