MAC: Login Foto für lau

Wenn man wissen möchte „Wer hat an meinem MAC gespielt ?“ geht das sehr einfach mit einem kleinen Tool.

Benötigt wird das kleine Komandozeilen Tool wacaw.

Beim Testen ist mir aufgefallen, das die Dateinamenlänge bei Videos begrenzt ist.

Des weiteren will mein ffmpeg die erstellen Videos, welche unkomprimiert und dadurch sehr gross sind, nicht konvertieren. Fehlermeldung:

swScaler: Unknown format is not supported as input pixel format.
Cannot get resampling context.

Eine aktuell aus dem SVN compilierte Version macht jedoch keine Probleme und convertiert das Video.

Um nun beim Login und beim Logout die Person vor dem Rechner kurz zu fotografieren und ein kleines Video mit Ton aufzunehmen benötigt man auser dem wacaw Tool zwei Scripts.

Meine Ordnerstruktur:

/Users/meinname/shoot
/data/
/install.sh
/shoot.sh
/wacaw

Das Install Script ist zum Installieren der login/Logout Hooks. im /data/ Ordner werden die erstellten Videos+Fotos gespeichert.

install.sh:

#!/bin/bash

mydir=$(dirname $0)
cd $mydir
mydir=$(pwd)

if [ $UID != "0" ] ; then
	echo
	echo "login/logoff shooter installer"
	echo
	echo "this script installs a login/logout hook for creating a iSight login-video + screenshot"
	echo
	echo "	syntax: sudo $0"
	echo
	exit 255
fi

#install login hook
echo -e "#!/bin/bash\n" > /usr/local/bin/shootloginscript
echo -e "$mydir/shoot.sh login\n" >> /usr/local/bin/shootloginscript
chmod +x /usr/local/bin/shootloginscript
sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/shootloginscript

#install logout hook
echo -e "#!/bin/bash\n" > /usr/local/bin/shootlogoutscript
echo -e "$mydir/shoot.sh logout\n" >> /usr/local/bin/shootlogoutscript
chmod +x /usr/local/bin/shootlogoutscript
sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/shootlogoutscript

#uninstall:
#sudo defaults delete com.apple.loginwindow LoginHook
#sudo defaults delete com.apple.loginwindow LogoutHook

echo -e "shoot installation done."

shoot.sh:

#!/bin/bash

mydir=$(dirname $0)
cd $mydir
mydir=$(pwd)
mkdir $mydir/data > /dev/null 2>&1

outfile="$mydir/data/$(date "+%Y%m%d_%H%M%S")_$1"
echo "$outfile"
	./wacaw -n 5 --png --SVGA $outfile

outfile="$mydir/data/$(date "+%Y%m%d_%H%M%S")_$1"
if [ "$1" == "logout" ] ; then
	./wacaw  --video --duration 5 --VGA $outfile
else
	./wacaw  --video --duration 30 --VGA $outfile
fi

if [ "$1" == "login" ] ; then
	#if login - then make two more shoots in 30s and 60s
	(sleep 120 ; $0 after) &
	(sleep 240 ; $0 after) &
fi

Wenn die beiden Scripte erstellt sind, kann installiert werden:

cd /Users/meinname/shoot
sudo ./install.sh

Nun testweise ausloggen und wieder einloggen.
Im „data“ Ordner sind nun die Erstellten Videos und Fotos.

Nun ist es schlau dies auf einem Account zumachen, welcher ohne Passwort oder mit Auto-Login funktioniert.

Als Diebstahlschutz kann man die erstellten Fotos und Videos (vorher convertieren damit sie kleiner werden) – wenn eine Internet Verbindung besteht – mit „curl“ auf einen FTP hochladen. Der FTP Account sollte möglichst nur Schreibzugriff haben und keine Berechtigung zum löschen der hochgeladenen Dateien.
Wenn der Rechner mal gestohlen wird und der Dieb das Gerät mit aktivem Internet bootet – so hat man ein schönes Bild des Diebs und dessen IP, so wie hier.

Leider lässt sich die grüne LED der iSight-Cam nicht abschalten.

xtreamer: base-Installer funktioniert in erster Version

Das Grundgerüst ist gebaut !

Installieren der Grundlegenden Tools funktioniert: /opt mit loopfile vergrößert, bash, opensshd, mc, php5

Nun kann es an das Eingemachte gehen: Abfragen von Inhalten und erstellen von menu.rss Dateien „on the fly“.

