Das low Budget DIY Media Center Teil 2

Customizing

Zentrale XBMC Library

Achtung: Dieses Feature ist als kompliziert und experimental aufgeführt.
Alle XBMC Instanzen die auf die zentrale Library zugreifen müssen dieselbe Version von XBMC haben!

Da ich mehrere Raspberry Pi’s mit XBMC im Haus habe möchte ich die Library an einem zentralen Ort speichern, damit ich sie nur an einem Ort aktuell halten muss und die “watched” Status überall zur Verfügung habe. Ebenso wird die aktuelle Position in einem Film gespeichert (wenn er beendet wird) und kann dann in einem anderen Zimmer an der Stelle fortgesetzt werden.
Die Lösung dafür heisst: MySQL
Da ich sowiso sämtliche Medien von meinem NAS streame und dieses ohnehin 24/7 online ist war es naheliegend MySQL darauf zu installieren und die XBMC Library zu hosten. Für die XBMC Konfiguration bedeutet das lediglich ein kleiner Eingriff.
Im File (muss von Hand erstellt werden falls noch nicht vorhanden):

nano ~/.xbmc/userdata/advancedsettings.xml

muss foldendes ergänzt werden (wenn das File bereits existiert nur den Text von <videodatabase> bis </videolibrary> kopieren), bei den Tags <host> muss die IP Adresse des MySQL Servers eingetragen werden:

<advancedsettings>
    <videodatabase>
        <type>mysql</type>
        <host>***.***.***.***</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
    </videodatabase>
    <musicdatabase>
        <type>mysql</type>
        <host>***.***.***.***</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
    </musicdatabase>
     <videolibrary>
          <importwatchedstate>true</importwatchedstate>
     </videolibrary>
</advancedsettings>

Der vollständige XBMC Artikel dazu ist hier

Der Infrarot Empfänger

Als Infrarot Empfänger dient mir eine einfach TSOP4838 Diode, welche an den GPIO Pins des Raspberry angeschlossen werden. Für die Verbindung habe ich aus einem alten Computer das Speaker Kabel, welches vom Mainboard zum Gehäuse führt genommen.
tsop4838_wiring]20130611-185242.jpg

Harmony Konfiguration

Als Fernbedienung verwende ich eine Logitech Harmony One+. Diese ist etwas komplizierter zum konfigurieren als eine herkömmliche RC6 Infrarot Fernbedienung. Die wichtigesten Punkte:

  • XBMC als Microsoft Media Center SE einrichten
  • Device Delay Settings für XBMC gemäss Screenshot einstellen
  • Device Command Repeat für XBMC gemäss Screenshot einstellen

XBMC Device Typ
harmony_deviceTyp
Device Delay Settings
harmony_devicedelay
Device Command Repeat Settings
harmony_deviceCMDrepeat

Die Lirc Konfiguration

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Thu Jun  6 17:16:50 2013
#
# contributed by
#
# brand:                       HarmonyOne.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
  name  HarmonyOne.conf
  bits           13
  flags RC6|CONST_LENGTH
  eps            30
  aeps          100
  header       2665   860
  one           472   414
  zero          472   414
  pre_data_bits   24
  pre_data       0x1BFF83
  gap          105899
  min_repeat      2
#  suppress_repeat 2
#  uncomment to suppress unwanted repeats
  toggle_bit_mask 0x8000
  rc6_mask    0x100000000
      begin codes
          KEY_UP                   0x1BE1
          KEY_LEFT                 0x1BDF
          KEY_DOWN                 0x1BE0
          KEY_RIGHT                0x1BDE
          KEY_OK                   0x1BDD
          KEY_BACK                 0x1BDC
          KEY_PAUSE                0x1BE9
          KEY_STOP                 0x1BE6
          KEY_PLAY                 0x1BE9
          KEY_FASTFORWARD          0x1BEB
      end codes
end remote

Das low Budget DIY Media Center Teil 1

Die Idee XBMC als Media Center auf meinem TV zu verwenden geisterte schon lange in meinem Kopf herum. Was sollte aber als Hardware dienen? Ich hatte diverse Ansprüche wie: lüfterloser Betrieb, kleine Bauform, geringer Stromverbrauch, Infrarot bedienbar, TOSLINK Out etc.
Den Toslink Out benötige ich um Musik von iOS Devices via Media Center auf mein Sound System zu streamen ohne dabei immer den TV anschalten zu müssen.
[column-group]
[column]Nach unzähligen Stunden Testen und Konfigurieren der ATV2 und Dlink BoxeeBox wurde ich per Zufall auf die Raspberry Pi aufmerksam. Das kleine kreditkartengrosse Wunderding ist mit einem 700Mhz ARM11 CPU und 512 MB Ram (Model B Revision2) ausgestattet und lässt sich mit Linux betreiben.

]RaspberryPi
Dank des heute 19 Jährigen Sam Nazarko aus London der das Media Center XBMC für die Raspberry Pi portiert hatte (Raspbmc) war für mich die Wahl der Hardware klar, vom fehlenden Toslink abgesehen.
Nun die Schritt für Schritt Anleitung zum Media Center:

