在远程终端中使用X11播放VLC视频

12

我有一些使用Linux的轻量级终端,每次启动它们时都会运行一个小脚本。该脚本只有一个命令行,即以下cvlc命令:

cvlc --quiet --fullscreen --no-osd --loop playlist.xspf

这个工作很好,因为终端启动了X11环境,然后从自动启动的脚本中启动;视频可以在LCD屏幕上播放和渲染,效果不错。

我的问题是,出于某种原因,我需要远程杀死cvlc进程并重新启动。我使用相同用户登录X11环境的ssh终端,在其中启动上述代码行,视频会播放,但播放在我登录的终端中!

所以视频以只有字符模式的形式播放,它被呈现为文本,当然在X11环境中什么也看不到。那么我的问题是:如何启动我的cvlc命令并在X11中播放视频,而不是在控制台中播放?

如果我尝试不使用任何选项播放它,我会得到以下输出:

$ cvlc playlist.xspf 
VLC media player 1.1.4 The Luggage (revision exported)
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS")
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE")
[0x9cb1114] inhibit interface error: Failed to connect to the D-Bus session daemon: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

[0x9cb1114] main interface error: no suitable interface module
[0x9cb0754] main interface error: no suitable interface module
[0x9c17914] main libvlc error: interface "globalhotkeys,none" initialization failed
[0x9caeca4] dummy interface: using the dummy interface module...
[0x9cabfa4] main playlist: stopping playback
[0x9dedb34] xcb_xv generic error: parent window not available
[0x9dedb34] xcb_x11 generic error: parent window not available
[0x9dedb34] xcb_glx generic error: parent window not available
[0x9dedb34] fb generic error: cannot get terminal mode (Invalid argument)
Blocked: call to signal(28, 0x60ae4e0)
Blocked: call to setlocale(6, "")
Blocked: call to sigaction(20, 0x46935e0, (nil))
Blocked: call to sigaction(2, 0xb730c948, (nil))
                                                                                            Blocked: call to sigaction(15, 0xb730c948, (nil))
Blocked: call to sigaction(28, 0xb730c948, (nil))
^C[0x9cae2b4] signals interface error: Caught Interrupt signal, exiting...
umboard@MB124205:~$ 
当然,问题是我没有直接从远程终端访问X11,那么我如何使用cvlc或vlc在远程控制台播放视频呢?
2个回答

15

$DISPLAY环境变量保存了X服务器实例的值,该实例可以运行图形应用程序。因此,需要使用此值:

echo $DISPLAY
:0

然后这个值必须与cVLC --x11-display选项一起使用,如下所示:

cvlc --x11-display :0 video.mp4

这样,即使在远程ssh会话中使用此命令,视频也将输出到X Server会话。但是,如果会话结束,视频将停止播放,因此您需要将作业放入后台,以便在注销时视频继续播放:

cvlc --x11-display :0 video.mp4 &

以下是一个关于我的确切需求的参考,也许你会发现它有用。如果你需要在远程终端中运行视频,并且希望它循环播放,没有可见的VLC界面,全屏显示,并且在控制台中没有任何输出,因为如果你像前面的例子一样运行命令,可能会导致VLC输出在使用相同用户的另一个SSH会话中,那么你需要以这种方式运行它:

cvlc -q --no-osd -L -f --no-video-title-show --x11-display :1 video.mp4 2&>1 >/dev/null &

这种方式下,标准输出和错误信息不会显示在会话中。


1
如果DISPLAY变量没有设置,您有什么想法?只需使用0吗? - puk

8
你需要设置DISPLAY变量。
例如:
export DISPLAY=:0

你可能需要使用set命令而不是export(并且/或者将:0更改为类似的内容,我目前无法测试,请在Google上搜索DISPLAY变量),但这是表达你想要窗口出现的输出显示的一般思路。
更新:从下面的评论中可以看到,OP找到了命令行选项:
--x11-display :0

1
谢谢你的回答,它让我找到了正确的方向,但是我还没有找到确切的cvlc命令来实现这个(u.u)。我已经搜索过了,似乎选项是“--x11-display 0”,但是我得到的窗口标题是“颜色ASCII艺术”。所以libcaca被用来将视频呈现为AsCii =/ 嗯... - Metafaniel
我终于得到了我需要的正确CVLC命令行,谢谢你的帮助。然而,我不能将您的解决方案标记为答案,因为它不完整。我应该提出自己的问题还是您会补充您的命令?谢谢。 - Metafaniel
你尝试过在GUI的“首选项”中设置“视频输出”,并查看是否保存了未来使用的设置吗? - zaf
是的,但出于某种原因它没有起作用。好的,我会发布答案,感谢你们的帮助。我希望你们也会觉得它有用。我之前提到的选项有一个错误的属性,应该这样给出:--x11-display :0 - Metafaniel
1
@Metafaniel,我已将您的贡献添加到答案中,以防未来的观众需要它。 - zaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接