Hoffentlich wird in die kommende Firmware 3.x der Support für MMS:// Streams und WMV3 eingebaut – so das auch hier alle online Inhalte abgespielt werden können.

Es werden bereits fleißig Stream-URLs gesammelt. Jedoch ist die Navigation durch die Streams/Podcasts noch „unter aller Sau“. Hoffen wir das die Views in der 3’er Firmware freier gestaltbar werden.

Xtreamer: Video Abspielen von der Shell aus starten

Und noch ein kleiner Lacher zum Feierabend:

Der Xtreamer hat ein Webinterface, von welchem aus man die eingebundenen Datenträger browsen kann und z.B. auch das Abspielen eines Mediafiles starten kann.

Der geneigte Programmierer denkt nun natürlich das der als deamon laufende „Dvdplayer“ über ein Socket oder wie auch immer ansprechbare API gesteuert wird.

Aber nein: Es wird eine Datei „/tmp/webrun“ erstellt, mit z.B. folgendem Inhalt:

Video C:/Videos/SD/NameDerDatei.avi

(„C:\“ – WTF ????)

und dann das Zeichen „%“ in die Datei (RemoteControl Socket) „/tmp/ir“ geschrieben.

Nun kann man beobachten wie der Xtreamer zum Homescreen zurückkehrt und zur entsprechenden Datei navigiert und letztendlich „Play“ drückt.

Ich glaube eine Art API hat der Dvdplayer, welcher auch die TV-GUI bereitstellt, nicht. Weder das Abspielen eines Mediafiles starten, noch eine Abfrage was gerade abgespielt ist möglich.

Auch das reinschauen in die PHP Sourcen des Webinterfaces ernüchtert:

<?php
session_start();
error_reporting(0);
$_SESSION['redirect'] = $_SERVER['REQUEST_URI'];
include "chooselang.php";
include '/tmp/lang.php';

//$root = "/tmp/hdd/volumes";
$root = "/tmp/usbmounts";

$filetypes = array (
'zip' => 'archive.png',
'rar' => 'archive.png',
'tar' => 'archive.png',
'exe' => 'exe.gif',
'setup' => 'setup.gif',
'txt' => 'text.png',
'htm' => 'html.gif',
'html' => 'html.gif',
'fla' => 'fla.gif',
'bin' => 'binary.png',
'xls' => 'xls.gif',
'doc' => 'doc.gif',
'ppt' => 'ppt.gif',
'sig' => 'sig.gif',
'pdf' => 'pdf.gif',
'psd' => 'psd.gif',
'gz' => 'archive.png',
'asc' => 'sig.gif',
);

if ((substr($_GET['dir'],0,2) != '/.') and (substr($_GET['dir'],0,1) != '.') and ($_GET['dir'] != '')) {
$mydir = $root . $_GET['dir'];
$mediapath =  stripslashes($_GET['dir']); }
else {
$mydir = $root;
}

$uplink = substr_replace($_GET['dir'],'',strlen($_GET['dir'])-strlen(strrchr( $_GET['dir'],'/')));

$files = myscan($mydir);
sort($files);

function myscan($dir) {
$arrfiles = array();
$arrfiles = opendir(stripslashes($dir));
while (false !== ($filename = readdir($arrfiles))) {
$files[] = $filename;
}

return $files;
}

$HDDInfo = shell_exec("df -h|grep /dev/scsi/host0/bus0/target0/lun0/part1");
sscanf($HDDInfo,"%s %s %s %s", $aaa,$HDDTotal, $HDDUsed, $HDDFree);
?>

<HTML>
<head>
<style type="text/css">
ol.decimal {list-style-type: decimal}
</style>

<script language=javascript>
function goto(form){
var index=form.File_Manager.selectedIndex
if (form.File_Manager.options[index].value != "") {
if (form.File_Manager.options[index].value == "creatfolder.php?dir=<?echo $mediapath;?>") {
[...]

Und nicht zu vergessen in welchem Ordner die Sourcen des Webinterfaces liegen: „/sbin/www“

Zumindest gehören Sie nicht root. 😉

Das nächste Problem wird das Abspielen einer Mediendatei zu starten, welche auf einem Webserver liegt.

Also: http://www.domain.tld/moviename.avi

Und was wenn diese über htaccess geschützt ist ? Wird http://username:pass@www.domain.tld/moviename.avi funktionieren ?

Morgen mal hier weiterlesen…

ds.