Play a video with VLC in X11 from remote terminal

Metafaniel picture Metafaniel · Mar 9, 2012 · Viewed 37.5k times · Source

I've got a problem, I hope you can help me. I've got some slim terminals with Linux where a little script it's launched every time they boot. This script has a single cvlc command line which it's the following:

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

This works OK because the terminals start the X11 environment and then the script it's launched from autostart; the video it's played and rendered nicely y an LCD. My problem comes when for a reason or another, I need to kill the cvlc process remotely and start it again. I ssh the terminal with the same user logged in in the X11 environment, I launch the code line described above and the video plays, yes... but IN the terminal I'm logged in!

So the videos plays in only-characters mode, it's being rendered as text in my console; of course nothing can be seen in the X11 environment. So my question is: How can I launch my cvlc command AND play the video in X11 NOT in the console itself???

If I just try to play it with no options, I got the following output:

$ 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:~$ 

So the problem is, of course, I've got no direct access to X11 from my remote terminal, so how can I play a video from my remote console using cvlc or vlc?

Please help me, THANKS A LOT!!!

Answer

Metafaniel picture Metafaniel · Mar 14, 2012

The $DISPLAY environmental variable holds the value of the X server instance where graphical apps can be run. Therefore this value it's needed:

echo $DISPLAY
:0

Then this value must be used with cVLC --x11-display option as in:

cvlc --x11-display :0 video.mp4

This way, the video will output to the X Server session even if this command it's used in a remote ssh session. However if the session it's finished, the video will stop, so you need to background the job, so when you logout, the video continues to play:

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

As a reference of my exact needs that maybe you'll find useful, if you need to run the video in the remote terminal and you need it to loop, with no visible VLC interface, fullscreen and with absolute no output in console, because if you run the command as in the previous example, maybe VLC output will be thrown in another SSH session with the same user, you'll need to run it this way:

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

Standard output and error won't appear on the session this way.