从 root 执行 sudo 到我自己时失去(实时)权限

从 root 执行 sudo 到我自己时失去(实时)权限

升级到 debian wheezy 后(我没有升级内核 - 它仍然是 3.8.2),我无法再以以前的方式启动 jackd。我明白了you are not allowed to use realtime scheduling

我的调查表明,这与我的脚本中的一个命令有关sudo,我在其中从 root 执行 sudo 到 martin。 sudo 是必需的,因为当我的火线混合控制台打开时,我使用 udev 规则启动 jackd。我可以通过从命令行输入 sudo 来重现该问题。

简而言之,这就是我所观察到的

  • 启动 jackd 作为 martin -> 工作
  • 以 root 身份启动 jackd -> 运行
  • 以 root 身份登录su - martin,然后启动 jackd -> 工作
  • 作为 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显示我在音频组中,但 root 不在。从 root sudo 到 martin 后,martin 没有实时权限

sudo -u martin sh -c "ulimit -e -r"
scheduling priority             (-e) 0
real-time priority              (-r) 0

将 root 添加到 audo 组没有任何区别。 Root 仍然没有实时权限,并且在sudo -u martin martin 之后仍然看起来如上

答案1

我想 sudo 会保留 root 用户的环境,因此可能没有用户martin设置的路径或其他环境变量。您也可能需要jack使用该选项从 shell 中通过 sudo运行-s /path/to/shell

但是,作为 root,您有权su(替代用户)而不会提示输入密码(并且不需要配置 sudo 来实现此目的,sudo 专门针对非 root 用户)。

 su - martin -c /usr/bin/jackd ...

-c告诉 su 要运行什么命令,并且该-选项(也可以通过 完成-l)将尝试设置类似于正在运行的用户的环境(在本例中为martin)。

相关内容