节点使用child_process

时间:2019-01-06 03:55:14

标签: node.js vlc child-process

我有一个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运行相同的命令,它将运行。是什么原因导致节点无法运行?

1 个答案:

答案 0 :(得分:0)

问题是我的服务器正在使用

运行
  

nodemon

我实际上尝试了一切,然后当我要放弃时,我意外地使用 node 命令以正常方式启动服务器。 VLC正在启动,没有任何错误。我不必在参数中传递任何用户ID。像这样工作正常:

let spawn = require('child_process').spawn;
let vlc = spawn('vlc');

我真的很好奇nodemon为什么会引起这种行为。