4 <meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8">
5 <meta name=
"generator" content=
"AsciiDoc 10.2.0">
6 <title>(LADI) jackdbus
</title>
7 <style type=
"text/css">
9 * AsciiDoc 'ladi' theme, based on 'volnitsky' theme for xhtml11 and html5 backends.
10 * Based on css from http://volnitsky.com, which was in turn based on default
13 * FIXME: The styling is still a bit rough in places.
19 font-family: Georgia
,"Times New Roman",Times
,serif
;
24 h1
, h2
, h3
, h4
, h5
, h6
,
25 div
.title
, caption
.title
,
26 thead
, p
.table
.header
,
28 #author, #revnumber
, #revdate
, #revremark
,
30 font-family: Candara
,Arial
,sans-serif
;
33 a
.image
{ border-bottom: 0; }
36 border-bottom: 1px dotted
#999999;
37 color: #3A3A4D !important
;
38 text-decoration: none
!important
;
41 border-bottom: 1px solid
#6D4100;
42 color: #6D4100 !important
;
43 text-decoration: none
!important
;
45 a
{ color: #666688; text-decoration: none
; border-bottom: 1px dotted
#666688; }
46 a:visited
{ color: #615FA0; border-bottom: 1px dotted
#615FA0; }
47 a:hover
{ color: #6D4100; border-bottom: 1px solid
#6D4100; }
59 h1
, h2
, h3
, h4
, h5
, h6
{
64 letter-spacing:+0.15em;
67 h1
, h2
, h3
, h4
, h5
, h6
{
71 /* h1 { margin-left: 2em; } */
72 h2
{ margin-left: 2em; }
73 /* h3 { margin-left: 4em; } */
74 /* h4 { margin-left: 5em; } */
75 /* h5 { margin-left: 6em; } */
76 /* h6 { margin-left: 7em; } */
78 h2
{ border-bottom: 4px solid
#ccd; }
79 h3
{ border-bottom: 2px dotted
#ccd; }
80 /* h2, h3 { border-bottom: 2px solid #ccd; } */
81 /* h2 { padding-top: 0.5em; } */
82 /* h3 { float: left; } */
83 /* h3 + * { clear: left; } */
101 border: 1px solid
#444466;
108 margin-bottom: 0.5em;
128 border-top: 2px solid silver
;
145 margin-bottom: 1.5em;
148 div
.tableblock
, div
.imageblock
, div
.exampleblock
, div
.verseblock
,
149 div
.quoteblock
, div
.literalblock
, div
.listingblock
, div
.sidebarblock
,
150 div
.admonitionblock
{
152 margin-bottom: 1.5em;
155 div
.admonitionblock
{
157 margin-bottom: 2.5em;
160 #content { /* Block element content. */
164 /* Block element titles. */
165 div
.title
, caption
.title
{
170 margin-bottom: 0.5em;
176 td div
.title:first-child
{
179 div
.content div
.title:first-child
{
182 div
.content
+ div
.title
{
186 div
.sidebarblock
> div
.content
{
188 border: 1px solid silver
;
192 div
.listingblock
> div
.content
{
193 border: 1px solid silver
;
202 div
.quoteblock
> div
.attribution
{
211 div
.verseblock
> pre
.content
{
212 font-family: inherit
;
214 div
.verseblock
> div
.attribution
{
218 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
219 div
.verseblock
+ div
.attribution
{
223 div
.admonitionblock
.icon
{
227 text-decoration: underline
;
229 padding-right: 0.5em;
231 div
.admonitionblock td
.content
{
233 border-left: 2px solid silver
;
236 div
.exampleblock
> div
.content
{
237 border-left: 2px solid silver
;
241 div
.imageblock div
.content
{ padding-left: 0; }
242 span
.image img
{ border-style: none
; }
243 a
.image:visited
{ color: white
; }
247 margin-bottom: 0.8em;
260 list-style-position: outside
;
263 list-style-type: decimal
;
266 list-style-type: lower-alpha
;
269 list-style-type: upper-alpha
;
272 list-style-type: lower-roman
;
275 list-style-type: upper-roman
;
278 div
.compact ul
, div
.compact ol
,
279 div
.compact p
, div
.compact p
,
280 div
.compact div
, div
.compact div
{
282 margin-bottom: 0.1em;
285 div
.tableblock
> table
{
286 border: 3px solid
#444466;
301 /* Because the table frame attribute is overridden by CSS in most browsers. */
302 div
.tableblock
> table
[frame
="void"] {
305 div
.tableblock
> table
[frame
="hsides"] {
306 border-left-style: none
;
307 border-right-style: none
;
309 div
.tableblock
> table
[frame
="vsides"] {
310 border-top-style: none
;
311 border-bottom-style: none
;
317 margin-bottom: 0.8em;
320 padding-bottom: 15px;
322 dt
.hdlist1
.strong
, td
.hdlist1
.strong
{
328 padding-right: 0.8em;
334 div
.hdlist
.compact tr
{
344 #footer-badges { display: none
; }
352 margin-bottom: 0.1em;
355 div
.toclevel1
, div
.toclevel2
, div
.toclevel3
, div
.toclevel4
{ margin-top: 0; margin-bottom: 0; }
356 div
.toclevel1
{ margin-top: 0.3em; margin-left: 0; font-size: 1.0em; }
357 div
.toclevel2
{ margin-top: 0.25em; margin-left: 2em; font-size: 0.9em; }
358 div
.toclevel3
{ margin-left: 4em; font-size: 0.8em; }
359 div
.toclevel4
{ margin-left: 6em; font-size: 0.8em; }
366 .monospaced, tt, div.listingblock > div.content {
367 font-family: Consolas
, "Andale Mono", "Courier New", monospace
;
390 .paragraph p, li, dd, .content { max-width: 80em; }
391 .admonitionblock { max-width: 35em; }
393 div
.sectionbody div
.ulist
> ul
> li
{
394 list-style-type: square
;
397 div
.sectionbody div
.ulist
> ul
> li
> * {
403 div
.sectionbody div
.ulist
> ul
> li div
.ulist
> ul
> li
{
406 div
.sectionbody div
.ulist
> ul
> li div
.ulist
> ul
> li
> * {
411 font-style: normal
! important
;
412 font-weight: bold
! important
;
413 color: #662222 ! important
;
414 letter-spacing:+0.08em ! important
;
417 span
.underline
{ text-decoration: underline
; }
418 span
.overline
{ text-decoration: overline
; }
419 span
.line-through
{ text-decoration: line-through
; }
428 margin-bottom: 1.5em;
430 thead
, p
.tableblock
.header
{
441 border-color: #444466;
442 border-collapse: collapse
;
444 th
.tableblock
, td
.tableblock
{
448 border-color: #444466;
451 table
.tableblock
.frame-topbot
{
452 border-left-style: hidden
;
453 border-right-style: hidden
;
455 table
.tableblock
.frame-sides
{
456 border-top-style: hidden
;
457 border-bottom-style: hidden
;
459 table
.tableblock
.frame-none
{
460 border-style: hidden
;
463 th
.tableblock
.halign-left
, td
.tableblock
.halign-left
{
466 th
.tableblock
.halign-center
, td
.tableblock
.halign-center
{
469 th
.tableblock
.halign-right
, td
.tableblock
.halign-right
{
473 th
.tableblock
.valign-top
, td
.tableblock
.valign-top
{
476 th
.tableblock
.valign-middle
, td
.tableblock
.valign-middle
{
477 vertical-align: middle
;
479 th
.tableblock
.valign-bottom
, td
.tableblock
.valign-bottom
{
480 vertical-align: bottom
;
487 <script type=
"text/javascript">
489 var asciidoc
= { // Namespace.
491 /////////////////////////////////////////////////////////////////////
492 // Table Of Contents generator
493 /////////////////////////////////////////////////////////////////////
495 /* Author: Mihai Bazon, September 2002
496 * http://students.infoiasi.ro/~mishoo
498 * Table Of Content generator
501 * Feel free to use this script under the terms of the GNU General Public
502 * License, as long as you do not remove or alter this notice.
505 /* modified by Troy D. Hanson, September 2006. License: GPL */
506 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
509 toc: function (toclevels
) {
511 function getText(el
) {
513 for (var i
= el
.firstChild
; i
!= null; i
= i
.nextSibling
) {
514 if (i
.nodeType
== 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
516 else if (i
.firstChild
!= null)
522 function TocEntry(el
, text
, toclevel
) {
525 this.toclevel
= toclevel
;
528 function tocEntries(el
, toclevels
) {
529 var result
= new Array
;
530 var re
= new RegExp('[hH]([1-'+(toclevels
+1)+'])');
531 // Function that scans the DOM tree for header elements (the DOM2
532 // nodeIterator API would be a better technique but not supported by all
534 var iterate = function (el
) {
535 for (var i
= el
.firstChild
; i
!= null; i
= i
.nextSibling
) {
536 if (i
.nodeType
== 1 /* Node.ELEMENT_NODE */) {
537 var mo
= re
.exec(i
.tagName
);
538 if (mo
&& (i
.getAttribute("class") || i
.getAttribute("className")) != "float") {
539 result
[result
.length
] = new TocEntry(i
, getText(i
), mo
[1]-1);
549 var toc
= document
.getElementById("toc");
554 // Delete existing TOC entries in case we're reloading the TOC.
555 var tocEntriesToRemove
= [];
557 for (i
= 0; i
< toc
.childNodes
.length
; i
++) {
558 var entry
= toc
.childNodes
[i
];
559 if (entry
.nodeName
.toLowerCase() == 'div'
560 && entry
.getAttribute("class")
561 && entry
.getAttribute("class").match(/^toclevel/))
562 tocEntriesToRemove
.push(entry
);
564 for (i
= 0; i
< tocEntriesToRemove
.length
; i
++) {
565 toc
.removeChild(tocEntriesToRemove
[i
]);
568 // Rebuild TOC entries.
569 var entries
= tocEntries(document
.getElementById("content"), toclevels
);
570 for (var i
= 0; i
< entries
.length
; ++i
) {
571 var entry
= entries
[i
];
572 if (entry
.element
.id
== "")
573 entry
.element
.id
= "_toc_" + i
;
574 var a
= document
.createElement("a");
575 a
.href
= "#" + entry
.element
.id
;
576 a
.appendChild(document
.createTextNode(entry
.text
));
577 var div
= document
.createElement("div");
579 div
.className
= "toclevel" + entry
.toclevel
;
580 toc
.appendChild(div
);
582 if (entries
.length
== 0)
583 toc
.parentNode
.removeChild(toc
);
587 /////////////////////////////////////////////////////////////////////
588 // Footnotes generator
589 /////////////////////////////////////////////////////////////////////
591 /* Based on footnote generation code from:
592 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
595 footnotes: function () {
596 // Delete existing footnote entries in case we're reloading the footnodes.
598 var noteholder
= document
.getElementById("footnotes");
602 var entriesToRemove
= [];
603 for (i
= 0; i
< noteholder
.childNodes
.length
; i
++) {
604 var entry
= noteholder
.childNodes
[i
];
605 if (entry
.nodeName
.toLowerCase() == 'div' && entry
.getAttribute("class") == "footnote")
606 entriesToRemove
.push(entry
);
608 for (i
= 0; i
< entriesToRemove
.length
; i
++) {
609 noteholder
.removeChild(entriesToRemove
[i
]);
612 // Rebuild footnote entries.
613 var cont
= document
.getElementById("content");
614 var spans
= cont
.getElementsByTagName("span");
617 for (i
=0; i
<spans
.length
; i
++) {
618 if (spans
[i
].className
== "footnote") {
620 var note
= spans
[i
].getAttribute("data-note");
622 // Use [\s\S] in place of . so multi-line matches work.
623 // Because JavaScript has no s (dotall) regex flag.
624 note
= spans
[i
].innerHTML
.match(/\s*\[([\s\S]*)]\s*/)[1];
626 "[<a id='_footnoteref_" + n
+ "' href='#_footnote_" + n
+
627 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
628 spans
[i
].setAttribute("data-note", note
);
630 noteholder
.innerHTML
+=
631 "<div class='footnote' id='_footnote_" + n
+ "'>" +
632 "<a href='#_footnoteref_" + n
+ "' title='Return to text'>" +
633 n
+ "</a>. " + note
+ "</div>";
634 var id
=spans
[i
].getAttribute("id");
635 if (id
!= null) refs
["#"+id
] = n
;
639 noteholder
.parentNode
.removeChild(noteholder
);
641 // Process footnoterefs.
642 for (i
=0; i
<spans
.length
; i
++) {
643 if (spans
[i
].className
== "footnoteref") {
644 var href
= spans
[i
].getElementsByTagName("a")[0].getAttribute("href");
645 href
= href
.match(/#.*/)[0]; // Because IE return full URL.
648 "[<a href='#_footnote_" + n
+
649 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
655 install: function(toclevels
) {
658 function reinstall() {
659 asciidoc
.footnotes();
661 asciidoc
.toc(toclevels
);
665 function reinstallAndRemoveTimer() {
666 clearInterval(timerId
);
670 timerId
= setInterval(reinstall
, 500);
671 if (document
.addEventListener
)
672 document
.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer
, false);
674 window
.onload
= reinstallAndRemoveTimer
;
682 <body class=
"article">
684 <h1>(LADI) jackdbus
</h1>
688 <div class=
"sectionbody">
689 <div class=
"paragraph"><p><span class=
"image">
690 <a class=
"image" href=
"https://github.com/LADI/jackdbus/actions">
691 <img src=
"https://github.com/LADI/jackdbus/actions/workflows/build.yml/badge.svg" alt=
"Build status badge">
695 <a class=
"image" href=
"https://repology.org/metapackage/jack-audio-connection-kit/versions">
696 <img src=
"https://repology.org/badge/tiny-repos/jack-audio-connection-kit.svg" alt=
"Repology bandge">
702 <h2 id=
"_overview">Overview
</h2>
703 <div class=
"sectionbody">
704 <div class=
"paragraph"><p>This software imlements D-Bus endpoint for JACK server.
</p></div>
708 <h2 id=
"_brief_history">Brief History
</h2>
709 <div class=
"sectionbody">
710 <div class=
"paragraph"><p>Initial version of
<a href=
"https://github.com/LADI/jackdbus">jackdbus
</a> was created
711 as part of LADI project and was ad-hoc modification of JACK1 codebase.
712 jackdbus for JACK1 was maintained first as a setup of ad-hoc patches,
713 then via Mercural and then via Git.
714 In
2008/
2009, jackdbus was ported to jackdmp codebase along with an implementation
715 of the newly designed for the new need control API for JACK.
716 The result of this merge became known as
717 <a href=
"https://web.archive.org/web/20170106162202/http://lac.linuxaudio.org/2009/cdm/Thursday/01_Letz/01.pdf">JACK2
</a>.
718 As of
2022, jackdbus is again maintained in LADI project.
719 The jackaudio.org version of jackdbus is considered older/alternative
720 implementation.
</p></div>
721 <div class=
"paragraph"><p>For LADI specific issues, submit issues or pull request to LADI project.
722 For related discussions, you are invited to join
723 <a href=
"https://libera.chat/">Libera.Chat
</a> channel #ladi
</p></div>
724 <div class=
"admonitionblock">
727 <img alt=
"Important" src=
"data:image/png;base64,
728 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
780 EQn3XQAAAABJRU5ErkJggg==">
782 <td class=
"content">Do not submit LADI specific issues to jackaudio project.
</td>
788 <h2 id=
"_d_bus_access">D-Bus access
</h2>
789 <div class=
"sectionbody">
790 <div class=
"paragraph"><p>D-Bus is an object model that provides IPC mechanism.
791 D-Bus supports autoactivation of objects,
792 thus making it simple and reliable to code a
"single instance" application or daemon,
793 and to launch applications and daemons on demand when their services are needed.
</p></div>
794 <div class=
"paragraph"><p>Improvements over classical
"jackd" approach:
</p></div>
795 <div class=
"ulist"><ul>
798 Simplified single thread model for control and monitor
799 applications. Various D-Bus language bindings make it trivial to
800 write control and monitor applications using scripting languages
801 like Python, Ruby, Perl, etc..
806 A log file is available for inspection even when autoactivation
807 happens by the first launched JACK application.
812 A real configuration file is used to persist settings to be
813 manipulated through configuration interface of JACK D-Bus object.
818 Improved graph inspection and control mechanism. JACK graph is
819 versioned. Connections, ports and clients have unique
820 (monotonically increasing) numeric IDs.
825 High level abstraction of JACK settings. Allows applications that
826 can configure JACK to expose parameters that were not known at
827 compile (or tarball release) time. Recent real world examples are
828 the JACK MIDI driver parameters and support for FFADO driver in
829 QJackCtl. Upgrading of JACK requires upgrade of QJackCtl in order
830 to make new settings available in the GUI.
835 <h3 id=
"_how_it_works">How it works
</h3>
837 <h4 id=
"_autoactivation_and_starting_stopping_jack_server">Autoactivation and starting/stopping JACK server
</h4>
838 <div class=
"paragraph"><p>First, application that issues D-Bus method call to JACK controller object,
839 causes D-Bus session daemon to activate the object by starting the jackdbus executable.
840 Activating controller object does not start the server.
841 Instead controller object has several interfaces.
842 The most important of them is the control interface.
843 Control interface contains methods for starting and stopping JACK server,
844 loading and unloading of internal clients (netjack),
845 setting buffer size and resetting xrun counter.
846 It also contains methods for querying information required by monitoring
847 applications:
</p></div>
848 <div class=
"ulist"><ul>
851 whether JACK server is started
856 whether JACK server is running in realtime mode
885 <div class=
"paragraph"><p>JACK server autostart is achieved by libjack calling
"jack server start" method of
886 JACK control D-Bus interface.
</p></div>
889 <h4 id=
"_jack_settings">JACK settings
</h4>
890 <div class=
"paragraph"><p>Applications that want to manage JACK settings can query
891 and set all settings that were traditionally specified as
892 jackd command-line parameters.
893 Interface abstraction provides virtual tree of parameter
894 containers with container leaves that contain parameters.
895 Parameters are accessed using simple addressing scheme (array of strings)
896 where address defines path to parameter, like
"drivers",
"alsa",
"dither".
</p></div>
897 <div class=
"paragraph"><p>Overview of the tree of standard settings’ addresses:
</p></div>
898 <div class=
"ulist"><ul>
916 "engine",
…more engine parameters
926 "driver",
…more driver parameters
931 "drivers",
"alsa",
"device"
936 "drivers",
"alsa",
…more alsa driver parameters
941 "drivers",
…more drivers
946 "internals",
"netmanager",
"multicast ip"
951 "internals",
"netmanager",
…more netmanager parameters
956 "internals",
…more internals
960 <div class=
"paragraph"><p>JACK settings are persisted.
961 I.e. they are automatically saved by jackdbus when they are set.
962 Next time user starts JACK server, last saved settings will be automatically used.
963 Changing JACK settings through the configure D-Bus interface takes effect on next
965 On the fly change of the buffer size, as available in the libjack
966 (jack.h) API, is also possible through the control D-Bus interface.
</p></div>
969 <h4 id=
"_jack_parameter_constraints">JACK parameter constraints
</h4>
970 <div class=
"paragraph"><p>JACK internal modules that provide parameters visible through control API can provide
971 information about parameter valid range (like realtime priority) or
972 whether parameter should be presented as enumeration.
973 Enumeration parameters can be strict and non-strict.
974 Example of strict enum parameter is dither parameter of ALSA driver,
975 it has only predefined valid values:
"shaped noise",
976 "rectangular",
"triangualr" and
"none".
</p></div>
977 <div class=
"paragraph"><p>Example of non-strict parameter is device parameter of ALSA driver.
978 It is useful to provide some detected device strings as choices to user,
979 but still allow user to specify custom string that ALSA layer is supposed to
980 understand.
</p></div>
983 <h4 id=
"_jack_patchbay">JACK patchbay
</h4>
984 <div class=
"paragraph"><p>In order to simplify patchbay applications, extended functionality is provided.
985 There is a method that returns the current graph state.
986 Graph state has unique monotonically increasing version number
987 and contains info about all clients, their ports and connections.
988 Connections, ports and clients have unique numeric IDs
989 that are guaranteed not to be reused.
990 Notifica tions about graph changes are provided using
991 D-Bus signals.
</p></div>
995 <h3 id=
"_jack_d_bus_enabled_applications">JACK D-Bus enabled applications
</h3>
997 <h4 id=
"_jack_control">jack_control
</h4>
998 <div class=
"paragraph"><p>JACK contains
"jack_control" executable a
300 lines of Python exposing
999 JACK D-Bus functionality. It allows chained execution of several commands.
1000 For example
"jack control ds alsa dps midi-driver raw eps realtime on
1001 eps relatime-priority 70 start" selects ALSA driver, enables JACK MIDI
1002 raw backend, enables realtime mode, sets realtime priority to
70 and starts
1003 JACK server.
</p></div>
1006 <h4 id=
"_ladi_tools">LADI Tools
</h4>
1007 <div class=
"paragraph"><p>LADI Tools is a set of programs to configure, control and monitor JACK.
1008 It provides tray icon, Window Maker style dockapp,
1009 G15 keyboard LCD display integration application,
1010 configuration utility for managing JACK settings
1011 and log file monitor application.
</p></div>
1012 <div class=
"paragraph"><p>All tools are written in Python.
</p></div>
1015 <h4 id=
"_patchage">Patchage
</h4>
1016 <div class=
"paragraph"><p>Patchage, the ubiquitous canvas modular patch bay can be compiled to use
1017 D-Bus instead of libjack to communicate with JACK.
</p></div>
1018 <div class=
"paragraph"><p>Doing so also enables JACK server start/stop functionality in Patchage.
</p></div>
1021 <h4 id=
"_ladi_session_handler_ladish">LADI Session handler (LADISH)
</h4>
1022 <div class=
"paragraph"><p>LADISH, a rewrite of LASH session handler
1023 uses D-Bus to communicate with JACK.
</p></div>
1024 <div class=
"paragraph"><p>Various JACK related features are implemented:
</p></div>
1025 <div class=
"ulist"><ul>
1028 Saving of JACK settings as part of
"studio" session.
1033 Handling of
"JACK server crash" scenario: restarting JACK server,
1034 notifying JACK applications that JACK server reappeared so they
1035 can reconnect to it, and restoring JACK connections.
1044 <h2 id=
"_references">References
</h2>
1045 <div class=
"sectionbody">
1046 <div class=
"olist arabic"><ol class=
"arabic">
1049 <a href=
"https://web.archive.org/web/20170106162202/http://lac.linuxaudio.org/2009/cdm/Thursday/01_Letz/01.pdf">What
’s new in JACK2?
</a>
1056 <div id=
"footnotes"><hr></div>
1058 <div id=
"footer-text">
1060 2023-
03-
08 10:
15:
31 EET