
Debian wheezyにアップグレードした後(カーネルをアップグレードしていません。まだ3.8.2です)、以前と同じようにjackdを起動できなくなりました。わかりましたyou are not allowed to use realtime scheduling
。
sudo
調査の結果、これはルートからmartinにsudoを実行したスクリプトのコマンドに関連していることがわかりました。 Firewire ハイブリッドコンソールを開くと、udev ルールを使用して jackd を起動するため sudo が必要です。コマンドラインでsudoと入力すると、問題を再現できます。
簡単に言えば、私が観察したのはこれです。
- マーティンでjackdを開始 - >日
- jackdをrootとして起動 - >実行
- rootとしてログイン
su - martin
してjackdを起動 - > work - root
sudo -u martin /usr/bin/jackd ...
- >動作しません - 上記と同じですが
sudo -E -u martin ...
- >動作しません。
私の/etc/security/limits.confには次の行が含まれています。
@audio - rtprio 40
@audio - nice -20
@audio - memlock 1554963
sudo -u martin id
私はオーディオグループに属していると表示されますが、ルートはそうではありません。ルートからマーティンにsudoした後、マーティンにはリアルタイム権限がありません。
sudo -u martin sh -c "ulimit -e -r"
scheduling priority (-e) 0
real-time priority (-r) 0
オーディオグループにルートを追加しても違いはありません。ルートはまだリアルタイムの権限を持っておらず、sudo -u martin
マーティンの後もまだ上記のようです。
答え1
martin
sudoはrootユーザーの環境を維持するため、ユーザーが設定したパスやその他の環境変数がない可能性があります。jack
このオプションを使用して、シェルでsudoを介して実行することもできます-s /path/to/shell
。
ただし、rootとしてsu
パスワードを入力するように求められず、アクセス(代替ユーザー)することができます(そしてこれを達成するためにsudoを設定する必要はありません。sudoは特にrootではないユーザーのためです)。
su - martin -c /usr/bin/jackd ...
-c
suに実行するコマンドを通知し、この-
オプション(完了でも使用可能-l
)は、実行中のユーザー(この場合)に似た環境を設定しようとしますmartin
。