Ticket #114 (new enhancement)

Opened 3 years ago

Last modified 13 months ago

support for multiclient jack apps

Reported by: https://www.google.com/accounts/o8/id?id=aitoawkp6btez8xrfz0l1s9ul7objyn1tk3oaq4 Owned by: -
Priority: critical Milestone: 2
Keywords: Cc: itarozzi@…

Description

When I run an applications in gladish (f2) that consists of 2 jack module, only first is showed.

I use new guitarix interface (gx_head) that call 2 time the creation of a jack client module (gx_head_amp and gx_head_fx) but only amp is showed.

If I run gx_head outside gladish, then all 2 modules are showed

Change History

Changed 3 years ago by https://www.google.com/accounts/o8/id?id=aitoawkp6btez8xrfz0l1s9ul7objyn1tk3oaq4

  • cc itarozzi@… added

Changed 3 years ago by https://www.google.com/accounts/o8/id?id=aitoawkp6btez8xrfz0l1s9ul7objyn1tk3oaq4

  • milestone changed from undecided to 0.3 (preview 3)

Changed 3 years ago by http://nedko.arnaudov.name/

  • milestone changed from 0.3 (preview 3) to undecided

What is the version of guitarix that you use?

Changed 3 years ago by http://nedko.arnaudov.name/

In order to support apps that create multiple clients, ladish needs to know the name that the app originally requested. JACK server can change the name if client with requested name already exists. This however makes connection restore problematic, because the session manager needs to identify clients. Currently ladish identifies jack clients by pid and this works for single client apps but does not for apps with multiple clients.

The best solution will be to add new function to the JACK client API, jack_get_original_client_name(). I proposed this addition, but my request was essentially ignored:

 http://old.nabble.com/Re%3A-session-management-API-proposal%2C-take-3-p27727578.html

One workaround would be to LD_PRELOAD libjack.so and preserve the originally requested client name.

Other workaround would be to allow ladish to use the real jack client name(s) instead of app name. This will work as long as JACK client name does not get into the mix, i.e. when there is only one instance of the app that creates multiple clients.

LASH is not designed to support apps with multiple clients. It is not clear how jack-session is supposed to handle apps with multiple clients.

Changed 3 years ago by http://nedko.arnaudov.name/

After discussion with Torben, I got that jack-session is supposed to handle apps with multiple clients: apps explicitly request uuids for created clients by calling jack_get_uuid_for_client_name() from the session callback. He also thinks that it almost never makes sense to have app with more than one client.

Changed 3 years ago by http://nedko.arnaudov.name/

So when ladish gets support for jack-session, guitarix (and any other jack-session-able app) will/should work with ladish. Until then and for other apps, one of the workarounds have to be implemented.

Changed 2 years ago by http://nedko.arnaudov.name/

Dakylla reported in duplicate ticket #155:

the gladish canvas does not show the extra ports created by clients creating multiports (eg : linuxsampler)

to reproduce :
1. created a studio
2. add a new application (linuxsampler)
3. create some ports with linuxsampler's gui (jsampler/qsampler)
4.see?? no extra ports appears, only the first one

patchage display the ports with no problem

Changed 2 years ago by http://nedko.arnaudov.name/

for linuxsampler instead of creating another jack output client you can increase the number of ports for the existing one.

Changed 2 years ago by http://nedko.arnaudov.name/

  • type changed from defect to enhancement
  • summary changed from 2-modules applications problem in gladish to support for multiclient jack apps

Changed 2 years ago by http://nedko.arnaudov.name/

  • milestone changed from undecided to 0.4 (preview 4)

Changed 2 years ago by http://nedko.arnaudov.name/

  • priority changed from major to critical

Changed 17 months ago by http://nedko.arnaudov.name/

  • milestone changed from 0.4 (preview 4) to 2

Changed 17 months ago by http://orlammd.pip.verisignlabs.com/

A user-side workaround can be achieved using bash scripts, so that the program parent process exits, then ladish will not detect it when it creates its client. Still, the connexions will remain.
Below is a (really simple) bash script example to run non-mixer:

[code]
#!/bin/bash
sh -c "(sleep 3; non-mixer $1)&"&
read
/code
(what is important is that non-mixer is ran in a new shell).

In Ladish, the application just has to run that bash script (with potential arguments).

Changed 13 months ago by https://www.google.com/accounts/o8/id?id=aitoawl2vna97sjfhdi4zgij8ycumnun7plpcow

+1 I'm using QSynth and when more than 1 engine is used, the same problem exists.

Note: See TracTickets for help on using tickets.