Due to an influx of spam, we have had to impose restrictions on new accounts. Please see this wiki page for instructions on how to get full permissions. Sorry for the inconvenience.
Creating an issue for tracking jackdbus integration. This is important for pro audio applications, as applications like Cadence+Catia or QJackCtl all run on that library. Is that what pipewire-jack-dropin is meant to be a substitute for, or is that a stopgap measure?
Designs
Child items
0
Show closed items
No child items are currently assigned. Use child items to break down this issue into smaller parts.
The pipewire-jack-dropin AUR package essentially replaces JACK libraries with PipeWire's compatible ones, so that applications using JACK uses PipeWire instead.
jackdbus (jack2-dbus package on Arch) is something that provides D-Bus activation for JACK server. There is no equivalent counterpart for that in PipeWire AFAIK, but you also don't need that if you plan to use PipeWire for JACK. You can just turn it off in QJackCtl.
Cadence isn't very useful with PipeWire, apart from the tools launcher panel.
The pipewire-jack-dropin package is not available to Debian users, which is the majority of pro audio users as Ubuntu Studio and AV Linux are both Debian based. What happens with Pipewire then?
I can see your point about Cadence in Pipewire, but in the JACK world it, and the tools that it brings to the table are all a big deal. Bringing this back around to being on topic though, my question is, is there a plan for implementing jackdbus support within Pipewire or is that a task for individual app developers to retool their apps for Pipewire support?
Pipewire, especially the jack part, is still in development and is not currently used by any distro except for flatpak support. When that happens I assume distros and app developers will update their software to deal with pipewire.
From all the interfaces in jackdbus there isn't a lot of useful things for PW:
JackControl:
Start/stop the JACK server (IMO the main purpose of jackdbus): not useful for PW
get/set xruns, buffersize, load: useful for PW
Configure: this is an abstract tree structure of configuration parameters of variant type.
Most apps like Cadence use hardcoded keys to set parameters here.
PW exposes all ALSA devices, so the option to choose the driver/device doesn't sound useful
Only lets you set driver parameters for the device that Jack considers the main device
Lots of JACK specifics, internals, NetJack1, NetJack2...
JackPatchbay: useful, but currently almost all patchbay apps use libjack instead :D
SessionManager: Deprecated in jack2
Transport: never got implemented in jack2 even though I'd find this quite useful
Don't get me wrong, I would love PW to have its own proper DBus interface that lets me tweak all the things at runtime from my python/javascript/bash script app, but from jackdbus I would only really consider the get/set buffersize/xruns useful and I would rather write a small app that does just that than confuse users by telling them to use Cadence/Qjackctl at 1% of their potential.
(edit1: Oh right, then there's a2jmidid with its own dbus interface, which is popular in the JACK world, but we can ignore that because PW already implements and enables similar functionality out of the box)
edit2: It seems that jackdbus is usually packaged separately from jack2. Maybe that can be made libjack-agnostic so it also works with PipeWire's libjack and doesn't depend on real jack? That would also solve the problem of conflicting org.jackaudio.services!
edit3: ok it requires libjackserver, which isn't fully implemented in PW yet.
I use jacktrip which afaik requires Jackdbus as the runner of the audio sink it shares to network. It’s the only reason I have to keep pw away from jack functions because the pw equivalent hasn’t shown up in patchbays i use to control audio inputs I want network wide.. (I basically have a Sonos-esque setup but with multiple players delivering 24bit rt multi-room audio) I have not quite figured out how to setup an equivalent to the pulseaudio jack sink using the confs and the limited documentation I’ve found didn’t address this specifically so I’m a little lost. What I have been able to enable and implement was exciting though!
I got jackdbus to start with pipwire-jack using libjackserver compiled from !514 (merged). Setting buffer size over D-Bus somehow works, xrun reporting not really, but I didn't have much time to properly test yet. Anyway most jackctl_* calls are still method stubs, but if you're motivated please give it a try :)
The reason for the not working features is that the jackdbus client attaches itself to the dummy driver and so it can change the buffersize, xrun and samplerate of that driver and nothing else.
jackdbus doesn't start with pipewire-0.3.40 for me with the following messages:
Mon Nov 22 11:31:07 2021: JACK server starting in realtime mode with priority 10
Mon Nov 22 11:31:07 2021: self-connect-mode is "Don't restrict self connect requests"
Mon Nov 22 11:31:07 2021: Device reservation request with priority 2147483647 denied for "Audio2": org.freedesktop.DBus.Error.UnknownMethod (Method RequestRelease is not implemented on interface org.freedesktop.ReserveDevice1)
Mon Nov 22 11:31:07 2021: ERROR: Failed to acquire device name : Audio2 error : Method RequestRelease is not implemented on interface org.freedesktop.ReserveDevice1
pipewire is build from the source (I run Gentoo system).
Use flags:
Found these USE flags for media-video/pipewire-0.3.40-r1:
bluetooth : Enable Bluetooth Support
gstreamer : Add support for media-libs/gstreamer (Streaming media)
jack-client : Install a plugin for running PipeWire as a JACK client
systemd : Enable use of systemd-specific libraries and features like
v4l : Enable support for video4linux (using linux-headers or
userspace libv4l libraries)
Definitely not. I'm using jackdbus for smooth integration with desktop. Both pulseaudio and pipewire acquire the sound cards exclusively and jack wants the same. jackdbus worked fine with pulse and earlier pipewire but fails now.
Stopping pipewire.socket and pipewire.service allows jack to start w/o any issue:
17:11:59.483 D-BUS: JACK server is starting...17:11:59.484 D-BUS: JACK server was started (org.jackaudio.service aka jackdbus).Mon Nov 22 17:11:59 2021: Starting jack server...Mon Nov 22 17:11:59 2021: JACK server starting in realtime mode with priority 10Mon Nov 22 17:11:59 2021: self-connect-mode is "Don't restrict self connect requests"Mon Nov 22 17:11:59 2021: Acquired audio card Audio2Mon Nov 22 17:11:59 2021: creating alsa driver ... hw:II23901082,0|hw:II23901082,0|256|2|48000|0|0|nomon|swmeter|-|32bitMon Nov 22 17:11:59 2021: configuring for 48000Hz, period = 256 frames (5.3 ms), buffer = 2 periodsMon Nov 22 17:11:59 2021: ALSA: final selected sample format for capture: 24bit little-endian in 3bytes formatMon Nov 22 17:11:59 2021: ALSA: use 2 periods for captureMon Nov 22 17:11:59 2021: ALSA: final selected sample format for playback: 24bit little-endian in 3bytes formatMon Nov 22 17:11:59 2021: ALSA: use 2 periods for playbackMon Nov 22 17:11:59 2021: scan: added port hw:2,0,0 in-hw-2-0-0-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: added port hw:2,0,1 in-hw-2-0-1-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: added port hw:2,0,2 in-hw-2-0-2-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: added port hw:2,0,0 out-hw-2-0-0-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: added port hw:2,0,1 out-hw-2-0-1-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: added port hw:2,0,2 out-hw-2-0-2-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: opened port hw:2,0,0 in-hw-2-0-0-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: opened port hw:2,0,1 in-hw-2-0-1-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: opened port hw:2,0,2 in-hw-2-0-2-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: opened port hw:2,0,0 out-hw-2-0-0-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: opened port hw:2,0,1 out-hw-2-0-1-Fireface-UFX-II--23901082--PortMon Nov 22 17:11:59 2021: scan: opened port hw:2,0,2 out-hw-2-0-2-Fireface-UFX-II--23901082--Port
@anton.gubarkov This issue is about supporting jackdbus to run on top of PipeWire. What you're trying is to run jackdbus on top of jack alongside PW. This probably requires PW (or its session manager?) to properly react to ALSA device release requests over DBus. If that's not working for you, maybe open a separate issue about it :)
Gentoo PipeWire 0.3.40-r1 means it should be using WirePlumber 0.4.5 which probably has never been tested with the pipewire[jack-client]. It's likely you'd need to disable the ALSA backend from being loaded in WirePlumber.
If I'm not mistaken, pipewire-media-session would have released the device when you pick jack-client (or similar name) as the output device in pavucontrol and then connected to jackd as one of its clients. But I'm not sure how that interacts with jackdbus mediated jackd startup even with the no longer present media-session let alone WirePlumber.
Besides from what I can tell this bug is about making jackdbus run with what Gentoo calls pipewire[jack-sdk] so that JACK tools can do runtime configuration (if I correctly understand the original request).
On Arch Linux jack2-dbus will not be installable with pipewire-jack (with pipewire-jack >= 1:0.3.43-5). This is for the plain reason, that I do not want to burden @falktx with bug reports for unsupported jack implementations in regards to jackdbus.
When looking at the recent split out of jack-example-tools for the purpose of an easier transient solution when switching jack implementations, @wtaymans and @falktx do you think it could be a reasonable way forward to do the same for the dbus support currently living in jack2 (i.e. create jack-dbus as a project, that will support both jack2 and pipewire-jack)?