Equipement:

Installation:

Kühlkörper montieren

Da die Kühlkörper mit einer selbstklebenden Wärmeleitpaste ausgestattet sind ist es relativ einfach diese zu montieren. Einfach die Schutzfolie von der Paste abziehen und den Kühlkörper gut auf das entsprechende Element andrücken.
Raspi_Heatsinks

Raspbmc installieren

SD Card in einen Kartenleser stecken und den entsprechenden Installer ausführen:
Windows
Gemäss Anleitung hier
Linux

wget http://svn.stmlabs.com/svn/raspbmc/testing/installers/python/install.py
chmod +x install.py
./install.py

Mac OS

curl -O http://svn.stmlabs.com/svn/raspbmc/testing/installers/python/install.py
chmod +x install.py
./install.py

Danach die SD Card in die Raspberry Pi stecken und die Installation fertig laufen lassen.
Weiter zu Teil 2 ->

VB.net AES Encryption Modul

Benötigt: .Net Framework 3.5 (AES Cryptosystem)

Test Programm

Imports Encrpyt.CryptoAES.Crypto
Module Module1
    Sub Main()
        Dim enc = New Crypto
        enc.key = "x4!UnUfugeyaprachuT8DesAst55ew!2"
        Dim cstring As String = enc.EncryptString("I like encryption!")
        Console.WriteLine("Encrypted: " & cstring)
        Console.WriteLine("Decrypted: " & enc.DecryptString(cstring))
        Dim k = Console.ReadKey()
    End Sub
End Module

Encryption Modul

Imports System.Security.Cryptography
Imports System.IO
Imports System.Text
Module CryptoAES
    Public Class Crypto
        Private _key As String
        Public Property key() As String
            Get
                Return _key
            End Get
            Set(ByVal value As String)
                _key = value
            End Set
        End Property
        Public Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
            Dim AES As New AesCryptoServiceProvider()
            'Set secret key for AES algorithm.
            'A 256-bit key and an IV are required for this provider.
            AES.KeySize = 256
            AES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
            'Set the initialization vector.
            AES.IV = ASCIIEncoding.ASCII.GetBytes(Left(sKey, 16))
            'Create the AES encryptor from this instance.
            Dim aesencrypt As ICryptoTransform = AES.CreateEncryptor()
            'Create the crypto stream that transforms the file stream by using AES encryption.
            Dim cryptostream As New CryptoStream(fsEncrypted, _
                                                aesencrypt, _
                                                CryptoStreamMode.Write)
            'Read the file text to the byte array.
            Dim bytearrayinput(CInt(fsInput.Length - 1)) As Byte
            fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
            'Write out the AES encrypted file.
            cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
            cryptostream.Close()
            fsInput.Close()
        End Sub
        Public Sub DecryptFile(ByVal sInputFilename As String, _
            ByVal sOutputFilename As String, _
            ByVal sKey As String)
            Dim AES As New AesCryptoServiceProvider()
            'A 64-bit key and an IV are required for this provider.
            'Set the secret key for the AES algorithm.
            AES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
            'Set the initialization vector.
            AES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
            'Create the file stream to read the encrypted file back.
            Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
            'Create the AES decryptor from the AES instance.
            Dim aesdecrypt As ICryptoTransform = AES.CreateDecryptor()
            'Create the crypto stream set to read and to do a AES decryption transform on incoming bytes.
            Dim cryptostreamDecr As New CryptoStream(fsread, aesdecrypt, CryptoStreamMode.Read)
            'Print out the contents of the decrypted file.
            Dim fsDecrypted As New StreamWriter(sOutputFilename)
            fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
            fsDecrypted.Flush()
            fsDecrypted.Close()
            fsread.Close()
        End Sub
        Public Function EncryptString(ByVal sString As String) As String
            'Initialize AES Crypto Provider
            Dim AES As New AesCryptoServiceProvider()
            'Set KeySize to 256 Bit
            AES.KeySize = 256
            'Set the initialization vector and the encryption key
            AES.IV = ASCIIEncoding.ASCII.GetBytes(Left(_key, 16))
            AES.Key = ASCIIEncoding.ASCII.GetBytes(_key)
            'Create the AES Encryptor
            Dim aesencrypt As ICryptoTransform = AES.CreateEncryptor
            'Convert plain text to bytes
            Dim plaintext() As Byte = System.Text.Encoding.Unicode.GetBytes(sString)
            'Create the Stream
            Dim ms As New System.IO.MemoryStream
            'Create the encoder
            Dim encStream As New CryptoStream(ms, aesencrypt, CryptoStreamMode.Write)
            encStream.Write(plaintext, 0, plaintext.Length)
            encStream.FlushFinalBlock()
            Return Convert.ToBase64String(ms.ToArray)
        End Function
        Public Function DecryptString(ByVal sString As String) As String
            'Initialize AES Crypto Provider
            Dim AES As New AesCryptoServiceProvider()
            'Set KeySize to 256 Bit
            AES.KeySize = 256
            'Set the initialization vector and the encryption key
            AES.IV = ASCIIEncoding.ASCII.GetBytes(Left(_key, 16))
            AES.Key = ASCIIEncoding.ASCII.GetBytes(_key)
            'Create the AES Decryptor
            Dim aesdecrypt As ICryptoTransform = AES.CreateDecryptor
            'Convert plain text to bytes
            Dim encryptedstring() As Byte = Convert.FromBase64String(sString)
            'Create the Stream
            Dim ms As New System.IO.MemoryStream
            'Create the decoder
            Dim decStream As New CryptoStream(ms, aesdecrypt, CryptoStreamMode.Write)
            decStream.Write(encryptedstring, 0, encryptedstring.Length)
            decStream.FlushFinalBlock()
            Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
        End Function
    End Class
