我有一个 Arch Linux 系统,其中配置了 alsa 和 pulseaudio。alsa 设置为使用 pulseaudio 默认设备。Pulseaudio 正在运行,在 127.0.0.1 上启用了 tcp 模块,并将 anonymous 设置为 true。系统有 2 个用户 user1(标准用户)和 user2(标准用户)。我已尝试过这speakertest
两个用户,这两个用户都可以访问扬声器。
我有一个命令行音频播放器,在 user1 上运行良好。我编写了一个wrapper
程序,它对 user2 执行setreuid()
和setregid()
,然后exec()
使用音频播放器播放音频文件。我wrapper
为二进制文件提供了SUID
和SGID
权限sudo chmod 6555 wrapper
。
当我以用户 1 的身份正常运行音频播放器(不使用包装程序)时,我可以听到来自扬声器的音频。当我使用sudo -u user2 audioplay <file>
用户 1 的 shell 正常运行音频播放器时,它也能正常工作。
然而,当我使用 user1 的 shell 中的包装器时wrapper <file>
,扬声器中没有声音。包装器 exec() 播放器时出了什么问题?
令人惊讶的是,当我尝试时sudo -u user2 wrapper <file>
,我能够再次听到音频......