Reproducir un video con VLC en X11 desde un terminal remoto

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?

preguntado el 09 de marzo de 12 a las 15:03

2 Respuestas

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 opción como en:

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.

respondido 14 mar '12, 17:03

Any idea what one would do if the DISPLAY variable is not set? Just use 0? - puk

You need to set the DISPLAY variable.

Por ejemplo:

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.

ACTUALIZACIÓN: As you can see from the comments below the OP found the command line option:

--x11-display :0

respondido 14 mar '12, 16:03

Thanks for your answer it pointed me to the right direction, however I haven't found the EXACT cvlc command to accomplish this u.u I've googled and seems to be the option --x11-display 0 but I get a window wich title is "Colour AsCii Art" So libcaca it's being used to render the video as AsCii =/ mmm... - Metafaniel

I've finally got the correct CVLC command line I needed, THANKS you were helpful. HOWEVER I can't mark your solution as an answer, it's not complete. Should I ask my own question or you'll complement yours with the command? Thanks - Metafaniel

Have you tried setting the "Video Output" from "Preferences" in the GUI and seeing if it saves the setting for future use? - zaf

Yes but it won't help for some reason. OK I'll post the answer, thanks for all your help. I hope you find it useful too. Te option I said above had a wrong attribute, it should be given as follows: --x11-display :0 - Metafaniel

@Metafaniel I've added your contribution to the answer, in case future viewers need it. - zaf

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.