[HowTo] Make an Improvised GUI for Common Pipewire Settings in XFCE

Hi, I’m a musician and do a all my recording and production in linux, and with my recent adoption of Pipewire, I’ve found it a little odd that there’s not a GUI for system-wide functions (yes I know you can control things through jack applications however I’m trying to avoid having to use Qtjackctrl or Cadence).

Often times while working on projects, due to system loads or project file needs, we often need to quickly set system wide sample rates or buffer sizes (lower buffer sizes for direct software monitoring, and higher buffers for mixing or mastering high track counts and plugin loads for example).

While it’s kind of obvious, I figured I’d share the launcher I made that is almost exactly what I’d expect from a real GUI system tray utility for Pipewire.

Screenshot_2021-12-10_17-15-42

I’ve zipped a version of the folder that the panel creates and uploaded it to IPFS for sharing:
https://ipfs.io/ipfs/QmUQ6pXU6VKKPoxEwKuikxDbAQMxa2uE5Uff7twquyh9vt?filename=xfcepipewirecontrolgui.zip

steps to install (and if you have an easier way of doing this feel free to chime in):

  1. Download the zip file, unzip it somewhere…
  2. In your Home folder find /.config/xfce4/panel/ (keep this folder open for now)
  3. Create a new panel launcher (you can add something to it as it might help find it later)
  4. Go back to the /.config/xfce4/panel/ and find the folder for the launcher you just made
  5. Copy and Paste the contents of the zip file from earlier into that folder.
  6. You’ll probably need to go into the XFCE panel edit to order the different items to make sense for your layout and taste.
  7. All the launchers commands are pretty straight forward and I referenced the pipewire wiki for them.

anyway, if anyone has anything to add to this idea of doing this please let me know! I think it’d be cool if there was just a simple application people could install that’d add this kind of thing to the system tray, it’d be really usefull, and maybe add a hover function that’d show the current output of pw-top for like the active audio sources.

Here’s a reference to where I’m getting the commands from:
https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#setting-buffer-size

1 Like

You can put these into zenity widgets or jgmenu (and set it to look like app launcher), depends on what you prefer, so it can be used in other DEs. However, I can tweak my existing project and improve it with new options when I learn more about C and GTK. Labels and buttons should be enough for now. Maybe adding some frames for better look will be a good idea.

bla-bla-blah

Looks really promising. I’m going to look into zenity widgets and jgmenu now.

What would be icing on the cake would be like a notched slider (see ASIO4ALL on windows for example for ASIO drivers) where like each notch would be just setting a different Pipewire command set. Like one for sample rate, and one for buffer size.

Maybe an ouput for summed ERR from pw-top (buffer underruns) for system performance tuning. Often within the audio world we’re constantly balancing the goal of low-latency, while keeping errors to a minimum to avoid input recording errors.

Thanks for your work, Pipewire is really great for the linux ecosystem and a few simple utilities like this would help people benefit more from it.

While it’s cool pulse and jack apps still essentially can control aspects of it, doing it directly from one place needs to happen in straight-forward GUI way because it shouldn’t be all that difficult.

@Ste74 is good at whipping up Yad GUI’s. :grin:

Would there be like a way to package a self-contained preset of jgmenu, or even a launcher that could be like a install script through for AUR for example?

For example, a shell script that’d ad a panel or dialog with the appropriate commands already setup and ready to go?

as far as I know Pipewire commands don’t need sudo privileges or anything like and they’re pretty much system agnostic for the most part as they’re pretty generic commands for setting buffer and sample rates.

I think it’d be really cool to be able to just have a optional package that sets this up all in one click or install. If anything it’d be easier to reproduce across systems, instead of my ghetto copy/paste method.

I checked out zenity, but it seems like something that’d probably best if there was like a preset that could be used for stuff like this, I mean we couldn’t expect every studio to manual configure these things everytime.

Thanks for all the tips, please feel free to post any other ideas. It’d be cool if the manjaro community managed to provide the tools for doing pipewire settings gui before the actual project does. Feels like Cadence or something would eventually make a Pipewire client, that’d be cool.

I started to track down the exact syntax yesterday while away from my linux machines (:sob:)
I still am … but maybe these resources will help:

https://forum.xfce.org/viewtopic.php?id=8619
https://forum.xfce.org/viewtopic.php?id=14731
http://manpages.org/xfce4-panel

At the moment, I’m learning list boxes (same as in pamac) and model lists. Appending widgets into window is pretty easy, however, make them working is other thing :grin:

I think when I have something looking fancy and semi working, I’ll make a separate topic and ping you.

To this point, I can help with jgmenu and zenity. jgmenu will be much easier to make, but to this day I didn’t figure out how to add translation support which is not just replacing lines. If you like, you can use tools from my project repo and tweak them to your needs. For now only few have translation support but all use config files and pretty much works like apps. In rb-night-light.sh you’ll find slider widgets I use for redshift one shot mode.

Btw check out csv_single_window in jgmenu. If you add ^root() and tag, jgmenu will open submenu in the same window.

...
Screenshots,^root(screen_shots)
...
Screenshots,^tag(screen_shots)
^sep(Desktop)
Now,xfce4-screenshooter -fd 1
After 5 seconds,xfce4-screenshooter -fd 5
After 10 seconds,xfce4-screenshooter -fd 10
^sep(Window)
Now,xfce4-screenshooter -wd 1
After 5 seconds,xfce4-screenshooter -wd 5
After 10 seconds,xfce4-screenshooter -wd 10
^sep(Region)
Capture a Region,xfce4-screenshooter -r
^sep()
Back,^back()

Here you can find my side menu/panel configs

Thanks for all the tips, and you guys got some cool ideas here!

1 Like