问题

今天碰到了程序在 linux 上面运行权限的问题。情况如下:

  • 用户直接运行,ok
  • sudo 运行,报错: _simpleaudio.SimpleaudioError: Error opening PCM device. – CODE: -16 – MSG: Device or resource busy
  • 作为用户服务启动,报错: Failed to determine supplementary groups: Operation not permitted. Failed at step GROUP spawning /usr/bin/python3: Operation not permitted
  • 作为系统服务启动,报错: _simpleaudio.SimpleaudioError: Error opening PCM device. – CODE: -16 – MSG: Device or resource busy

原因

  • 直接运行时:继承用户完整的会话环境(包括 PULSE_SERVER 等音频相关变量)
  • sudo 运行时:环境变量被重置,且无法访问用户级的 PulseAudio 服务

调试

环境变量

直接给环境变量是可以运行的.

sudo -E PULSE_SERVER=unix:/run/user/$(id -u lckfb)/pulse/native DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/$(id -u lckfb) /usr/bin/python3 /userdata/Possessed_AI-34323ff/chat_with_robot.py --kws local_streaming --use_action lite3 --with_agent True --echo_cancel True --det_log 1 --chat_log 2

系统服务

必要的 id

  • uid: id -u lckfb # 获取用户UID(假设输出1000)
  • gid: getent group audio # 获取audio组GID(通常为29或audio)
  • /run/user/1000/pulse 目录存在,并且 /run/user/1000 属于用户

服务文件指明 id

[Service]
...
#User=lckfb
User=1000
#Group=audio
Group=29

#Environment="PULSE_SERVER=unix:/run/user/%U/pulse/native"
Environment="PULSE_SERVER=unix:/run/user/1000/pulse/native"
#Environment="XDG_RUNTIME_DIR=/run/user/%U"
Environment="XDG_RUNTIME_DIR=/run/user/1000"

发表评论