2017-04-26 92 views
0

背景
我有一个Linux服务器在文本模式下运行,没有安装X.我打算使用directfb将视频和图像展示给显示器(实际上是一台电视机)。我已经安装了vlc-nox,如果它在默认控制台(物理键盘)中调用,它会按预期运行。
如何在以文本模式运行的Linux服务器中通过ssh启动vlc-nox?


问题
当通过SSH运行它,不显示视频,但声音是好的。该错误是如下:

directfb vout display error: Cannot create primary surface 
fb vout display error: cannot get terminal mode (Inappropriate ioctl for device) 
core video output error: video output creation failed 
core decoder error: failed to create video output


FBI的方式
我认为FBI也面临着同样的问题,因为它会引发错误象下面这样:
ioctl VT_GETSTATE: Inappropriate ioctl for device (not a linux console?)
不过,FBI提供这种情况下的解决方案:-T -vt <arg> start on virtual console <arg>
因此,sudo fbi -T 1 /path/to/image/file会按预期显示图像。


问题:什么是VLC的方式吗?

+0

我终于找到了一种方法,并将其标记为答案。 – TerrenceSun

回答

0

我终于有了一个解决方案,所以我把它张贴在这里,以防有人有同样的问题。

我的理解是,vlc需要在真正的tty下运行,而不是伪tty。我的解决方案由两部分组成。

第1部分:让vlc作为守护程序模式运行。

  1. 为守护程序创建一个用户并分配音频和视频特权。

#useradd -c "VLC daemon" -d/-G audio,video -M -p \! -r -s /bin/false -u 75 -U vlcd

使用从tty1

我与单元ubuntu下尝试这样

  • 在启动时运行VLC。

    [Unit] 
    Description=VLC server 
    After=network.target auditd.service 
    [email protected] 
    [Service] 
    ExecStart=/usr/bin/vlc -I rc --rc-host 127.0.0.1:8080 
    ExecReload=/bin/kill -HUP $MAINPID 
    KillMode=process 
    Restart=on-failure 
    RestartPreventExitStatus=255 
    User=vlcd 
    Type=simple 
    #StandardError=tty 
    StandardOutput=tty 
    StandardInput=tty 
    RemainAfterExit=yes 
    [Install] 
    WantedBy=multi-user.target 
    Alias=vlc.service 
    

    请把诺蒂奇的ConflictsExecStartStandardInput,并且StandardOutput部分。

    • Conflicts,它会绕过默认的getty服务,否则它应该是手动禁用由#systemctrl disable [email protected]
    • ExecStart,不使用-d开关,这意味着它会继续运行并占用VT 1,这是由Alt键激活 - F1-rc启用远程连接接口。
    • StandardInput/Output中,指定tty作为输入和输出设备。

    第2部分:与守护进程远程通话,让它播放文件。

    由于--rc-host指定了一个本地端口,我们首先需要ssh到服务器。然后,使用telnet与vlc进行交互(添加,播放,暂停)。

    telnet 127.0.0.1 8080 
    add /path/to/video/file 
    
  • 相关问题