Tarkoitus on saada VLC käynnistymään selainkäyttöliittymän avulla.
Systeemi toimii ongelmitta jos kokeilen sitä terminaalin kautta:
php /var/www/Movies/index.php
-> Videotiedosto aukeaa ja leffa alkaa pyörimään...
Selaimella käytettäessä VLC-prosessi käynnistyy, mutta videotiedosto ei käynnisty. Selaimen kautta käynnistetty VLC-prosessi vie lähes 100% CPU:n.
- Molemmat toimivat samalla käyttäjällä
- Molempien "Parent process" on bash
- Terminaalin kautta käynnistetyn VLC-prosessin "Process group" on tyhjä ja selaimen kautta käynnistetyn "httpd"
- Selaimen kautta käynnistetty VLC-prosessi tekee 1000-kertaisen määrän "Mach System Calls" verrattuna terminaalin kautta käynnistettyyn prosessiin
Mikä mahtaa olla ongelmana?
index.php
<?php # $j on tiedostopolku videotiedostaan ja se saadaan aiemmin exec('/var/www/Movies/vlc.sh "' . $j . '" > /dev/null 2>&1 & echo $!;'); ?>
vlc.sh
#!/bin/bash # Activate VLC in 5 seconds to make it the front-most window (sleep 5; open -a VLC) & # Open video file /Applications/VLC.app/Contents/MacOS/VLC --quiet --fullscreen "$1"
Lähtökohtaisesti mielestäni on aika erikoista yrittää käynnistää käyttäjän ympäristöön ohjelmia palvelinprosessista käsin (httpd). Ehkäpä juuri siksi se ei toimi. Jos ajatellaan että sinulla olisi sama käyttäjä kirjautuneena useampaan istuntoon, niin kumpaan istunnoista palvelinprosessin käynnistämä työpöytäsovellus tulisi?
Ei kuulosta hyvältä idealta ajaa VLC:tä HTTP-palvelimen käyttäjätunnuksella; en lainkaan ihmettele, ettei se näy.
Järkevä ratkaisu voisi olla erillinen, itse kirjoitettu palvelin, joka toimisi kirjautuneen käyttäjän omilla tunnuksilla ja käsittelisi VLC:tä. PHP-skripti voisi sitten vain lähettää tälle palvelimelle ilmoituksen, mitä pitää tehdä.
Jos unohdetaan miksi näin ei kannattaisi tehdä, niin osaisiko joku kertoa miten tämän saisi toimimaan?
Apache toimii jo muutenkin omalla käyttäjätunnuksellani ja groupilla "staff", mutta silti en saa ohjelmaa käynnistymään selaimen kautta. Prosessi siis kyllä käynnistyy, mutta jostain syystä "WindowServer" ei suostu avaamaan VLC:n GUI:ta, vaan VLC-prosessi vaan jumahtaa.
Kyseessä on siis mediakoneeni, jota ohjataan toiselta koneeltani selaimen kautta ja helpottaisi elämää suuresti, jos saisin tuon VLC:nkin tottelemaan komentoja...
Suosittelen VLC:n ajamista ilman käyttöliittymää. Testaa ensin jollain äänitiedostolla (siis ilman videota):
vlc -Idummy /jokin/kappale/jossain.mp3 vlc://quit
Videoita varten ainakin Linuxissa täytyy asettaa DISPLAY-ympäristömuuttuja:
DISPLAY=":0.0" vlc -Idummy /jokin/video.mpg vlc://quit
En tunne Mac OS X:ää, mutta ympäristömuuttujat näet komentorivillä luultavasti komennolla export, joten arvaile sieltä.
Tiedät kai, että VLC:ssä on jo itsessäänkin selainkäyttöliittymä?
Miks et kokeilis ihan Mac OS X:n AppleScriptillä?
PHP+AppleScript koodi
<?php exec("osascript -e 'tell application \"VLC\"' -e 'delay 5' -e 'open \"polku/video/tiedstoon.wmv\"' -e 'activate' -e 'fullscreen' -e 'end tell'"); ?>
Pelkkä AppleScript koodi
tell application "VLC" delay 5 open "polku/video/tiedstoon.wmv" activate fullscreen end tell
Marbo kirjoitti:
Miks et kokeilis ihan Mac OS X:n AppleScriptillä?
Ei toimi tämäkään. :(
Sama juttu, eli terminaalin kautta kokeiltaessa toimii, mutta selaimen kautta tuloksena tällä kertaa pyöreä nolla, eli tämä ei käynnistä edes prosessia.
Kokeilin vielä yksinkertaistetetumpaa esimerkkiä, eli (terminaalin kautta ok - selaimen kautta osascript ei sano mitään):
Sulla on sitten jotain vikaa siellä. Koska itselläni toimii netinkauttakin aivan loistavasti.
EDIT: Olikohan se niin, että piti ajaa noita omalla tunnuksella niin toimi. Jotain pientä kikkaa piti ensin tehä niin lähti rullaan, mutta ei voi millään muistaa enään, että mitä. :/
Hieman edistystä taas...
Ongelmana on ollut se, että apache ei ole loginwindow:n "lapsi" - no sen saa kierrettyä näin, jonka jälkeen on mahdollista saada selaimen kautta ohjelmia, jne. toimimaan...
<?php $PID = exec('ps aux | grep "loginwindow" | grep -v grep | awk \'{ print $2 }\''); // Tämä toimii :D exec('sudo launchctl bsexec ' . $PID . ' osascript -e \'say "Hello"\''); ?>
Tämä ei kuitenkaan näytä toimivan VLC:n kanssa, koska se mokoma valittaa tätä: "VLC is not supposed to be run as root. Sorry."
Nyt menee ongelma jo reilusti ohi nettiohjelmoinnista, mutta jatketaan samaa ketjua, eli olisiko tietoa miten tämä ongelma ohitetaan, jotta tämä toimisi? :D
No varmaan sitten lisäät ketjuun vielä su:lla käyttäjän vaihdon takaisin.
sudo ... su pertsa -c 'VLC --jeejee biisi.mp3'
Ratkaistu:
Aihe on jo aika vanha, joten et voi enää vastata siihen.