Perda (em tempo real) quando sudoing da raiz para mim mesmo

1

Após uma atualização para o debian wheezy (eu não atualizei o kernel - ainda é 3.8.2) eu não consigo mais iniciar o jackd da maneira que eu costumava fazer. Eu recebo you are not allowed to use realtime scheduling .

Minha investigação mostra que isso está relacionado a um comando sudo no meu script, no qual eu sudo do root para o martin. O sudo é necessário, porque eu inicio o jackd quando meu console de mixagem firewire é ligado, usando uma regra do udev. Eu posso reproduzir o problema digitando sudo na linha de comando.

Em suma, é isso que eu observo

  • inicie o jackd como martin - > trabalha
  • inicie o jackd como root - > trabalha
  • faça o login como root e su - martin e inicie o jackd - > trabalha
  • como root sudo -u martin /usr/bin/jackd ... - > não funciona
  • como acima, mas sudo -E -u martin ... - > não funciona

Meu /etc/security/limits.conf contém essas linhas

@audio - rtprio 40
@audio - nice -20
@audio - memlock 1554963

sudo -u martin id mostra que estou no grupo de áudio, mas o root não é. Depois de fazer o sudo do root para o martin, o martin não tem permissões em tempo real

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

Adicionar raiz ao grupo audo não fez diferença. Raiz ainda não tem permissões em tempo real e depois de sudo -u martin martin ainda parece como acima

    
por Martin Drautzburg 09.08.2013 / 19:37

1 resposta

0

Eu imagino que o sudo está preservando seu ambiente do usuário root e, portanto, pode não ter caminhos ou outras variáveis de ambiente que o usuário martin definiu. Pode ser também que você precise executar jack via sudo de um shell com a opção -s /path/to/shell .

No entanto, como root, você tem os direitos para su (usuário substituto) sem ser solicitada uma senha (e não requer configuração do sudo para conseguir isso, o sudo é especificamente destinado a usuários não-root).

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

-c diz ao su qual comando executar, e a opção - (que também pode ser feita via -l ) tentará configurar o ambiente semelhante ao do usuário que está sendo executado como (em neste caso martin ).

    
por 09.08.2013 / 22:01