私は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の回答に基づいて、次のようにしました。
- chmod 705 $XDG_RUNTIME_DIR
- 使用して
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
パパとしてアプリを実行し、オーディオ操作をしたいです。