我有一个POST函数,我试图在其中使用child_process启动VLC播放器。我正在使用最新的Raspbian版本。
router.post('/', function (req, res) {
let spawn = require('child_process').spawn;
let vlc = spawn('vlc');
vlc.stderr.on('data', function(data) {
console.log(data.toString());
});
vlc.on('exit', function(code){
console.log('Exit code: ' + code);
});
res.send({success: true})
});
触发请求后,我收到此消息:
不应将VLC作为root用户运行。抱歉。如果您需要使用 您可以使用的实时优先级和/或特权TCP端口 vlc-wrapper(确保它是Set-UID根目录,并且不能由 非信任用户优先)。
由于VLC无法以root用户身份运行,因此我在Vlc启动脚本中添加了UID参数,现在看起来像这样:
let vlc = spawn('vlc' ,{uid: 1000});
其中UID:1000是我一直使用的用户的ID。
触发请求后,我在日志中又收到一条消息:
[016f9960]主要libvlc错误:无法打开配置文件 (/root/.config/vlc/vlcrc):权限被拒绝
无法访问主目录:权限被拒绝
[01762eb0] vlcpulse音频输出错误:PulseAudio服务器连接 失败:连接被拒绝
[0176bde8] dbus接口错误:无法连接到D-Bus 会话守护程序:如果没有$ DISPLAY,则无法自动启动dbus守护程序 对于X11
[0176bde8]主接口错误:没有合适的接口模块 [016f9960]主要libvlc错误:接口“ dbus,无”初始化 失败
[0176c7a8]主接口错误:没有合适的接口模块 [016f9960]主要libvlc错误:接口“ globalhotkeys,none” 初始化失败
[016f9960]主libvlc:使用默认界面运行vlc。采用 'cvlc'使用不带接口的vlc。
错误:环境中未设置XDG_RUNTIME_DIR。
[0176c7a8] skins2接口错误:无法初始化OSFactory
[017614e0]主播放列表:播放列表为空
[0176c7a8] [cli] lua接口:在主机“ *控制台”上侦听。
播放器无法运行。但是,如果我通过ssh运行相同的命令,它将运行。是什么原因导致节点无法运行?
答案 0 :(得分:0)
问题是我的服务器正在使用
运行nodemon
我实际上尝试了一切,然后当我要放弃时,我意外地使用 node 命令以正常方式启动服务器。 VLC正在启动,没有任何错误。我不必在参数中传递任何用户ID。像这样工作正常:
let spawn = require('child_process').spawn;
let vlc = spawn('vlc');
我真的很好奇nodemon为什么会引起这种行为。