You are here

Redesigning the QJackCtl interface

Hi Rui!

This is a really long post. Sorry about that! I just felt I have to explain my views a little bit. So:

I'm a happy user of QJackCtl - been several years now. If there is single program that is involved in my every live setup and home recording session, it is QJackCtl.

However, when I have explored deeper and deeper to Linux audio, I have found interesting features from QJackCtl - usually learnt from tutorials scattered around the web. It took me two years to realize that I can save my connections in Patchbay. One year more, and I found the Alsa midi bridging feature. Few years more, and I realized that I can choose my soundcard via it's name in the Interface-box, not only by its id.

Now I think I know QJackCtl:s features quite well, and I'm started to realize how steep the learning curve really is in some parts of the program. I never remember how the preset saving function works in options-screen. It wasn't until last week when I made my first succesful presets. Before that I just ignored whole feature because it was so clumsy to use. I have also found several discussions on the net, where people can't get their soundcard working because they don't know they could press that little right-pointing arrow next to the Interface-selection box and get an easy list of soundcards.

This all led me to thinking about fixing the GUI a little bit. Don't get me wrong: I really like QJackCtl. I just think it could be a little bit easier to use. I'd like to see little changes here and there: not a whole-new-thing someone could call "an unholy mess"...

In my opinion most important dialogs are the "Setup" dialog and "Connections" window. I made few UI mockups and collected a list of my ideas. Here I first explain and then try to justify them. Mockups are attached.


First tab should be Jack settings instead of Settings. This is because the first tab has all the parameters sent to Jack, hasn't it? Other tabs are QJackCtl configuration options, if I've understood correctly. (Options in those other tabs could be grouped better, by the way.)

Interface selection should be changed: by pressing the big down-facing arrow user should get the interface listing that is now opened from little right-pointing arrow. A list of recent device names should reside in that secondary menu, opened from the little arrow. This way, the menu I believe most users most often need, is opened from the most visible and most obvious button.

Most of the settings should be hidden. User could easily access them by pressing Advanced settings button. (QJackCtl should also remember the visibility setting so that experienced users could make advanced options visible once and forget whole thing.) This way the UI could emphasize the most important options. One of the biggest problems when I started using Jack and Linux was that insane amount of options in "Setup" window: all tutorials told me to "try different options to get solid system". It took me long time to realize that only first three or four rows affect overall stability. Of course I'm not sure if my choices are correct. Maybe Priority is more importan than Periods/buffer an so on. There are two mockups of this: advanced options collapsed and opened.

Label reading Midi driver should be Alsa midi bridge instead. And options: Disabled, Show hardware ports and Show all ports. (If possible, the alsa_pcm-sockets in Connections window should be renamed as Alsa midi bridge.) "How I can connect my midi keyboard to Yoshimi? They are placed in different tabs" is one of the most common questions in the forums. I think this option together with the renamed tabs in Connections window will make this whole thing more self-explanatory. I have done mockup of the menu.

Frames/period should maybe have something related to Buffer size in it's tooltip. That way users could maybe better figure out what it does? I'm not sure, but I think in Windows and Mac world many manufacturers have option called "Buffer size" in their utilities?

Audio label could be Audio I/O instead. That way people finding capture/playback -features could more easily find them.

Connections window

Tabs should be labeled as: "Jack audio", "Jack midi" and "Alsa midi". At present few people really know the difference between "MIDI" and "ALSA" tabs. When I first used QJackCtl, I was really confused when my midi keyboard didn't show up in the "MIDI" tab. Clicking "ALSA" didn't seem like reasonable choice beacuse I didn't know Alsa handles also midi. So I closed the whole program because I thought it was broken.

Expand all should change to collapse all when clicked. This is presented in Mockups.

Labels on top of connection field could maybe be a second way round: Output ports / Readable clients and so on. Is the "Readable clients" even necessary? This change isn't so crucial however, because I think everyone understands the present labels as well.

There should be a new button called Save Connections (opens Patchbay window, maybe also does automatically the same as hitting the "New" button in Patchbay Window.) This is not present in my mockups, but I think it's a really important change. That button would immediately open up the purpose of Patchbay window to most of the users.

