diff --git a/libs/backends/pulseaudio/pulseaudio_backend.cc b/libs/backends/pulseaudio/pulseaudio_backend.cc index feb51e8290..f1923b1097 100644 --- a/libs/backends/pulseaudio/pulseaudio_backend.cc +++ b/libs/backends/pulseaudio/pulseaudio_backend.cc @@ -22,11 +22,14 @@ #include #include #include +#include +#include #include #include "pbd/compose.h" #include "pbd/error.h" +#include "pbd/file_utils.h" #include "pbd/pthread_utils.h" #include "ardour/port_manager.h" @@ -521,6 +524,30 @@ PulseAudioBackend::midi_option () const return get_standard_device_name (DeviceNone); } +/* External control app */ +std::string +PulseAudioBackend::control_app_name () const +{ + std::string ignored; + if (PBD::find_file (PBD::Searchpath (Glib::getenv("PATH")), X_("pavucontrol"), ignored)) { + return "pavucontrol"; + } + return ""; +} + +void +PulseAudioBackend::launch_control_app () +{ +#ifdef NO_VFORK + (void) system ("pavucontrol"); +#else + if (::vfork () == 0) { + ::execlp ("pavucontrol", "pavucontrol", (char*)NULL); + exit (EXIT_SUCCESS); + } +#endif +} + /* State Control */ static void* diff --git a/libs/backends/pulseaudio/pulseaudio_backend.h b/libs/backends/pulseaudio/pulseaudio_backend.h index d4eccf2bad..a886603274 100644 --- a/libs/backends/pulseaudio/pulseaudio_backend.h +++ b/libs/backends/pulseaudio/pulseaudio_backend.h @@ -202,8 +202,8 @@ public: uint32_t systemic_midi_output_latency (std::string const) const { return 0; } /* External control app */ - std::string control_app_name () const { return std::string (); } - void launch_control_app () { } + std::string control_app_name () const; + void launch_control_app (); /* MIDI */ std::vector enumerate_midi_options () const;