Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Play a video with VLC in X11 from remote terminal

Tags:

video

x11

vlc

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 is 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 is 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?

like image 803
Metafaniel Avatar asked Mar 09 '12 15:03

Metafaniel


2 Answers

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.

like image 181
Metafaniel Avatar answered Nov 12 '22 04:11

Metafaniel


You need to set the DISPLAY variable.

For example:

export DISPLAY=:0

You may need to use set instead of export (and/or change :0 to something similar, I cannot test at the moment, google for the DISPLAY variable) but thats the general idea to say which output display you want the window to appear.

UPDATE: As you can see from the comments below the OP found the command line option:

--x11-display :0
like image 28
zaf Avatar answered Nov 12 '22 04:11

zaf