When clicking single connection line, there could be an option called save this connection. That would also open a patchbay and add connection to the currently active patchbay. (I think this would be more like a whole new feature. Maybe I'll discuss this further in the Patchbay section.)

To be continued...
I have even more ideas regarding the Patchbay and Session windows. However my post is already now so long that maybe it's better to present those ideas later on.

What do you think about these ideas? I'd really like to help you if you decide to realise some of the aforementioned changes.

rncbc's picture

hey, thanks

most of your ideas are really great and many have been sitting in the drawer for a long long time ;)

qjackctl has been here for almost a decade now (it was first released on 2003, can you believe it? you can have a glimpse of its history while touring the official screenshots pages...

well, you can surely attest that qjackctl was a nice tool gone mad, and if you look at the code itself then probably you'll start having recurrent nightmares :) it's just one case of a decade-old lava flow anti-pattern that you'll be staring at :)


re. setup window - advanced settings
this one is really the best and one i've been procrastinating ever since Paul Davis and Stephane Letz once suggested during the LAC2006@ZKM-Karlsruhe IIRC. so it's a go! by all means :)

re. setup window / MIDI bridge settings
what's this? qjackctl doesn't have any midi bridge whatsoever; a2jmidid is currently the only and highly recommended one, which should override the jackd/qjackctl midi driver on most if not all cases; a2jmidid is an external program, not part of jack nor qjackctl. sorry for this one, but nope.

re. connections window - expand/collapse-all button
maybe. however the "expand-all" button is not a toggle one, it's a one-shot command so there's no "expanded-all" true state in any time; the counterpart of it is in fact the "refresh" button, which rebuilds the complete client/port and connections listings and a "colapse-all" button as bonus ;)

re. connections window - tab titles
you're not the first one to ask about this. ok. this one i'll sell you for cheap :)

re. connections window - save button
sounds like a simple and good idea. noted.

that's all for now. keep the good ideas coming :)

I've just summoned the courage (found the time) to read this post in full. There are some great suggestions here and I especially like the idea of rearranging the setup page to highlight the most important settings although I'd like to see a couple of extra changes should qjackctl get a make-over.

I, like most everyone I would presume, maintain the same settings under 'Setup' once I have configured them with one very notable exception - interface selection. I have USB, firewire and of course internal audio devices and several times a day I need to switch between various devices and again I expect I'm not alone in constantly opening Setup just to choose my interface. The OP also mention this interface selection menu as one of the most common questions for new users so I'd like to see the interface selection menu moved from Setup to the main qjackctl window where it rightfully deserves to be.

If Rui agrees with me on that but wants to retain roughly the same layout of the main window as it stands then I would suggest replacing 'About' with the interface selection menu then About can become an option in the context menu of the main window. How often do users need to see the 'about' screen versus picking the device they want to run JACK on? I would then suggest switching the positioning of About (Which would be labelled Devices or Interfaces) with Setup to further make it more central to the main window UI.

The other thing I'd really like to see is some better presets. A default timeout of 500ms is too short when you're loading a session with multiple big plugins so the session fails to loads properly. There is no way to guess such a prob could be caused by the Timeout setting so I'd like to see that default to something more forgiving like 5000ms. Frames/Period would be safer defaulting to 2048 and Periods/buffer set to 3 - these settings seem to be very 'safe' and provide xrun-free operation on most devices, ones that I've tried anyway.

AutoStatic's picture

I only set up my audio interfaces once, create presets of those and load them when I need them. After that, I basically don't use the interfaces selection menu anymore.
The default settings in the Settings windows are JACK's default settings. I'd like them to stay that way. After all, QjackCtl is a Qt frontend for JACK. Or are you referring to presets as in QjackCtl presets? Would it be possible to include other presets in the source? Like an USB preset, a FireWire preset and an internal audio preset?



Hi Jeremy!

If you only need to select your interface once then that means one of two things- you either only use one audio interface with your machine or you don't use any USB audio devices. I have noticed that USB audio devices get enumerated differently pretty much every boot if you have more than one device plugged in and for whatever reason non-audio but USB MIDI devices such as MIDI controllers get involved in this enumeration so I personally use qjackctl's interface selection option as much as I do Start and Stop.

My suggestion about the other settings is up for debate and I'm not so concerned about those but I'd like to hear what Rui and others think of highlighting the interface selector by making it available on the main window. I expect anyone who makes frequent use of external audio devices with JACK will think this makes good sense.

AutoStatic's picture

