Узел запуска VLC Player с помощью child_process - PullRequest
0 голосов
/ 06 января 2019

У меня есть функция POST, в которой я пытаюсь запустить проигрыватель VLC, используя child_process. Я использую последнюю версию 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, я добавил аргумент UID в сценарий запуска vlc, и теперь он выглядит следующим образом:

let vlc = spawn('vlc' ,{uid: 1000});

Где UID: 1000 - это идентификатор пользователя, которого я всегда использую.

После запуска запроса я получаю еще одно сообщение в журнале:

[016f9960] основная ошибка libvlc: не удается открыть файл конфигурации (/root/.config/vlc/vlcrc): в доступе отказано

Домашний каталог недоступен: в доступе отказано

[01762eb0] Ошибка вывода звука vlcpulse: соединение с сервером PulseAudio ошибка: соединение отклонено

[0176bde8] Ошибка интерфейса dbus: не удалось подключиться к D-Bus Сеансный демон: Невозможно автоматически запустить dbus-демон без $ DISPLAY для X11

[0176bde8] ошибка основного интерфейса: нет подходящего интерфейсного модуля [016f9960] основная ошибка libvlc: инициализация интерфейса "dbus, none" не удалось

[0176c7a8] ошибка основного интерфейса: нет подходящего интерфейсного модуля [016f9960] основная ошибка libvlc: интерфейс "globalhotkeys, none" инициализация не удалась

[016f9960] main libvlc: Запуск vlc с интерфейсом по умолчанию. использование 'cvlc' для использования vlc без интерфейса.

ошибка: XDG_RUNTIME_DIR не установлен в среде.

[0176c7a8] Ошибка интерфейса skins2: невозможно инициализировать OSFactory

[017614e0] основной список воспроизведения: список воспроизведения пуст

[0176c7a8] [cli] lua interface: Прослушивание на хосте "* console".

Плеер не запускается. Но если я выполню ту же команду через ssh, она запустится. Что может привести к тому, что узел не будет запущен?

1 Ответ

0 голосов
/ 06 января 2019

Проблема заключалась в том, что мой сервер работал с использованием

nodemon

Я буквально все перепробовал, а потом, когда собирался сдаться, я случайно запустил сервер обычным способом, используя команду node . VLC запускается без каких-либо ошибок. Мне не нужно было передавать идентификатор пользователя в аргументах. Работает нормально так же, как это:

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

Мне действительно любопытно, почему nodemon может вызывать такое поведение.

...