Zor*_*oth 5 users permissions tty pulseaudio
我同时运行两个用户,因为有些游戏不喜欢合成窗口管理器,而且你不能在我最喜欢的桌面 Unity 中关闭合成。我不想运行同一用户的两个 TTY,因为它们以不幸的方式相互交互。我正在运行 Ubuntu 16.04。
一个用户,jonathan,在 TTY7 的统一会话中,另一个,steamdude,在 TTY2 的 XFCE 会话中。除了音频,一切都按我的意愿工作。将两个用户都添加到音频组并重新登录后,我可以在另一个 TTY 中听到来自一个 TTY 的音频。但是,当一个用户使用声卡时,另一个用户根本无法播放音频。
最接近我拥有的解决方案(我不知道它为什么起作用)是使用 paprefs 使 RTP 设备能够在 Unity 会话中环回。steamdude 不需要连接到 RTP 设备;由于某种原因,环回不会干扰 TTY2 的声音。问题是模块环回中存在一个长期存在的错误,导致它有长达一秒的延迟。手动循环
pacat -r --latency-msec=1 -d rtp.monitor | pacat --latency-msec=1 -d alsa_output.pci-0000_00_1b.0.analog-stereo
Run Code Online (Sandbox Code Playgroud)
修复了延迟问题但没有解决问题;声卡锁定问题又回来了。
潜在的解决方案,首先是最理想的,包括:
1) 将音频直接从一个用户传送到另一个用户
我尝试过的第一件很明显的事情是行不通的
pacat -r --latency-msec=1 -d rtp.monitor | sudo -u steamdude pacat --latency-msec=1 -d alsa_output.pci-0000_00_1b.0.analog-stereo
Run Code Online (Sandbox Code Playgroud)
这失败了,输出如下:
Home directory not accessible: Permission denied
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
write() failed: Broken pipe
Run Code Online (Sandbox Code Playgroud)
请注意,两个用户都在彼此的组中,我通过 chmod 和 setfacl 授予了对他们主目录的完全控制权。
2) 通过 RTP 多播将音频从一个用户传送到另一个用户
我不知道该怎么做,因为pulse 不会显示来自同一台计算机的流媒体设备。
3) 通过 RTP 将音频从一个 TTY 发送到另一个 TTY 中的轻量级虚拟机(或专门设计的 chroot?)。
这应该可行,但它是所有可能解决方案中最不优雅的,并且占用大量系统资源。
我愿意做这些事情中的任何一件,但我宁愿知道如何以最有效的方式去做。