sudo:以另一个用户身份运行声音播放

sudo:以另一个用户身份运行声音播放

我使用 iptables 阻止我孩子的 Linux 帐户的所有互联网流量。有时我想让他们使用一个程序或另一个程序。在这种情况下,我允许他们通过 sudoers 作为另一个(无限)用户运行该程序。这次我尝试让他们使用翻译外壳以及mpg123播放声音/发音翻译单词:

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

但是,sudo -u daddy trans en:he -speak -player mpg123 applekiddy用户身份运行会在终端中显示正确的翻译,但不会播放声音,并指出:“语音输出不适用于英语”。一旦我登录daddyGnome 并运行相同的命令:trans en:he -speak -player mpg123 apple- 一切都按预期进行,我得到了文本翻译和声音播放。两个用户都属于该audio组。我试过这种方法但 id 没有帮助。我使用的是 Debian 12,无论是 Wayland 还是 Xorg 都没有$HOME/.Xauthority用于该解决方案的文件...

如何使 translate-shell 以另一个用户身份通过​​ sudo 播放音频?

答案1

现代系统上的音频设备由管线它在您的目录中有一个套接字/run/user。为了让 sudo:ed 进程访问当前会话的 pipeline 实例,您需要允许它访问套接字$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指令并没有给我带来最终结果,而是一个更简单、更整洁的结果操作说明做过:

$ 须藤添加用户用户声音的
$ 须藤添加用户用户脉冲
$ 须藤添加用户用户脉冲存取

在这里,这user将是daddy原始答案,孩子想要以sudo爸爸的身份执行应用程序,并让音频工作。

相关内容