aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Walpen <dev@submerge.ch>2024-02-11 17:03:42 +0000
committerYuri Victorovich <yuri@FreeBSD.org>2024-02-11 17:03:42 +0000
commit100a9852dd8957a1d7a337858a3319da693915c9 (patch)
tree58cadc816208938a7bf6f906e9ff169fe2977fce
parent46b4854f7068098ea9498e97604a6d724656fa95 (diff)
downloadports-100a9852dd8957a1d7a337858a3319da693915c9.tar.gz
ports-100a9852dd8957a1d7a337858a3319da693915c9.zip
audio/jack: Remove obsolete realtime hack for RC service, with checks
PR: 276607
-rw-r--r--audio/jack/Makefile2
-rw-r--r--audio/jack/files/jackd.in43
-rw-r--r--audio/jack/pkg-message11
3 files changed, 44 insertions, 12 deletions
diff --git a/audio/jack/Makefile b/audio/jack/Makefile
index 49efc4daf81a..f8eeea1cf31e 100644
--- a/audio/jack/Makefile
+++ b/audio/jack/Makefile
@@ -1,7 +1,7 @@
PORTNAME= jackit
DISTVERSIONPREFIX= v
DISTVERSION= 1.9.22
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= audio
MAINTAINER= dev@submerge.ch
diff --git a/audio/jack/files/jackd.in b/audio/jack/files/jackd.in
index 9f135a6c8f1b..e78285044ea7 100644
--- a/audio/jack/files/jackd.in
+++ b/audio/jack/files/jackd.in
@@ -11,7 +11,7 @@
: ${jackd_enable="NO"}
: ${jackd_user="root"}
: ${jackd_rtprio="NO"}
-: ${jackd_args="-r -doss -r44100 -p1024 -n3 -w16"}
+: ${jackd_args="--no-realtime -doss -r48000 -p1024 -w32"}
. /etc/rc.subr
@@ -20,15 +20,44 @@ rcvar=jackd_enable
procname=%%PREFIX%%/bin/jackd
start_cmd="start_jackd"
+fail() {
+ echo "JACK failed to start: $1" >&2
+ exit 1
+}
+
+check_config() {
+ # check that jackd_user is set
+ if [ -z "$jackd_user" ]; then
+ fail "jackd_user has to be defined"
+ fi
+
+ # detect intent to use realtime priority
+ if [ "$jackd_rtprio" = "YES" ] || \
+ { echo "$jackd_args" | grep -q -- "oss" && \
+ { echo "$jackd_args" | grep -qw -- "--realtime" || \
+ echo "$jackd_args" | grep -qw -- "-[A-Za-mo-z]*R[A-Za-z]*"; }; }; then
+ # check that mac_priority(4) is enabled
+ if [ "$(sysctl -qn security.mac.priority.realtime)" != "1" ]; then
+ fail "Realtime priority requires mac_priority(4) to be loaded"
+ fi
+ # check that the user has realtime privileges
+ if ! (su -m "$jackd_user" -c "rtprio 10 test -z"); then
+ fail "User jackd_user=$jackd_user is not a member of the realtime group"
+ fi
+ fi
+}
+
start_jackd() {
echo "Starting ${name}."
- if [ $jackd_rtprio = "YES" ]; then
- local rt="rtprio 1"
- fi
+
+ # check that setup is valid
+ check_config
+
# log the date and parameters
- echo -e "\n[`date`] Starting the daemon, user=$jackd_user rtprio=$jackd_rtprio args=\"$jackd_args\"" >> /var/log/${name}.log
- # daemon(8) should be able to set the realtime priority, but it isn't
- $rt daemon -p /var/run/${name}.pid -u "${jackd_user}" %%PREFIX%%/bin/jackd ${jackd_args}
+ echo -e "\n[`date`] Starting the daemon, user=$jackd_user args=\"$jackd_args\"" >> /var/log/${name}.log
+
+ # start the daemon
+ daemon -p /var/run/${name}.pid -u "$jackd_user" %%PREFIX%%/bin/jackd $jackd_args
}
load_rc_config ${name}
diff --git a/audio/jack/pkg-message b/audio/jack/pkg-message
index 2a94946d2d57..6ab2e5764e59 100644
--- a/audio/jack/pkg-message
+++ b/audio/jack/pkg-message
@@ -3,11 +3,15 @@ The new JACK server comes with a DBUS control interface:
$ jack_control help
$ jack_control ds oss
$ jack_control dp
+$ jack_control dps rate 48000
+$ jack_control dps wordlength 16
+$ jack_control dps capture /dev/dsp0
+$ jack_control dps playback /dev/dsp0
$ jack_control eps realtime False
$ jack_control start
-Only root can grant real-time priority to processes for now, using rtprio(1).
-Upcoming FreeBSD releases will have a MAC policy with a realtime user group.
+To use real-time priority for JACK server and clients, load the mac_priority(4)
+module and add the JACK user to the realtime group.
Memory locking has to be allowed in /etc/login.conf or ~/.login_conf. Set the
resource limit ":memorylocked=unlimited:" and don't forget to run
@@ -19,8 +23,7 @@ Note that only one JACK server can be run at a time. An /etc/rc.conf example:
jackd_enable="YES"
jackd_user="joe"
-jackd_rtprio="YES"
-jackd_args="-R -doss -r48000 -p1024 -n1 -w16 \
+jackd_args="--no-realtime -doss -r48000 -p1024 -w16 \
--capture /dev/dsp0 --playback /dev/dsp0"
Official JACK example clients and tools are available as jack-example-tools.