Hello Dan,

I'm using different audio interfaces and also USB devices. When it comes to USB devices the hardware enumeration doesn't matter in my case, I don't use it but use the ALSA device name instead and that doesn't change through booting. My Edirol UA-25 for instance has ALSA device name UA25 so I enter hw:UA25 in the Interfaces field, I then adjust some other settings and store it as a QjackCtl preset. Same for my onboard card, in the interfaces field I put hw:Intel and store it as a different preset. FireWire doesn't use ALSA so FireWire audio cards don't get an ALSA device name but I'm only using a single FireWire device at a time so it always gets the same FFADO designation and I can leave the Interfaces field to its default. Another advantage of using QjackCtl presets is that you can start up QjackCtl from the cli with a preset. So I have a script running that detects if my USB or FireWire card is attached and then starts the respective QjackCtl preset, or if none is present QjackCtl starts up with the Onboard preset. So in my opinion it would be a better idea to move the Preset Name field to the main window and not the Interfaces field.


Hello Dan and AutoStatic!

I think your posts highlight two problems in QJackCtl.

  1. When you select interface from interface menu, QJackCtl identifies it by hardware enumeration, not by Alsa device name.
  2. Presets are a little bit hard to use

Solution to first problem is obvious: someone should change the code so that when you select an interface from Interface menu, it automatically gets identified by Alsa device name. I think this is possible, but requires some work. I haven't had time (yet) to check how QJackCtl really works in code level, so I don't know how big job this would be.

Second problem needs more pondering. How presets could be easier?
This is how the Pulse audio settings windows looks in Ubuntu:
Could there be a clearly visible area for different presets like there is area for different soundcards in Ubuntu sound settings window? Could there be Mac-like easy "+" and "-" -buttons for adding and removing presets? That way the whole clumsy saving process would be gone...

I've attached a quick mockup about this idea:

In the mockup I've also changed the Jack midi bridge -feature a little :) I know a2jmidid, but always when I try to use it, it crashes after few hours. jackd's own midi driver has always worked without problems for me. However, now the mockup includes a little text that tells you a2jmidid takes care of the midi bridging :D This is the way it should work in my opinion. a2jmidid has Dbus interface, so this could be possible.

I'm not familiar with QJackCtl codebase, but if I'm the only one interested implementing these, maybe I should find time some day to do this :D

rncbc's picture

re. QJackCtl identifies it by hardware enumeration, not by Alsa device name.
somehow, this has been already addressed on current svn trunk rev.738+ aka. qjackctl


Really? That's wonderful! This change will make setup a lot easier for beginners!


Tonight I had lot of fun with QjackCtl, Guitarix, Jack Audio server, my Guitar, Rocksmith tone Cable and Audacity.

Well, when working with Jack, i also thought things could be lot easier. Like the starter of this topic said.

I agree with the Interface selection: when you click on the pull down menu, you see the ALSA enumeration. But when clicking on the ">" arrow, you see the connected devices by name AND enumeration. Lots easier indeed. When starting for the first time, it cost me several minutes, before finding my Rocksmith Tone Cable Sound Card.

Second; nice that some people could program some nice scripts to start-up certain presets, but most musicians aren't programmers right? Long time ago I was a Commodore 64 programmer but programming languages has evolved a lot since then and I can't keep up anymore. My daily work is not in computer business. So why not post a link within JackCtl to much used scripts? And a "Advanced" button for people who want to make their own scripts.

Then, the connections window. The first time I started it, I couldn't find any logic behind it. I read System, Pulse audio, and Guitarix Fx/Amp. And in the drop down menu below System a Microphone icon or 6 speaker icons.

Microphone? I was connected with my USB guitar cable isn't it? Why the Microphone then? Did i have to connect only in the Mic IN?

After a few minutes I discovered that System represents the Input and output Source you selected in The Settings tab. It could be a lot easier when System is replaced by Input source name and Output Source name. However, graphically connecting the audio sources with lines is very logical and essential and I like it to keep it that way. It represents a very logical flow, although you have sometimes much lines, when using more programs and/or connections.

The rest of QJackCtl works fine, I haven't used the MIDI options, because I don't have MIDI instruments, except for the build in MIDI synthesizer.

Maybe the devs can do something usefull with this feedback :) I like the open source philosophy :)

Add new comment