End Module

Java Client Cache auf Terminal Server

Java Client Cache auf Terminal Server

Problembeschreibung:

Wenn die Profilgrössenbeschränkung von Benutzern auf einem Terminal Server auf einen niedrigen Wert (z.B 30 MB) eingestellt ist, kann es vorkommen, dass das Profil schnell überfüllt ist. Der Grund dafür ist der Java Cache der für jeden Benutzer im Roaming Profil gespeichert wird.

Lösung (zentraler Java Cache für alle Benutzer)

  1. Schreib Rechte für %SystemDrive%\Windows\Temp für alle Domain Users erteilen
  2. Den Ordner %SystemDrive%\Windows\Sun\Java\Deployment erstellt falls nicht vorhanden
  3. %UserProfile%\Application Data\Sun\Java\Deployment bei allen Usern löschen (wird neu erstellt beim ersten Besuch eine Java Seite)
  4. In diesem Ordner 2 Dateien anlegen
    deployment.config (Evtl. Laufwerkbuchstabe ändern

    deployment.system.config=file\:C\:\\WINDOWS\\Sun\\Java\\Deployment\\deployment.properties
    deployment.system.config.mandatory=true
    

    deployment.properties (Evtl. Laufwerkbuchstabe ändern und Java Version!)

    #
    deployment.cache.max.size=1000m
    deployment.cache.max.size.locked
    #
    deployment.javaws.splash.cache=C\:\\WINDOWS\\TEMP\\Java\\javaws\\cache\\splashes\\splash.xml
    deployment.javaws.splash.cache.locked
    #
    deployment.javaws.cachedir=C\:\\WINDOWS\\TEMP\\JAVA\\javaws\\cache
    deployment.javaws.cachedir.locked
    #
    deployment.javaws.cache.dir=C\:\\WINDOWS\\TEMP\\JAVA\\javaws\\cache
    deployment.javaws.cache.dir.locked
    #
    deployment.user.cachedir=C\:\\WINDOWS\\Temp\\JAVA\\cache
    deployment.user.cachedir.locked
    #
    deployment.user.tmp=C\:\\WINDOWS\\Temp\\JAVA\\tmp
    deployment.user.tmp.locked
    #
    deployment.system.cachedir=C\:\\WINDOWS\\Temp\\JAVA\\cache
    deployment.system.cachedir.locked
    #
    #deployment.browser.vm.mozilla=false
    #deployment.browser.vm.mozilla.locked
    #
    #deployment.browser.vm.iexplorer=false
    #deployment.browser.vm.iexplorer.locked
    #
    deployment.javaws.shortcut=NEVER
    deployment.javaws.shortcut.locked
    #
    deployment.proxy.type=3
    deployment.proxy.type.locked
    #
    deployment.javaws.autodownload=NEVER
    deployment.javaws.autodownload.locked
    #
    deployment.javapi.jre.1.6.0_18.args=-Xmx192M
    

tail für Windows

Wer hatte nicht auch schon das Bedürfnis ein Logfile “live” anzeigen zu lassen um es nicht ständig neu zu öffnen. Entwickler und diejenigen, die sich mit WSUS beschäftigen wissen wovon ich spreche.
Um den Windows Server Update Services zu troubleshooten muss ständig das Logfile in C:\Windows\WindowsUpdate.log neu geöffnet werden um Errormeldungen anzuschauen.
Unter Linux gibt es ein tolles Tool, mitdem man Textfiles live anschauen kann, bis Ctrl+C gedrückt wird. Dieses Tool heisst tail mit dem Switch -f werden neue Einträge im File kontinuierlich angezeigt.
Wäre doch auch gut für Windows? Gibt es!
GUI
Tail for Win32
mTail
WinTail
Command Line
Windows Server 2003 Resource Kit Tools (getestet auf Server 2008 und Windows 7!)
C:\Users\pri>tail /?
usage: TAIL [switches] [filename]*
switches: [-?] display this message
[-n] display last n lines of each file (default 10)
[-f filename] keep checking filename for new lines

Error parsing the server "ServerName" "Clients.xml" file.

Windows 7 und der vSphere Infrastructure Client

Ich arbeite seit kurzem mit Windows 7 und habe sehr rasch festgestellt, dass der vSphere Client überhaubt nicht funktioniert. Das Problem ist bei VMware bekannt und sollte mit dem Endkunden Release von Windows 7 behoben sein. Ich verwende das RC; evtl. ist dieses Problem schon bei dem RTM (Release to Manufacturers) gelöst.
fehler1fehler2
Es gibt allerdings einen Workaround für dieses Problem:
1. Obtain a copy of %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\System.dll from a non Windows 7 machine that has .NET 3.5 SP1 installed.
2. Create a folder in the Windows 7 machine where the vSphere client is installed and copy the file from step 1 into this folder. For example, create the folder under the vSphere client launcher installation directory (+%ProgramFiles%\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\Lib+).
3. In the vSphere client launcher directory, open the VpxClient.exe.config file in a text editor and add a element and a element as shown below. Save the file.
<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>

<runtime>
<developmentMode developerInstallation=”true”/>
</runtime>
</configuration>
3. Create a batch file (e.g. *VpxClient.cmd*) in a suitable location. In this file add a command to set the DEVPATH environment variable to the folder where you copied the System.dll assembly in step 2 and a second command to launch the vSphere client. Save the file. For example,
SET DEVPATH=%ProgramFiles%\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\Lib
“%ProgramFiles%\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe”
4. (Optional) Replace the shortcut on the start menu to point to the batch file created in the previous step. Change the shortcut properties to run minimized so that the command window is not shown.
You can now use the VpxClient.cmd (or the shortcut) to launch the vSphere client in Windows 7.
Note that this workaround bypasses the normal .NET Framework loading mechanism so that assembly versions in the DEVPATH folder are no longer checked. Handle with care
Trackback: VMware Thread

mkv Dateien in avi (xvid) konvertieren unter Linux für PS3

Jeder der sich gerne mal HD Filme via Playstation 3 anschauen will kennt das Problem. Das gebräuchlichste Format für Filme mit einer Auflösung von 720p oder 1080p ist Matroska (.mkv)
Die Playstation 3 hat keinen Codec um Matroska Files zu decodieren. Desshalb müssen diese Files konvertiert werden.
Da ich hauptsächlich mit Linux arbeite konvertiere ich die Filme mit Slackware. Von dem dafür eingesetzten Programm ffmpeg gibt es auch ein GUI.
win_logolinux_logo WinFF

ffmpeg -i INPUT_FILE -f mp4 -r 23.976 -vcodec libx264 -s 1280x720 -b 3000kb -aspect 16:9 -flags +loop -cmp +chroma -deblockalpha 0 -deblockbeta 0  -maxrate 3500k -bufsize 4M -bt 256k -refs 1 -bf 3 -coder 1 -me_method umh -me_range 16 -subq 7 -partitions +parti4x4+parti8x8+partp8x8+partb8x8 -g 250 -keyint_min 25 -level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec libfaac -ab 384kb -ar 48000 -ac 2 OUTPUT.MP4

RDP bricht ohne Timeout sofort ab

Ich hatte kürzlich das Problem, dass ich mich nicht mehr via RDP auf meinen PC zuhause verbinden konnte. Nach stundenlangem herumgebastle hatte ich dann endlich die Lösung gefunden.

Das Problem:

Die Ursache war der neuste Treiber von NVIDIA (6.14.11.7519) und XP SP3, welche scheinbar nicht kompatibel sind.
Im Event Viewer erscheint der Event 26 Application Popup: Application popup: : \SystemRoot\System32\RDPDD.dll failed to load

Die Lösung:

Manuell

In der Registry muss ein zusätzliche Eintrag gemacht werden, der die Session Image Size erhöht
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Neuen DWORD Wert: SessionImageSize mit Wert dword:00000020 (Hex für 32)

oder Reg Datei importieren

SessionImageSize.reg (Rechtsklick -> Speichern unter)