sudo:他のユーザーでサウンド再生を実行する

sudo:他のユーザーでサウンド再生を実行する

私はiptablesを使用して、子供のLinuxアカウントからすべてのインターネットトラフィックをブロックします。時々私は彼らが1つまたは別のプログラムを使用したいと思います。この場合、sudoersを介して他の(無制限)ユーザーとしてプログラムを実行できるようにします。今回はそれらを使ってみました。翻訳シェルmpg123音/発音翻訳された単語を再生するだけでなく:

kiddy ALL= (daddy) NOPASSWD: /usr/bin/trans

ただし、ユーザーsudo -u daddy trans en:he -speak -player mpg123 appleとして実行すると、kiddy端末に正しい翻訳が表示されますが、音は再生されず、「音声出力は英語では使用できません」というメッセージが表示されます。 Gnomeにログインdaddyして同じコマンドを実行すると:trans en:he -speak -player mpg123 apple- すべてが期待どおりに機能し、テキストが翻訳され、サウンドが再生されます。どちらのユーザーもこのaudioグループに属します。頑張ったこの方法しかし、IDは役に立ちません。私はDebian 12を使用していますが、WaylandやXorgのどちらも$HOME/.Xauthorityこのソリューションに関するドキュメントを持っていません...

他のユーザーとしてsudoを介して翻訳シェル再生オーディオを作成するには?

答え1

最新システムのオーディオ機器は次のように構成されています。管路あなたのディレクトリにソケットがあります/run/user。 sudo:edプロセスが現在のセッションのパイプラインインスタンスにアクセスするには、ソケットへのアクセスを許可する必要があります$XDG_RUNTIME_DIR/pipewire-0。ソケット自体は一般的に誰にでも開いていますが、$XDG_RUNTIME_DIRそうではありません。

有効なコマンドの順序は次のとおりです。

chmod a+x $XDG_RUNTIME_DIR
sudo -u daddy  XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR trans en:he -speak -player mpg123 apple

$XDG_RUNTIME_DIRしかし、望ましくない人に自分自身を開いていることを考慮してください。

答え2

Göran Uddeborgの回答に基づいて、次のようにしました。

  1. chmod 705 $XDG_RUNTIME_DIR
  2. 使用してsudo visudo次の行を追加しました。
Defaults:kiddy env_keep += "XDG_RUNTIME_DIR"
kiddy   ALL= (daddy) NOPASSWD: /usr/bin/trans

今大丈夫!

答え3

このXDG_RUNTIME_DIRガイダンスは最終結果を提供しませんが、よりシンプルでクリーンな結果を提供します。ガイドラインした:

$sudo ユーザーを追加ユーザーボーカル
$sudo ユーザーを追加ユーザー脈拍
$sudo ユーザーを追加ユーザーパルスアクセス

これが元の答えにuserなりますdaddy。子供はsudoパパとしてアプリを実行し、オーディオ操作をしたいです。

関連情報