3

upstartスクリプトを使用して、起動時にリアルタイム優先でjackdを起動しようとしていますが、これまでのところ成功していません。ubuntu サーバー 14.04 を使用しています。私のupstartバージョンは1.12.1です。

リアルタイムなしで jackd を起動すると、upstart スクリプトは意図したとおりに機能します。スクリプトで jackd を起動するために使用しているユーザーとグループは、リアルタイムの優先順位を使用できますが、起動時に実行することは問題ではないようです。upstart で実行しようとするたびに、upstart ログに次のように表示されます。

jackdmp 1.9.10
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2013 Grame.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
Cannot create thread 1 Operation not permitted
Cannot create thread 1 Operation not permitted
Cannot create thread 1 Operation not permitted
JACK server starting in realtime mode with priority 70
Cannot lock down 82274202 byte memory area (Cannot allocate memory)
Cannot create thread 1 Operation not permitted
ERROR: messagebuffer not initialized: libffado 2.1.9999- built Oct 19 2013 16:01:07
ERROR: messagebuffer not initialized: 1408466326248438: Error (PosixThread.cpp)[ 161] Start: Cannot create realtime thread (1: Operation not permitted)
ERROR: messagebuffer not initialized: 1408466326248486: Error (PosixThread.cpp)[ 162] Start:  priority: 75
firewire ERR: FFADO: Error creating virtual device
Cannot attach audio driver
JackServer::Open failed with -1
Failed to open server

ターミナルで upstart スクリプトの exec 行にあるコマンドとまったく同じコマンドを実行すると、正常に動作します。

私のupstartスクリプトは非常に単純なものです:

description "jackd"

start on stopped rc
stop on runlevel [06]


exec su radiola -c "jackd -R -P 70 -d firewire -r 44100 -n 3 -p 2048"

setuid および setguid スタンザと start-stop-daemon も使用しようとしましたが、説明したのと同じ結果になりました。私のファイル /etc/security/limits.d/audio.conf は次のとおりです。

@audio   -  rtprio     95
@audio   -  memlock    unlimited
#@audio   -  nice      -19

jackd を開始しようとしているユーザーは、audio グループに属しています。

新興企業にリアルタイムプロセスを開始させる方法はありますか? そうでない場合、この問題に対する他の解決策はありますか?

ありがとうございました。

4

1 に答える 1

2

/etc/security/limits.d/audio.conf ファイルは、ユーザーがセッションを開いているとき (たとえば、pam_limits.so がロードされているとき) にのみ読み取られます。

limit ディレクティブを使用して、upstart スクリプトから直接同じ制限を設定できます。

limit memlock unlimited unlimited
limit rtprio 95 95

また、radiola に切り替えるには、su を使用する代わりに、setuid/setgid ディレクティブを使用できます。

setuid radiola
setgid audio
于 2014-10-04T19:39:03.283 に答える