Launch pavucontrol as PA's control app
authorRobin Gareus <robin@gareus.org>
Fri, 26 Jul 2019 02:43:56 +0000 (04:43 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 26 Jul 2019 02:43:56 +0000 (04:43 +0200)
libs/backends/pulseaudio/pulseaudio_backend.cc
libs/backends/pulseaudio/pulseaudio_backend.h

index feb51e82901151bb208aaf739f164462b6e1aca6..f1923b1097778c5c04cde8bf3e9d7b4f1411eb6e 100644 (file)
 #include <stdlib.h>
 #include <sys/mman.h>
 #include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
 
 #include <glibmm.h>
 
 #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*
index d4eccf2bad5222a1ee786f812ca0aaadf533abfe..a886603274021ad2946f78136697520a215787bf 100644 (file)
@@ -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<std::string>  enumerate_midi_options () const;