Suche

lichtschattenblog

Kategorie

Kodi.tv

unbeaufsichtigte Installation von Kodi unter Windows

Vorab: Bei Verwendung der hier genannten Skripte und eventuell resultierenden Schäden übernehme ich keine Haftung. Jegliche Verwendung erfolgt auf eigene Gefahr.

 

Zur unbeaufsichtigten Installation und Deinstallation von Kodi gibt es ein paar Möglichkeiten dies auszuführen.

Wichtig ist vorab die Logik zur Konfiguration von Kodi zu verstehen. Die zusammenfassend sind:

  • eine Installation von Kodi im Silent Mode kann mit dem Argument /S durchgeführt werden
  • Anpassungen von Kodi werden unter Windows unterhalb %appdata% des jeweiligen Benutzers gespeichert
  • für eine angepasste Installation und Konfiguration müssen alle wichtigen Dateien zu den vorgenommen Anpassungen erkannt und gespeichert werden. Dies kann ggf. nur durch ausprobieren erfolgen
  • teilweise können Konfigurationsdateien aus älteren Kodi-Versionen problemlos übernommen werden. Ggf. erfolgt eine automatische Aktualisierung einiger Dateien, wie db-Dateien

In meinem Fall wurde ein Kodi in Version 17.6 verwendet. Abweichend zur Standardinstallation liegen Anpassungen zur Verwendung von tvheadend (pvr.hts), deutscher Oberfläche, dem Skin, reduzierten Menüs (keine Bilder, keine Musikdatenbank, keine Videodatenbank), reduzierten Benutzerrechten (aktiviertem Master-Password) und Verwendung einer Hama-Fernbedienung vor. In diesem Fall sind die Anpassungen in den folgenden Dateien gespeichert:

Wie kann nun die unbeaufsichtigte Installation erfolgen?

Zunächst kopieren wir das Verzeichnis kodi aus %appdata% bzw. c:\users\<dein benutzername>\AppData\Roaming in eine geeignete Freigabe (bei Verwendung meiner Skripte zusätzlich in den Unterordner appdata) auf einem Server und löschen alle nicht relevanten Dateien und Ordner in der Kopie. Wer Anpassungen in weiteren Addons durchgeführt hat, muss speziell die Dateien unterhalb …\kodi\userdata\addon_data berücksichtigen.

Anschließend kann die Verteilung automatisiert über eine Gruppenrichtlinie (gpo) oder wie in meinem Fall über einen Remoteinstallationsserver (Remote Installer von Firma emco software: https://emcosoftware.com/) erfolgen. Vorteil ist die Installation und Aktualisierung von Programmen zum laufenden Betrieb.

Anbei die von mir selbst erstellten Skripte. Die Verwendung mit diesen Skripten bei Installation von Kodi 17.6 war bisher unter Windows 10 problemlos. Unter Windows 7 gab es wenige Rechner wo die Installation nicht möglich war, da ein notwendiges Windows-Update nicht installiert werden konnte (bei manueller Installation erscheint eine Fehlermeldung die mit <Enter> bestätigt werden muss). In diesem Fall und Einsatz von Gruppenrichtlinien würde die Installation nicht erfolgreich sein und erst nach 15 Minuten zum Rechnerstart die Installation abgebrochen werden. Daher empfehle ich unter Windows 7 Kodi 16.

Anbei die drei Skripte, welche in der Freigabe gespeichert werden. In diesem Verzeichnis gibt es die Installationsdatei kodi-17.6-Krypton-x86.exe und das Unterverzeichnis appdata mit den entsprechenden Dateien vom kodi (<Verzeichnis als Freigabe>\appdata\kodi).

Hinweis: In meinen Skripten ist das Verzeichnis kodi unterhalb %appdata% weiterhin vorhanden!

 

install_kodi.bat

@echo off

set "install_file=%~dp0kodi-17.6-Krypton-x86.exe"
set "refresh_appdata_script=%~dp0kodi_refresh_appdata.bat"
set "win10_kodi_lnk=C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Kodi\Kodi.lnk"


:KILL_KODI_PROCESS
taskkill /F /IM kodi.exe /T > nul


:INSTALL_KODI
"%install_file%" /S


:REFRESH_APPDATA_KODI
call "%refresh_appdata_script%"


:CREATE_KODI_LNK
REM needs admin rights
if EXIST "%win10_kodi_lnk%" (

xcopy "%win10_kodi_lnk%" "%allusersprofile%\Desktop" /R /Y > nul

)

 

kodi_refresh_appdata.bat

@echo off

set "appdata_source=\\<servername>\kodi$\appdata"

if NOT "%ProgramFiles(x86)%" == "" (
if EXIST "%ProgramFiles(x86)%\kodi\kodi.exe" GOTO REFRESH_APPDATA_KODI
) else (
if EXIST "%ProgramFiles%\kodi\kodi.exe" GOTO REFRESH_APPDATA_KODI
)

GOTO END


:REFRESH_APPDATA_KODI
if NOT "%appdata_source%" == "" (
for /F "delims=*" %%a in ('dir /B c:\Users ^| find /V /I "TEMP" ^| find /V /I "Public" ^| find /V /I "Default.migrated"') do (
if EXIST "c:\users\%%a\AppData\Roaming\" (
echo try: xcopy "%appdata_source%" "c:\users\%%a\AppData\Roaming\" /E /C /I /R /Y
xcopy "%appdata_source%" "c:\users\%%a\AppData\Roaming\" /E /C /I /R /Y
)
)
)

:END

remove_kodi.bat

@echo off

set "win10_kodi_lnk=C:\Users\Public\Desktop\Kodi.lnk"


:KILL_KODI_PROCESS
taskkill /F /IM kodi.exe /T > nul


:START_UNINSTALL_KODI
if NOT "%ProgramFiles(x86)%" == "" (
if EXIST "%ProgramFiles(x86)%\kodi\uninstall.exe" ( "%ProgramFiles(x86)%\kodi\uninstall.exe" /S )
) else (
if EXIST "%ProgramFiles%\kodi\uninstall.exe" ( "%ProgramFiles%\kodi\kodi.exe" /S )
)

:CLEAN_APPDATA_KODI

for /F "delims=*" %%a in ('dir /B c:\Users ^| find /V /I "TEMP" ^| find /V /I "Public" ^| find /V /I "Default.migrated"') do (
if EXIST "c:\users\%%a\AppData\Roaming\Kodi" (
echo try: rmdir /S /Q "c:\users\%%a\AppData\Roaming\Kodi\"
rmdir /S /Q "c:\users\%%a\AppData\Roaming\Kodi\"
)
)

:REMOVE_DESKTOP_LINK
if EXIST "%win10_kodi_lnk%" (
del "%win10_kodi_lnk%"
)

 

Anbei ein paar Erläuterungen zum Skript install_kodi.bat:

  • %~dp0 bedeutet das Verzeichnis indem sich die install_kodi.bat befindet
  • %~dp0kodi-17.6-Krypton-x86.exe ist somit bei Ausführung \\<servername>\<freigabe>\kodi-17.6-Krypton-x86.exe
  • zu Beginn wird ein ggf. bestehender Kodi-Prozess beendet
  • die Installation von Kodi mit Option /S wird durchgeführt (großes S !!!)
  • kodi_refresh_appdata.bat wird gestartet
  • Verknüpfung zum Aufruf von Kodi wird auf den Desktop für alle Benutzer kopiert
  • mit diesem Skript kann auch eine Aktualisierung oder Neuinstallation von Kodi erfolgen

Ein paar Erläuterungen zum kodi_refresh_appdata.bat:

  • zu Beginn wird das Verzeichnis mit der AppData-Kopie von kodi definiert
  • Hinweis: sofern mehrere Verzeichnisse mit abweichender AppData-Kopie definiert werden müssen (Beispiel mehrere TVHeadend-Server), kann dies ggf. durch Abgleich mit dem Standardgateway erfolgen:
    ipconfig | find /I „192.168.x.x“ if %ERRORLEVEL% == 0 ( set „appdata_source=\\<servername>\kodi$\appdata_standort1“ )
  • es wird geprüft ob Kodi installiert ist und wenn ja werden die Kodi-Konfigurationsdateien für alle Benutzer auf dem jeweiligen System (außer Public, Temp und Default.Migrated) aktualisiert
  • dieses Skript kann separat bei einer bereits erfolgten Installation zur Konfigurationsaktualisierung verwendet werden
  • die Verwendung erfordert vollen administrativen Zugriff auf die Verzeichnisse der verschiedenen Benutzer

Ein paar WICHTIGE Erläuterungen zu remove_kodi.bat:

  • zu Beginn wird ein ggf. bestehender Kodi-Prozess beendet
  • die Deinstallation von kodi über uninstall.exe mit Option /S wird durchgeführt (großes S !!!)
  • für alle Benutzerprofile auf dem PC werden die Konfigurationsdateien vom Kodi gelöscht
    Wer dies nicht möchte muss die Zeile:
    rmdir /S /Q „c:\users\%%a\AppData\Roaming\Kodi\“
    löschen oder REM zu Beginn der Zeile:
    rmdir /S /Q „c:\users\%%a\AppData\Roaming\Kodi\“
    schreiben.
    also: REM rmdir /S /Q „c:\users\%%a\AppData\Roaming\Kodi\“
    Bei falscher Anwendung und Anpassung dieser Zeile besteht die Möglichkeit von Datenverlust. Ggf. diese Zeile löschen!!!
  • es wird die Desktop-Verknüpfung von Kodi gelöscht
Advertisements

Einrichtung Fernbedienung Rii mini i7 unter Kodi 17

In diesem Artikel beschreibe ich meine Einrichtung meiner Rii Mini i7 Funk-Fernbedienung. Ich verwende hierbei Kodi 17 (aktuell Beta 7) mit Windows 10 64bit und dem Kodi-Standard-Skin Estuary.

Vor der Kodi 17-Installation hatte ich die bestehenden Kodi-Verzeichnisse unter:

  • %appdata%
  • %programfiles(x86)%

umbenannt. Dadurch stehen keine alten Einstellungen etc. zur Verfügung.

Es gibt bereits einen Beitrag von mir bezüglich der Einrichtung der Fernbedienung für Kodi 16. Durch Anpassungen innerhalb Kodi zu Version 17 waren mir ein paar Fehler im kodi.log aufgefallen, die ich mit dem Versionswechsel korrigieren musste:

01:02:20 T:8908    INFO: Loading special://masterprofile/keymaps/riiminii7.xml
01:02:20 T:8908   ERROR: Window Translator: Can't find window files
01:02:20 T:8908   ERROR: Window Translator: Can't find window musicfiles
01:02:20 T:8908   ERROR: Window Translator: Can't find window musiclibrary
01:02:20 T:8908   ERROR: Window Translator: Can't find window visualisationsettings
01:02:20 T:8908   ERROR: Window Translator: Can't find window guicalibration
01:02:20 T:8908   ERROR: Window Translator: Can't find window videolibrary
01:02:20 T:8908   ERROR: Window Translator: Can't find window videofiles
01:02:20 T:8908   ERROR: Window Translator: Can't find window tvsettings

Wer entsprechende Anpassungen wie hier beschrieben durchführen möchte, sollte sich folgende Beiträge im Wiki zu Kodi ansehen:

Wer Tasten mit Kodi-Funktionen erweitern möchte anbei ein Beispiel für die Funktion reloadkeymaps:

       <r mod="longpress">XBMC.Action(reloadkeymaps)</r>

Bei Verwendung von eigenen Python-Skripten (Speicherort: %appdata%\kodi\userdata) ist es zum Beispiel:

       <w mod="longpress">RunScript(special://profile/get_window_id.py)</w>

Zusätzlich empfehle ich meine weiteren Beiträge zur Ermittlung:

Bei Problemen, zur Fehlersuche und zum Verständnis der Arbeitsweise von Kodi empfiehlt es sich dringend das LOG zu aktivieren.

 

Zur erneuten Einrichtung meiner Rii mini i7 beschreibe ich folgende Punkte:

  • Dokumentation der Tastenbelegungen
  • Deaktivierung des Mauszeigers und Aktivierung Mausklick
  • Beschreibung meiner Konfiguration und Anpassungen am Beispiel zum Abspielen von Videodateien
  • Erweiterung meiner Konfiguration um die Verwendung der seit Kodi 16 optionalen Verwendung des langen Tastendrucks am Beispiel des Wechsels der Tonspur

 

Zu Beginn noch ein wichtiger Hinweis. Zur Anpassung des Keymapping muss nicht eine große Datei erstellt werden, sondern es können eine Vielzahl von Dateien gleichzeitg verwendet werden. Kodi liest zu Beginn unsere xml-Dateien im Verzeichnis:

%appdata%\Kodi\userdata\keymaps

aus. Wichtig ist hierbei zu beachten, dass innerhalb der Dateien Zuordnungen nicht doppelt erfolgen. Sprich, zum Beispiel, STRG + M für Tag Global darf nicht zwei unterschiedlichen Funktionen zugeordnet werden. Welche Funktion aktiv wird hängt mit dem Dateinamen zusammen. Kodi liest Alphabetisch erst die Keymap-Dateien aus dem System-Verzeichnis, dann aus dem hier verwendeten User-Verzeichnis ein. Sofern keine doppelten Zuordnungen vorliegen ist die Namenswahl nicht von großer Bedeutung.

 

Dokumentation der Tastenbelegungen

Basierend auf meinem Beitrag:

habe ich zunächst die Tastenbelegungen dokumentiert. Zu beachten ist hierbei dass die Fernbedienung den sogenannten Air-Modus nutzt. Zum Wechsel des Modus wird lediglich die Taste links oben von den Richtungstasten verwendet. Dadurch ergeben sich für wenige Tasten eine doppelte Nutzung. Die OK-Taste ist entweder eine Tastatur-Eingabe oder die linke Maustaste, bzw. die linke Maustaste, bzw. die gedrückte linke Maustaste bei aktiver Mausbewegung (Dragging). Die Taste rechts oben von den Richtungstasten wird bereits vom Kodi als Zurück interpretiert und ist entweder rechte Maustaste, bzw. die rechte Maustaste, bzw. die gedrückte rechte Maustaste bei aktiver Mausbewegung (rDragging).

Im kodi.log waren hierzu zum Beispiel folgende Meldungen zu sehen:

unknown mouse command 57605
unknown mouse command 57606
unknown mouse command 57607
unknown mouse command 57608

Gemäß der Dokumentation für xbmcgui.py (https://github.com/romanvm/Kodistubs/blob/master/xbmcgui.py) sind dies fehlende Zuordnungen für:

KEY_MOUSE_DRAG_END = 57606
KEY_MOUSE_DRAG_START = 57605
KEY_MOUSE_RDRAG = 57607
KEY_MOUSE_RDRAG_START = 57608

die mindestens realisiert werden müssen. Bei meinigen bisherigen Tests habe ich folgende zu beachtende Varianten (fett hervorgehoben) dokumentieren können:

KEY_INVALID = 65535
KEY_MOUSE_CLICK = 57344
KEY_MOUSE_DOUBLE_CLICK = 57360
KEY_MOUSE_DRAG = 57604
KEY_MOUSE_DRAG_END = 57606
KEY_MOUSE_DRAG_START = 57605
KEY_MOUSE_END = 61439
KEY_MOUSE_LONG_CLICK = 57376
KEY_MOUSE_MIDDLECLICK = 57346
KEY_MOUSE_MOVE = 57603
KEY_MOUSE_NOOP = 61439
KEY_MOUSE_RDRAG = 57607
KEY_MOUSE_RDRAG_END = 57609
KEY_MOUSE_RDRAG_START = 57608
KEY_MOUSE_RIGHTCLICK = 57345
KEY_MOUSE_START = 57344
KEY_MOUSE_WHEEL_DOWN = 57602
KEY_MOUSE_WHEEL_UP = 57601
KEY_TOUCH = 61440
KEY_UNICODE = 61952
KEY_VKEY = 61440
KEY_VMOUSE = 61439

 

 

Siehe auch:

Im Ergebnis habe ich folgende Tastenbelegungen:

kodi_rii_mini_i7

 

Deaktivierung des Mauszeigers und Aktivierung Mausklick

Zu Beginn deaktivieren wir für alle Ansichten den Mauszeiger und aktivieren die Maustasten links und rechts. Auf Basis meiner Erfahrung, dass teilweise die globale Steuerung nicht immer aktiv wird, habe ich die jeweiligen Zuordnungen für alle Ansichten definiert.

Als Grundlage können wir die keymap.xml-Datei aus dem Verzeichnis %programfiles(x86)%\Kodi\system\keymaps verwenden. Jedoch sind hierbei nicht alle im Kodi verwendeten Ansichten hinterlegt. Ich habe daher die Namen aller dokumentierten Ansichten von:

kopiert und folgende definierte Aktionen jeweils zugeordnet:

  • Verwendung der linken Maustaste mittels <leftclick> und <mousedragend> zu Select
          <leftclick>Select</leftclick>
          <mousedragend>Select</mousedragend>
  • Verwendung der rechten Maustaste mittels <rightclick> und <mouserdragend> zu Back
          <rightclick>Back</rightclick>
          <mouserdragend>Back</mouserdragend>
  • Deaktivierung der Darstellung bei einfacher Mausbewegung mittels <mousemove> zu noop
          <mousemove>noop</mousemove>
  • Deaktivierung der Darstellung des Mauszeigers bei Mausbewegung und aktiver Maus-Taste mittels <mousedrag> zu noop
          <mousedrag>noop</mousedrag>

Im Ergebnis habe ich die Datei riiminii7_Kodi17_mouse_support.xml generiert:

<?xml version="1.0" encoding="UTF-8"?>
<!-- https://lichtschattenblog.wordpress.com -->
<keymap>

  <global>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </global>

  <home>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </home>

  <programs>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </programs>

  <pictures>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pictures>

  <filemanager>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </filemanager>

  <settings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </settings>

  <systeminfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </systeminfo>

  <testpattern>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </testpattern>

  <screencalibration>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </screencalibration>

  <systemsettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </systemsettings>

  <servicesettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </servicesettings>

  <pvrsettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrsettings>

  <videos>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </videos>

  <videoplaylist>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </videoplaylist>

  <loginscreen>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </loginscreen>

  <playersettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </playersettings>

  <mediasettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </mediasettings>

  <interfacesettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </interfacesettings>

  <profiles>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </profiles>

  <skinsettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </skinsettings>

  <addonbrowser>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </addonbrowser>

  <eventlog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </eventlog>

  <yesnodialog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </yesnodialog>

  <progressdialog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </progressdialog>

  <virtualkeyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </virtualkeyboard>

  <volumebar>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </volumebar>

  <contextmenu>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </contextmenu>

  <notification>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </notification>

  <numericinput>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </numericinput>

  <gamepadinput>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </gamepadinput>

  <shutdownmenu>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </shutdownmenu>

  <playercontrols>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </playercontrols>

  <seekbar>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </seekbar>

  <playerprocessinfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </playerprocessinfo>

  <musicosd>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </musicosd>

  <visualisationpresetlist>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </visualisationpresetlist>

  <osdvideosettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </osdvideosettings>

  <osdaudiosettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </osdaudiosettings>

  <videobookmarks>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </videobookmarks>

  <filebrowser>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </filebrowser>

  <networksetup>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </networksetup>

  <mediasource>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </mediasource>

  <profilesettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </profilesettings>

  <locksettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </locksettings>

  <contentsettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </contentsettings>

  <favourites>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </favourites>

  <songinformation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </songinformation>

  <smartplaylisteditor>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </smartplaylisteditor>

  <smartplaylistrule>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </smartplaylistrule>

  <busydialog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </busydialog>

  <pictureinfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pictureinfo>

  <addonsettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </addonsettings>

  <accesspoints>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </accesspoints>

  <fullscreeninfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </fullscreeninfo>

  <sliderdialog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </sliderdialog>

  <addoninformation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </addoninformation>

  <textviewer>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </textviewer>

  <peripheralsettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </peripheralsettings>

  <extendedprogressdialog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </extendedprogressdialog>

  <mediafilter>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </mediafilter>

  <subtitlesearch>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </subtitlesearch>

  <audiodspmanager>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </audiodspmanager>

  <osdaudiodspsettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </osdaudiodspsettings>

  <osdcmssettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </osdcmssettings>

  <musicplaylist>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </musicplaylist>

  <music>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </music>

  <musicplaylisteditor>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </musicplaylisteditor>

  <pvrguideinfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrguideinfo>

  <pvrrecordinginfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrrecordinginfo>

  <pvrtimersetting>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrtimersetting>

  <pvrgroupmanager>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrgroupmanager>

  <pvrchannelmanager>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrchannelmanager>

  <pvrguidesearch>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrguidesearch>

  <pvrchannelscan>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrchannelscan>

  <pvrupdateprogress>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrupdateprogress>

  <pvrosdchannels>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrosdchannels>

  <pvrosdguide>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrosdguide>

  <pvrradiordsinfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </pvrradiordsinfo>

  <tvchannels>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </tvchannels>

  <tvrecordings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </tvrecordings>

  <tvguide>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </tvguide>

  <tvtimers>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </tvtimers>

  <tvsearch>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </tvsearch>

  <radiochannels>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </radiochannels>

  <radiorecordings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </radiorecordings>

  <radioguide>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </radioguide>

  <radiotimers>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </radiotimers>

  <radiosearch>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </radiosearch>

  <tvtimerrules>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </tvtimerrules>

  <radiotimerrules>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </radiotimerrules>

  <FullscreenLiveTV>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </FullscreenLiveTV>

  <fullscreenradio>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </fullscreenradio>

  <gamecontrollers>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </gamecontrollers>

  <selectdialog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </selectdialog>

  <musicinformation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </musicinformation>

  <okdialog>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </okdialog>

  <movieinformation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </movieinformation>

  <fullscreenvideo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </fullscreenvideo>

  <visualisation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </visualisation>

  <slideshow>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </slideshow>

  <weather>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </weather>

  <screensaver>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </screensaver>

  <videoosd>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </videoosd>

  <videomenu>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </videomenu>

  <startwindow>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </startwindow>

  <startup>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </startup>

  <addon>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </addon>


</keymap>

Mit Hinterlegung dieser Datei ins Verzeichnis

%appdata%\Kodi\userdata\keymaps

wird es nicht mehr möglich sein, den Mauszeiger bei Verwendung der Fernbedienung, zu sehen und erste Funktionen werden aktiv.

 

Beschreibung meiner Konfiguration und Anpassungen am Beispiel zum Abspielen von Videodateien

Zur Erinnerung haben wir als Belegung der Tasten an der Fernbedienung:

kodi_rii_mini_i7

Zunächst aktivieren wir Global für die Browser-Taste, dass die Ansicht auf den Home-Screen wechselt:

    <appcommand>
      <browser_home>ActivateWindow(Home)</browser_home>
    </appcommand>

und aktivieren für die Tasten links (61570), rechts (61571), hoch (61568) und runter (61569) die native Funktion. Ebenso für PgUp (61572) und PgDn (61573). Für die OK-Taste (61453) aktivieren wir wie für <leftclick> und <mousedragend> select. Für die Taste rechts unten (61656), optisch einem Menü, aktivieren wir das Kontext-Menü:

    <keyboard>
      <key id="61570">left</key>
      <key id="61571">right</key>
      <key id="61568">up</key>
      <key id="61569">down</key>
      <key id="61572">pageup</key>
      <key id="61573">pagedown</key>
      <key id="61453">select</key>
      <key id="61656">contextmenu</key>
    </keyboard>

Als Ergebnis für Global haben wir:

  <global>
    <appcommand>
      <browser_home>ActivateWindow(Home)</browser_home>
    </appcommand>
    <keyboard>
      <key id="61570">left</key>
      <key id="61571">right</key>
      <key id="61568">up</key>
      <key id="61569">down</key>
      <key id="61572">pageup</key>
      <key id="61573">pagedown</key>
      <key id="61453">select</key>
      <key id="61656">contextmenu</key>
    </keyboard>
  </global>

Zur Verbesserung der Benutzerfreundlichkeit aktivieren wir in der Home-Ansicht die Browser-Taste zum Wechsel in den Vollbildmodus:

  <Home>
    <appcommand>
      <browser_home>FullScreen</browser_home>
    </appcommand>
  </Home>

Hierdurch ist es möglich mit maximal zweimaliger Verwendung der Home-Taste in den Vollbildmodus zu wechseln!

Zusätzlich waren mir Probleme zur Verwendung der OK-Taste bei der virtuellen Tastatur unter Kodi 16 aufgefallen. Daher aktiviere ich diese Taste auch unter Kodi 17:

  <VirtualKeyboard>
    <keyboard>
      <key id="61453">select</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
    </mouse>
  </VirtualKeyboard>

Da in der Vollbildansicht im Videomodus die OK-Taste und das Kontext-Menü (61565) die gleiche Funktion haben, aktiviere ich für das Global gesetzte Kontext-Menü die Info-Ansicht:

  <FullscreenVideo>
    <keyboard>
      <key id="61656">info</key>
    </keyboard>
  </FullscreenVideo>

In der Info-Ansicht aktivieren wir für die Taste zum Kontext-Menü das sofortige Schließen der Ansicht. Zusätzlich aktivieren wir für diese Ansicht den Tonspurwechsel durch die OK-Taste die Lautstärke-Verstärkung im Kodi (das ist nicht die System-Lautstärke) für hoch und runter:

  <FullscreenInfo>
    <keyboard>
      <key id="61656">Back</key>
      <key id="61568">volampup</key> <!-- press up -->
      <key id="61569">volampdown</key> <!-- press down -->
      <key id="61453">AudioNextLanguage</key> <!-- press select -->
    </keyboard>
    <mouse>
      <leftclick>AudioNextLanguage</leftclick> <!-- press select -->
      <mousedragend>AudioNextLanguage</mousedragend> <!-- press select -->
    </mouse>
  </FullscreenInfo>

Als zusätzliche Möglichkeit aktivieren wir den Wechsel der Tonspur aus der VideoOSD-Ansicht:

  <VideoOSD>
    <keyboard>
      <key id="61656">AudioNextLanguage</key>
    </keyboard>
  </VideoOSD>

 

Das waren die mir sinnvoll erscheinenden Varianten für die Verwendung zur Abspielung von Video-Dateien. Ggf. können noch die Steuerung der 3D-Ansicht durch FullscreenInfo erfolgen:

      <key id=“61571″>StereoMode</key> <!– press right –>
      <key id=“61570″>ToggleStereoMode</key> <!– press left –>

 

In der Vollbildansicht für LiveTV ist zu empfehlen die OK-Taste zum Öffnen der Playlist zu aktivieren. Hierdurch werden die Kanäle sichtbar.

  <FullscreenLiveTV>
    <keyboard>
      <key id="61453">Playlist</key> <!-- press select -->
      <key id="61656">info</key>
    </keyboard>
    <mouse>
      <leftclick>Playlist</leftclick> <!-- press select -->
      <mousedragend>Playlist</mousedragend> <!-- press select -->
    </mouse>
  </FullscreenLiveTV>

 

In der Wiedergabeansicht für Audio-Dateien empfiehlt es sich zudem die Taste für das Kontext-Menü zum Öffnen der Playlist zu aktivieren.

  <Visualisation>
    <keyboard>
      <key id="61656">Playlist</key>
    </keyboard>
  </Visualisation>

 

Als Ergebnis haben die Datei riiminii7_Kodi17_standard.xml mit folgendem Inhalt:

<?xml version="1.0" encoding="UTF-8"?>
<!-- https://lichtschattenblog.wordpress.com -->

<keymap>
  <global>
    <appcommand>
      <browser_home>ActivateWindow(Home)</browser_home>
    </appcommand>
    <keyboard>
      <key id="142">ActivateWindow(shutdownmenu)</key>
      <key id="61570">left</key>
      <key id="61571">right</key>
      <key id="61568">up</key>
      <key id="61569">down</key>
      <key id="61572">pageup</key>
      <key id="61573">pagedown</key>
      <key id="61453">select</key>
      <key id="61656">contextmenu</key>
    </keyboard>
  </global>
  <Home>
    <appcommand>
      <browser_home>FullScreen</browser_home>
    </appcommand>
  </Home>
  <VirtualKeyboard>
    <keyboard>
      <key id="61453">select</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
    </mouse>
  </VirtualKeyboard>
  <FullscreenVideo>
    <keyboard>
      <key id="61656">info</key>
    </keyboard>
  </FullscreenVideo>
  <FullscreenInfo>
    <keyboard>
      <key id="61656">Back</key>
      <key id="61453">AudioNextLanguage</key> <!-- press select -->
      <key id="61568">volampup</key> <!-- press up -->
      <key id="61571">StereoMode</key> <!-- press right -->
      <key id="61569">volampdown</key> <!-- press down -->
      <key id="61570">ToggleStereoMode</key> <!-- press left -->
    </keyboard>
    <mouse>
      <leftclick>AudioNextLanguage</leftclick> <!-- press select -->
      <mousedragend>AudioNextLanguage</mousedragend> <!-- press select -->
    </mouse>
  </FullscreenInfo>
  <Visualisation>
    <keyboard>
      <key id="61656">Playlist</key>
    </keyboard>
  </Visualisation>
  <VideoOSD>
    <keyboard>
      <key id="61656">AudioNextLanguage</key>
    </keyboard>
  </VideoOSD>
  <FullscreenLiveTV>
    <keyboard>
      <key id="61453">Playlist</key> <!-- press select -->
      <key id="61656">info</key>
    </keyboard>
    <mouse>
      <leftclick>Playlist</leftclick> <!-- press select -->
      <mousedragend>Playlist</mousedragend> <!-- press select -->
    </mouse>
  </FullscreenLiveTV>
</keymap>

 

Erweiterung meiner Konfiguration um die Verwendung der seit Kodi 16 optionalen Verwendung des langen Tastendrucks am Beispiel des Wechsels der Tonspur

Bei meinen Tests mit einem langen Tastendruck zur Verwendung auf den Richtungstasten war mir aufgefallen, dass im Log unmittelbar sich die Ansichten ändern, ohne dass dies für mich ersichtlich war.

03:55:49.770 T:13400   DEBUG: ------ Window Init (Pointer.xml) ------
03:55:49.786 T:13400   DEBUG: ------ Window Init (VideoOSD.xml) ------
03:55:49.789 T:13400   DEBUG: ------ Window Init (DialogSeekBar.xml) ------
03:55:49.789 T:13400   DEBUG: ------ Window Init (Custom_1109_TopBarOverlay.xml) ------

Bei Verwendung der Aktionen VolumeUp und VolumeDown war es zusätzlich:

04:01:31.217 T:13400   DEBUG: ------ Window Init (DialogVolumeBar.xml) ------

Bei Verwendung der Aktionen VolamUp und VolamDown war es zusätzlich:

20:45:06.398 T:9804   DEBUG: ------ Window Init (DialogSlider.xml) ------

 

Im Ergebnis hatte ich für meine Tests folgenden Dateiinhalt:

<?xml version="1.0" encoding="UTF-8"?>
<!-- https://lichtschattenblog.wordpress.com -->

<keymap>

  <global>
    <keyboard>

      <up mod="longpress">VolumeUp</up>
      <down mod="longpress">VolumeDown</down>
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </global>

  <fullscreenvideo>
    <keyboard>

      <up mod="longpress">VolumeUp</up>
      <down mod="longpress">VolumeDown</down>
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </fullscreenvideo>
  
  <videoosd>
    <keyboard>

      <up mod="longpress">VolumeUp</up>
      <down mod="longpress">VolumeDown</down>  
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </videoosd>
  
  <seekbar>
    <keyboard>

      <up mod="longpress">VolumeUp</up>
      <down mod="longpress">VolumeDown</down>  
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </seekbar>
  
  <volumebar>
    <keyboard>

      <up mod="longpress">VolumeUp</up>
      <down mod="longpress">VolumeDown</down>  
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </volumebar>

<!-- only volamup / volamdown test
  <sliderdialog>
    <keyboard>

      <up mod="longpress">VolamUp</up>
      <down mod="longpress">VolamDown</down>  
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>

    </keyboard>
  </sliderdialog>
 -->
   
</keymap>

Jedoch war es immer nur möglich die Lautstärke um einen Schritt zu erhöhen. Ohne die Zuordnungen von noop für links und rechts in den sechs Ansichten war es sehr oft passiert, dass die Ansicht wechselte und statt die Lautstärke zu regeln, dass die Videodateien beendet wurden. Bei langem Druck auf die Richtungstasten habe ich gelegentlich eine anliegende Taste aktiviert und ein ungewünschtes Verhalten erzeugt.

 

Durch diese Probleme habe ich mir zur Sicherheit für die Wiedergabe von Videodateien die Datei riiminii7_Kodi17_longpress_disable_up_down_left_right.xml erstellt, mit der ich zukünftig das vorzeitige Beenden der Wiedergabe mit undefiniertem Zeitpunkt der Unterbrechung beheben konnte (zum Beispiel auf die Fernbedienung sich setzen):

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- https://lichtschattenblog.wordpress.com -->

<keymap>

  <fullscreenvideo>
    <keyboard>

      <up mod="longpress">noop</up>
      <down mod="longpress">noop</down>
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </fullscreenvideo>

  <fullscreeninfo>
    <keyboard>

      <up mod="longpress">noop</up>
      <down mod="longpress">noop</down>
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </fullscreeninfo>
  
  <videoosd>
    <keyboard>

      <up mod="longpress">noop</up>
      <down mod="longpress">noop</down>  
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </videoosd>
  
  <seekbar>
    <keyboard>

      <up mod="longpress">noop</up>
      <down mod="longpress">noop</down>  
      <left mod="longpress">noop</left>
      <right mod="longpress">noop</right>
      
    </keyboard>
  </seekbar>
   
</keymap>

 

Ohne diese Datei und meinem vorherigem Test war mir mit langem Druck auf nach oben im Vollbildmodus die jetzt bereits aktive Aktivierung des Tonspurwechsels aufgefallen. Bei Prüfung der Keymap-Datei unter %programfiles(x86)%\Kodi\system\keymaps ist definitiv hierdurch bereits aktiv:

kodi17_system_keymap_xml_longpress_up.jpg

 

Wer daher mit langem Druck auf den Richtungs-Tasten an der Fernbedienung eigene Funktionen aktivieren möchte kann den Inhalt meiner Datei riiminii7_Kodi17_longpress_disable_up_down_left_right.xml verwenden und noop durch eigene Funktionen ersetzen. Es sollten aber nur Aktionen sein, die nur einmalig ausgeführt werden.

Wer weitere Tasten mit einem langen Druck auf die Tasten:

  • OK
  • PageUp
  • PageDown
  • Zurück
  • Kontext-Menü

verwenden möchte, kann die folgende Datei riiminii7_Kodi17_longpress.xml mit folgendem Inhalt verwenden:

<?xml version="1.0" encoding="UTF-8"?>
<!-- https://lichtschattenblog.wordpress.com -->

<keymap>

<!--  Button Ids:                                                                         -->
<!--    0: left                                                                           -->
<!--    1: right                                                                          -->
<!--    2: middle                                                                         -->
<!--    3/4/5/6: extra                                                                    -->

  <fullscreenvideo>
    <keyboard>
      <menu mod="longpress">AudioNextLanguage</menu> <!-- menu -->
      
      <return mod="longpress">AudioNextLanguage</return> <!-- OK -->
      <!-- <zero mod="longpress">AudioNextLanguage</zero>-->
      
      <pageup mod="longpress">AudioNextLanguage</pageup>
      <pagedown mod="longpress">AudioNextLanguage</pagedown>
    </keyboard>
    <mouse>
      <longclick id="1">AudioNextLanguage</longclick> <!-- right click idle-->
      <mouserdragend>AudioNextLanguage</mouserdragend> <!-- right click moved-->
      
      <longclick id="0">AudioNextLanguage</longclick> <!-- OK idle -->
      <mousedragend>AudioNextLanguage</mousedragend> <!-- OK moved -->
    </mouse>
  </fullscreenvideo>

  <fullscreeninfo>
    <keyboard>
      <menu mod="longpress">AudioNextLanguage</menu> <!-- menu -->
      
      <return mod="longpress">AudioNextLanguage</return> <!-- OK -->
      <!-- <zero mod="longpress">AudioNextLanguage</zero>-->
      
      <pageup mod="longpress">AudioNextLanguage</pageup>
      <pagedown mod="longpress">AudioNextLanguage</pagedown>
    </keyboard>
    <mouse>
      <longclick id="1">AudioNextLanguage</longclick> <!-- right click idle-->
      <mouserdragend>AudioNextLanguage</mouserdragend> <!-- right click moved-->
      
      <longclick id="0">AudioNextLanguage</longclick> <!-- OK idle -->
      <mousedragend>AudioNextLanguage</mousedragend> <!-- OK moved -->
    </mouse>
  </fullscreeninfo>
  
  <videoosd>
    <keyboard>
      <menu mod="longpress">AudioNextLanguage</menu>
      
      <return mod="longpress">AudioNextLanguage</return>
      
      <pageup mod="longpress">AudioNextLanguage</pageup>
      <pagedown mod="longpress">AudioNextLanguage</pagedown>
    </keyboard>
    <mouse>
      <longclick id="1">AudioNextLanguage</longclick>
      <mouserdragend>AudioNextLanguage</mouserdragend>
      
      <longclick id="0">AudioNextLanguage</longclick>
      <mousedragend>AudioNextLanguage</mousedragend>
    </mouse>
  </videoosd>
  
  <seekbar>
    <keyboard>
      <menu mod="longpress">AudioNextLanguage</menu>
      
      <return mod="longpress">AudioNextLanguage</return>
      
      <pageup mod="longpress">AudioNextLanguage</pageup>
      <pagedown mod="longpress">AudioNextLanguage</pagedown>
    </keyboard>
    <mouse>
      <longclick id="1">AudioNextLanguage</longclick>
      <mouserdragend>AudioNextLanguage</mouserdragend>
      
      <longclick id="0">AudioNextLanguage</longclick>
      <mousedragend>AudioNextLanguage</mousedragend>
    </mouse>
  </seekbar>
  
  <volumebar>
    <keyboard>
      <menu mod="longpress">AudioNextLanguage</menu>
      
      <return mod="longpress">AudioNextLanguage</return>
          
      <pageup mod="longpress">AudioNextLanguage</pageup>
      <pagedown mod="longpress">AudioNextLanguage</pagedown>
    </keyboard>
    <mouse>
      <longclick id="1">AudioNextLanguage</longclick>
      <mouserdragend>AudioNextLanguage</mouserdragend>
      
      <longclick id="0">AudioNextLanguage</longclick>
      <mousedragend>AudioNextLanguage</mousedragend>
    </mouse>
  </volumebar>
   
</keymap>

Ich habe hierbei unter fullscreenvideo meine Zuordnungen definiert und für die weiteren häufigen Ansichten zur Videodatei-Wiedergabe kopiert.

Für die Zurück-Taste müssen folgende Elemente identisch angepasst werden:

  •       <longclick id=“1″>AudioNextLanguage</longclick>
  •       <mouserdragend>AudioNextLanguage</mouserdragend>

Für die linke OK-Taste sind es:

  •       <longclick id=“0″>AudioNextLanguage</longclick>
  •       <mousedragend>AudioNextLanguage</mousedragend>

 

Kodi 17 – aktuellen „Window Name“ ausgeben

Wer in Kodi 17 Anpassungen, zum Beispiel im Keymapping von Maus, Fernbedienungen und Tastur durchführen möchte, benötigt sehr oft den aktuellen Window Name, der sich bereits ändert, wenn zum Beispiel zur Videodatei-Wiedergabe, die Lautstärke geändert wird oder das Menü aktiv wird. Mit Kodi 16 wurde eine einfache Möglichkeit geschaffen, um den aktuellen Window Name auszugeben.

Ich habe auf Basis von:

die bekannten Window Name in einer keymap-Datei hinterlegt und bei einem langen Tastendruck auf die i-Taste der Tastatur eine Benachrichtigung mit Ausgabe des betroffenen Window Name aktiviert.

Beispiel für die Home-Ansicht:

<home>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "home", 3)</i>
  </keyboard>
</home>

 

Die Datei (weiter unten) muss ins User-Verzeichnis von Kodi gespeichert werden. Unter Windows 10 ist dies zum Beispiel %appdata%\kodi\userdata\keymaps.

Unter Linux, OpenELEC, LibreELEC, Fire TV-Stick, Android ist dies definitiv abweichend. Siehe: http://kodi.wiki/view/userdata – zusätzlich muss noch der Unterornder keymaps beachtet werden!

Als Ergebnis (Kodi erneut starten und i auf der Tastaur ca. eine Sekunde drücken) sehen wir, zum Beispiel beim Suchen von Freigaben (busydialog):

kodi17_keymapinfo_busydialog

und in der Start-Ansicht (home)

kodi17_keymapinfo_home.png

Wer bei seinen Tests als Ausgabe global erhält, sollte prüfen, welches Fenster im kodi.log (Logging muss aktiv sein) aufgeführt wird. In Skins und Addons können andere nicht dokumentiert sein. Beispiel:

03:55:49.789 T:13400   DEBUG: ------ Window Init (Custom_1109_TopBarOverlay.xml) -----

 

Datei: longpress_i_show_window_name_Kodi17.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- show http://kodi.wiki/view/keymap - chapter 7 windows -->
<keymap>
<home>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "home", 3)</i>
  </keyboard>
</home>
<programs>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "programs", 3)</i>
  </keyboard>
</programs>
<pictures>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pictures", 3)</i>
  </keyboard>
</pictures>
<filemanager>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "filemanager", 3)</i>
  </keyboard>
</filemanager>
<settings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "settings", 3)</i>
  </keyboard>
</settings>
<systeminfo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "systeminfo", 3)</i>
  </keyboard>
</systeminfo>
<testpattern>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "testpattern", 3)</i>
  </keyboard>
</testpattern>
<screencalibration>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "screencalibration", 3)</i>
  </keyboard>
</screencalibration>
<systemsettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "systemsettings", 3)</i>
  </keyboard>
</systemsettings>
<servicesettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "servicesettings", 3)</i>
  </keyboard>
</servicesettings>
<pvrsettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrsettings", 3)</i>
  </keyboard>
</pvrsettings>
<videos>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "videos", 3)</i>
  </keyboard>
</videos>
<videoplaylist>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "videoplaylist", 3)</i>
  </keyboard>
</videoplaylist>
<loginscreen>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "loginscreen", 3)</i>
  </keyboard>
</loginscreen>
<playersettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "playersettings", 3)</i>
  </keyboard>
</playersettings>
<mediasettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "mediasettings", 3)</i>
  </keyboard>
</mediasettings>
<interfacesettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "interfacesettings", 3)</i>
  </keyboard>
</interfacesettings>
<profiles>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "profiles", 3)</i>
  </keyboard>
</profiles>
<skinsettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "skinsettings", 3)</i>
  </keyboard>
</skinsettings>
<addonbrowser>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "addonbrowser", 3)</i>
  </keyboard>
</addonbrowser>
<eventlog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "eventlog", 3)</i>
  </keyboard>
</eventlog>
<yesnodialog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "yesnodialog", 3)</i>
  </keyboard>
</yesnodialog>
<progressdialog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "progressdialog", 3)</i>
  </keyboard>
</progressdialog>
<virtualkeyboard>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "virtualkeyboard", 3)</i>
  </keyboard>
</virtualkeyboard>
<volumebar>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "volumebar", 3)</i>
  </keyboard>
</volumebar>
<contextmenu>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "contextmenu", 3)</i>
  </keyboard>
</contextmenu>
<notification>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "notification", 3)</i>
  </keyboard>
</notification>
<numericinput>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "numericinput", 3)</i>
  </keyboard>
</numericinput>
<gamepadinput>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "gamepadinput", 3)</i>
  </keyboard>
</gamepadinput>
<shutdownmenu>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "shutdownmenu", 3)</i>
  </keyboard>
</shutdownmenu>
<playercontrols>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "playercontrols", 3)</i>
  </keyboard>
</playercontrols>
<seekbar>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "seekbar", 3)</i>
  </keyboard>
</seekbar>
<playerprocessinfo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "playerprocessinfo", 3)</i>
  </keyboard>
</playerprocessinfo>
<musicosd>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "musicosd", 3)</i>
  </keyboard>
</musicosd>
<visualisationpresetlist>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "visualisationpresetlist", 3)</i>
  </keyboard>
</visualisationpresetlist>
<osdvideosettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "osdvideosettings", 3)</i>
  </keyboard>
</osdvideosettings>
<osdaudiosettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "osdaudiosettings", 3)</i>
  </keyboard>
</osdaudiosettings>
<videobookmarks>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "videobookmarks", 3)</i>
  </keyboard>
</videobookmarks>
<filebrowser>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "filebrowser", 3)</i>
  </keyboard>
</filebrowser>
<networksetup>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "networksetup", 3)</i>
  </keyboard>
</networksetup>
<mediasource>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "mediasource", 3)</i>
  </keyboard>
</mediasource>
<profilesettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "profilesettings", 3)</i>
  </keyboard>
</profilesettings>
<locksettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "locksettings", 3)</i>
  </keyboard>
</locksettings>
<contentsettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "contentsettings", 3)</i>
  </keyboard>
</contentsettings>
<favourites>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "favourites", 3)</i>
  </keyboard>
</favourites>
<songinformation>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "songinformation", 3)</i>
  </keyboard>
</songinformation>
<smartplaylisteditor>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "smartplaylisteditor", 3)</i>
  </keyboard>
</smartplaylisteditor>
<smartplaylistrule>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "smartplaylistrule", 3)</i>
  </keyboard>
</smartplaylistrule>
<busydialog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "busydialog", 3)</i>
  </keyboard>
</busydialog>
<pictureinfo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pictureinfo", 3)</i>
  </keyboard>
</pictureinfo>
<addonsettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "addonsettings", 3)</i>
  </keyboard>
</addonsettings>
<accesspoints>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "accesspoints", 3)</i>
  </keyboard>
</accesspoints>
<fullscreeninfo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "fullscreeninfo", 3)</i>
  </keyboard>
</fullscreeninfo>
<sliderdialog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "sliderdialog", 3)</i>
  </keyboard>
</sliderdialog>
<addoninformation>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "addoninformation", 3)</i>
  </keyboard>
</addoninformation>
<textviewer>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "textviewer", 3)</i>
  </keyboard>
</textviewer>
<peripheralsettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "peripheralsettings", 3)</i>
  </keyboard>
</peripheralsettings>
<extendedprogressdialog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "extendedprogressdialog", 3)</i>
  </keyboard>
</extendedprogressdialog>
<mediafilter>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "mediafilter", 3)</i>
  </keyboard>
</mediafilter>
<subtitlesearch>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "subtitlesearch", 3)</i>
  </keyboard>
</subtitlesearch>
<audiodspmanager>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "audiodspmanager", 3)</i>
  </keyboard>
</audiodspmanager>
<osdaudiodspsettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "osdaudiodspsettings", 3)</i>
  </keyboard>
</osdaudiodspsettings>
<osdcmssettings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "osdcmssettings", 3)</i>
  </keyboard>
</osdcmssettings>
<musicplaylist>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "musicplaylist", 3)</i>
  </keyboard>
</musicplaylist>
<music>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "music", 3)</i>
  </keyboard>
</music>
<musicplaylisteditor>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "musicplaylisteditor", 3)</i>
  </keyboard>
</musicplaylisteditor>
<pvrguideinfo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrguideinfo", 3)</i>
  </keyboard>
</pvrguideinfo>
<pvrrecordinginfo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrrecordinginfo", 3)</i>
  </keyboard>
</pvrrecordinginfo>
<pvrtimersetting>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrtimersetting", 3)</i>
  </keyboard>
</pvrtimersetting>
<pvrgroupmanager>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrgroupmanager", 3)</i>
  </keyboard>
</pvrgroupmanager>
<pvrchannelmanager>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrchannelmanager", 3)</i>
  </keyboard>
</pvrchannelmanager>
<pvrguidesearch>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrguidesearch", 3)</i>
  </keyboard>
</pvrguidesearch>
<pvrchannelscan>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrchannelscan", 3)</i>
  </keyboard>
</pvrchannelscan>
<pvrupdateprogress>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrupdateprogress", 3)</i>
  </keyboard>
</pvrupdateprogress>
<pvrosdchannels>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrosdchannels", 3)</i>
  </keyboard>
</pvrosdchannels>
<pvrosdguide>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrosdguide", 3)</i>
  </keyboard>
</pvrosdguide>
<pvrradiordsinfo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "pvrradiordsinfo", 3)</i>
  </keyboard>
</pvrradiordsinfo>
<tvchannels>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "tvchannels", 3)</i>
  </keyboard>
</tvchannels>
<tvrecordings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "tvrecordings", 3)</i>
  </keyboard>
</tvrecordings>
<tvguide>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "tvguide", 3)</i>
  </keyboard>
</tvguide>
<tvtimers>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "tvtimers", 3)</i>
  </keyboard>
</tvtimers>
<tvsearch>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "tvsearch", 3)</i>
  </keyboard>
</tvsearch>
<radiochannels>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "radiochannels", 3)</i>
  </keyboard>
</radiochannels>
<radiorecordings>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "radiorecordings", 3)</i>
  </keyboard>
</radiorecordings>
<radioguide>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "radioguide", 3)</i>
  </keyboard>
</radioguide>
<radiotimers>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "radiotimers", 3)</i>
  </keyboard>
</radiotimers>
<radiosearch>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "radiosearch", 3)</i>
  </keyboard>
</radiosearch>
<tvtimerrules>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "tvtimerrules", 3)</i>
  </keyboard>
</tvtimerrules>
<radiotimerrules>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "radiotimerrules", 3)</i>
  </keyboard>
</radiotimerrules>
<FullscreenLiveTV>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "FullscreenLiveTV", 3)</i>
  </keyboard>
</FullscreenLiveTV>
<fullscreenradio>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "fullscreenradio", 3)</i>
  </keyboard>
</fullscreenradio>
<gamecontrollers>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "gamecontrollers", 3)</i>
  </keyboard>
</gamecontrollers>
<selectdialog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "selectdialog", 3)</i>
  </keyboard>
</selectdialog>
<musicinformation>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "musicinformation", 3)</i>
  </keyboard>
</musicinformation>
<okdialog>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "okdialog", 3)</i>
  </keyboard>
</okdialog>
<movieinformation>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "movieinformation", 3)</i>
  </keyboard>
</movieinformation>
<fullscreenvideo>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "fullscreenvideo", 3)</i>
  </keyboard>
</fullscreenvideo>
<visualisation>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "visualisation", 3)</i>
  </keyboard>
</visualisation>
<slideshow>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "slideshow", 3)</i>
  </keyboard>
</slideshow>
<weather>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "weather", 3)</i>
  </keyboard>
</weather>
<screensaver>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "screensaver", 3)</i>
  </keyboard>
</screensaver>
<videoosd>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "videoosd", 3)</i>
  </keyboard>
</videoosd>
<videomenu>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "videomenu", 3)</i>
  </keyboard>
</videomenu>
<startwindow>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "startwindow", 3)</i>
  </keyboard>
</startwindow>
<startup>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "startup", 3)</i>
  </keyboard>
</startup>
<addon>
  <keyboard>
    <i mod="longpress">Notification("keymap info", "addon", 3)</i>
  </keyboard>
</addon>

</keymap>

 

Mit dieser Information ist es jetzt zum Beispiel möglich, eine keymap zu erstellen oder anzupassen:

kodi_keymap_file_windowid_programs.jpg

Zur Anpassung einer entsprechend keymap-Datei empfiehlt es sich meine Beiträge

zu lesen.

 

Kodi – aktuelle Window ID ausgeben

Bei Anpassungen im Kodi und erstellem von eigenen Skripten ist es ggf. erforderlich zu wissen, welche Window ID aktuell im Kodi Verwendung findet.

Dies wird möglich, indem wir eine immer frei verfügbare Taste zum Aufruf eines python-Skripts aktivieren. Das python-Skript ermittelt anschließend die Window ID und gibt das Ergebnis über die Notification aus.

Mit der hierbei ermittelten Window ID ist es dann möglich gewünschte Anpassungen von keymap-Dateien durchzuführen.

In meinem Fall habe ich einen langen Tastendruck auf die w-Taste so aktiviert, dass das Skript anschließend ausgeführt wird.

Zur Aktivierung erstellen wir die folgenden zwei Dateien.

Datei: get_window_id.py

import xbmc, time, xbmcgui, os, sys

try:
        cWID = xbmcgui.getCurrentWindowId()
except BaseException, exception:
        cWID = 0
except Exception, exception:
        cWID = 0
except NameError, exception:
        cWID = 0
except RuntimeError, exception:
        cWID = 0
finally:
        cWID = cWID + 0

xbmc.executebuiltin( 'Notification(Info,Window ID ist: ' + str(cWID) + ')' )

Wichtiger Hinweis: Der Python-Interpreter setzt ein Tabulatorzeichen mit acht Leerzeichen gleich. Der Bereich vor cWID entsprach in meinem Original-Code der jeweils einmaligen Verwendung der Tabulator-Taste. Ggf. zur Sicherheit vor cWID jeweils die Leerzeichen löschen und durch erneute Eingabe mittels Tabulator-Taste den Code formatieren.

Datei: longpress_w_get_window_id.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- https://lichtschattenblog.wordpress.com -->

<keymap>
  <global>
    <keyboard>
        <w mod="longpress">RunScript(special://profile/get_window_id.py)</w>
    </keyboard>
  </global>
</keymap>

Anschließend kopieren wir die Dateien unter Windows in folgende Verzeichnisse:

Datei get_window_id.py nach: %appdata%\Kodi\userdata

Datei longpress_w_get_window_id.xml nach: %appdata%\Kodi\userdata\keymaps

Anschließend starten wir Kodi erneut und erhalten nach ca. 2-sekündigem Druck auf die Taste w der Tastatur die Window ID.

Beispiel:

kodi17_windowid.png

 

Fernbedienung Rii mini i7 – Verwendung der Power-Taste unter Windows 10 (64bit) und Kodi

Auf Anfrage von Sebastian zu meinem Beitrag Einrichtung Fernbedienung Rii mini i7 unter Kodi habe ich mir Zeit genommen um eine entsprechende Lösung zu finden, damit die Power-Taste unter Windows 10 entsprechend genutzt werden kann. Das Problem ist an dieser Stelle, dass Microsoft die Funktion der Taste systemseitig vollständig integriert hat. Es ist daher nicht möglich die Verwendung der Taste direkt zu prüfen. Mit einem Trick ist es jedoch möglich.

 

Wichtiger Hinweis: Ich übernehme keine Haftung für eventuelle Schäden bei Verwendung dieser Lösung. Jedem der diese Lösung verwendet weise ich hiermit darauf hin, dass zur Nutzung dieser Lösung Grafikkarte, Bildschirm und ggf. weitere Komponenten kurzzeitig in den Energiesparmodus versetzt werden.

 

Hinweis: Für alle die die Fernbedienung alternativ unter Linux mit Kodi verwenden wollen, haben hierzu bessere Möglichkeiten. Dort kann mittels dem Tool irw die Verwendung der Taste als KEY_POWER geprüft und anschließend das Mapping der Taste für Kodi durchgeführt werden (teilweise verschieden zu Windows).

 

Funktionstest vor Anpassung unseres Systems:

Zur Verdeutlichung der Funktion der Taste besteht die Möglichkeit unter Windows 10 die Option für Beim Drücken der Energiespartaste auf Bildschrim ausschalten zu setzen.

rii_mini_i7_win10_energy_options_power_button_test

Sobald diese Einstellung aktiv ist, können wir mittels der Rii Mini i7 Funk-Fernbedienung den Bildschirm durch Verwendung der Power-Taste an der Fernbedienung ausschalten. Sofern dies erfolgreich erfolgte, können wir nun mittels dem sehr mächtigen Tool Autohotkey das System entsprechend anpassen.

Als erstes laden wir uns die aktuelle Version von der Webseite:

http://ahkscript.org/

herunter. Anschließend führen wir die Installation durch. In meinem Fall (Dateiname: AutoHotkey_1.1.24.02_setup.exe) habe ich zur Auswahl Version Unicode 32-bit verwendet. Bei Options habe ich install script compiler und separate taskbar buttons aktiviert.

Anschließend erstellen wir eine Datei rii_mini_i7_kodi_power_button.ahk mit folgendem Inhalt:

;Written by Tebori at lichtschattenblog.wordpress.com
;2016-11-02 - tested on windows 10 64bit, kodi 16.1 and Rii mini i7 remote control
;required settings on energy options:
; sleep mode by pressing sleep button
; disable "require a password"

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

OnMessage(0x218, "WM_POWERBROADCAST") 
  
WM_POWERBROADCAST(wParam, lParam) 
    {

    WindowCheck: 

        disable_send_s := false

        ; check kodi is running
        If !WinExist("Kodi")
            {
            ; no - start kodi
            Run, c:\Program Files (x86)\Kodi\Kodi.exe
            disable_send_s := true
            sleep, 500
            Send {RAlt} & `\
            Send {RAlt} & `\
            }

        ; check kodi fullscreen
        If !WinActive("Kodi")
            {
            ; no - activate window
            WinActivate, Kodi
            disable_send_s := true
            Send {RAlt} & `\
            Send {RAlt} & `\
            }

        WinMaximize, Kodi
        WinShow, Kodi

        sleep, 500

        WinGet, Style, Style, ahk_class Kodi
        if (Style & 0xC00000)  ;0xC00000 is WS_CAPTION, check window has a title bar
            {
            ; maximize Kodi to fullscreen mode
            ;Send {VKDC}
            Send {RAlt} & `\
            disable_send_s := true
            }

        sleep, 2000

        if (disable_send_s = false)
            {
            ; call shutdown menu
            send s
            }

        Return  0x424D5144

    }

Speichern anschließend und testen die Funktion mittels Doppelklick auf die Datei. Als erstes sollte in der Taskleise ein grünes H erscheinen. Wenn dies korrekt erfolgte testen wir einfach die Power-Taste an unserer Fernbedienung.

Zusammenfassend sollten folgende Funktionen zu sehen sein:

  • Kodi aus, Power-Taste wurde gedrückt – Kodi wird gestartet und maximiert
  • Kodi bereits aktiv, jedoch im Hintergrund – Kodi wird als aktive Anwendung in den Vordergrund geschoben und maximiert
  • Kodi bereits aktiv, aber nicht Vollbild – Kodi wechselt in den Vollbildmodus
  • Kodi bereits aktiv, im Vordergrund und im Vollbildmodus – das Shutdown-Menü wird angezeigt

Wer jetzt bei einigen dieser Funktionen Probleme hat, muss ggf. die von mir bereits hinterlegten Pausen in Millisekunden etwas erweitern. Nach mehreren Tests konnte ich eine an meinem System ein gutes Ergebnis erzielen.

Wenn alles zufriedenstellend funktioniert, ist es nur noch notwendig, die erstellte Datei in den Autostart von Windows zu integrieren.

Bei Verwednung von Kodi unter Windows 32bit muss der Pfad zum Aufruf von Kodi entsprechend angepasst werden!

Hinweis: Sofern bei Verwendung der Power-Taste die Benutzeranmeldung erscheint, muss zusätzlich in den Energieoptionen „Kennwort ist nicht erforderlich“ aktiviert werden.

Quellen, Anregungen und ggf. alternative Lösungsansätze:

Installation und Einrichtung TVHeadend auf einem Debian-Server mit Verwendung einer Tuner-Karte Cine S2 und Verwendung via Kodi

Historie Artikel:

  • Update 24. Oktober 2016 – Zusammenfassung Zeitprobleme EPG und Erweiterung um Troubleshooting bei Korrektur EPG, Serverzeit und Zeitzone
  • Update 2. Juni 2016 um 2. Variante zur Behebung Zeitprobleme EPG
  • Update 27. Mai 2016 um 1. Variante zur Behebung Zeitprobleme EPG

Bei diesem Eintrag geht es um die Installation und Einrichtung einer TVTuner-Karte Cine S2 V6.5 DuoFlex S2v4 von DigitalDevices unter Debian 8.4, mit anschließender Installation und Einrichtung von HTS Tvheadend 4.0.9-4. Zur späteren Verwendung wird Kodi 16.1 (Stand 24.04.2016) als Client genutzt.

Der Anwendungsfall beschreibt die Möglichkeit zum Sehen und Hören unseres deutschen Radio- und Fernsehangebots über Computer (Windows/Linux), Android-Tablet, Android-Smartphone, Amazon Fire TV-Stick, Raspberry Pi mit OpenELEC oder LibreELEC, jeweils auch über WLAN, im privaten Netzwerk, zum Beispiel abends im Garten.

In meinem Fall erfolgt die Verwendung eines Systems zur Verteilung des bestehenden SAT-Signals auf mehrere Endgeräte gleichzeitig über ein Kabel. Alternativ kann ein LNB mit mehreren Ausgängen verwendet werden. Hier empfehle ich dringend einen Fachmann zu Rate zu ziehen. Dieser verfügt über entsprechende Möglichkeiten zum Testen und kann vorab bestätigen, dass das Signal zur Verwendung wirklich anliegt. Sofern dies nicht sichergestellt ist, empfehle ich nicht die Anschaffung teuerer Hardware.

Folgende Punkte werden hier erläutert:

  • Vorauswahl der notwendigen TVTuner-Karte
  • Installation Debian 8.4 im Minimalzustand
  • Installation der Treiber für TVTuner-Karte Cine S2 V6.5 DuoFlex S2v4
  • Installation TVHeadend
  • Einrichtung TVHeadend
  • Verwendung TVHeadend innerhalb Kodi

Vorauswahl und Vorüberlegung zur Wahl der notwendigen TVTuner-Karte:

Vor dem Kauf einer entsprechenden Karte sind mehrere Punkte zu beachten. Dies sind:

  • Welcher Anschluss und welches Verfahren werden zur Signaleinspeisung verwendet?
  • Wie viele Clients werden maximal (auch langfristig gesehen) verwendet?
  • Wie viele Programme sollen mindestens gleichzeitig zur Verfügung stehen?
  • Wird eine CI-Karte für zusätzliche Inhalte benötigt?
  • Wie erfolgt die Übertragung des Satelitten-Signals? Über Mehrfach-LNB oder Verfahren wie Unicable?

Als erste notwendige Informationen möchte ich hierbei auf die Produktliste von DigitalDevices und den Senderlisten von Astra verweisen:

DigitalDevices bietet für unterschiedlichen Einsatzszenarien unterschiedliche Varianten an. In meinem Fall, den ich hier auch explizit beschreibe, wird das Signal über eine Sattelitenempfangsanlage  und einem Multischalter in das neue System eingespeist. Daher wird eine Karte mit S2 im Namen verwendet. S2 steht hierbei für die interne Verwendung eines DVB-S/S2-Tuner. Wird hingegen ein DVB-C (Kabel)-Tuner oder DVB-T-Tuner benötigt, so muss eine Variante mit CT gewählt werden. In meinem Fall bietet die von mir verwendete Karte 4 Eingänge die anschließend über ein zusätzliches DuoFlex-Modul mit 4 weiteren Eingängen erweitert werden kann und später beschrieben, wird. Hierzu wird die neue Karte mit zwei Flachbandkabeln mit der bestehenden direkt verbunden.

Ich bitte um Beachtung, dass ich hier nur den computerseitigen Bereich behandle, nicht jedoch den der SAT-Anlage. Diese bestand bereits im Vorfeld!

Die Möglichkeiten bei den Karten von DigitalDevices sind sehr groß, daher sollte im Vorfeld genau geprüft werden, welche Variante die sinnvollste im eigenen Sonderfall ist.

Für ganz kleine Szenarien empfehle ich zu prüfen, ob ggf. ein Raspberry Pi mit USB-Stick als Player oder Streaming-Server genutzt werden kann. Als Client kann zum Beispiel ein Android-Tablet genutzt werden. Es muss lediglich ein WLAN-Router beide Systeme verbinden. Multischalter, Mehrfach-LNB etc. könnten somit entfallen.

Zu den Senderlisten von Astra folgende Hinweise:

tvheadend_Astra_Senderliste

Über die Sortierung nach Frequenzbelegung ist am Beispiel von ARTE Deutschland HD, Das Erste HD, SWR Fernsehen BW HD und SWR Fernsehen RP HD zu sehen, dass alle über die gleiche Frequenz 11494 MHz verfügbar sind.

tvheadend_Astra_Senderliste_11494

Die Tuner-Karten können hierbei pro Eingang eine Frequenz mit den spezifischen Empfangsdaten gleichzeitig, mit den jeweiligen Programmen, empfangen. Somit stehen bei Verwendung der Frequenz 11494 MHz vier Sender gleichzeitig zur Verfügung. Je nach Frequenz und Standard-Technologie (SD, HD oder Radio) sind zusätzliche Programme pro Frequenz möglich.

Mit dem in Deutschland verfügbaren „kleinen“ Programm werden in etwa acht Frequenzen benötigt, die gleichzeitig zur Verfügung stehen müssen, um die entsprechende Programmvielfalt in etwa nutzen zu können. Das bedeutet, wenn wir acht Eingänge nutzen, dass wir acht Frequenzen gleichzeitig mit allen Programmen nutzen können, unabhängig ob wir zwei, vier, oder 60 Clients im Netzwerk verwenden. Alle Sender der acht Frequenzen würden uns gleichzeitig zur Verfügung stehen. Wichtig ist hierbei, dass zum Beispiel über ein Multischalter, für die acht Frequenzen, die Signale jeweils zur Verfügung stehen.

Bei Verwendung einer einfachen TV-Tuner-Karte mit zwei Eingängen bedeutet jedoch, dass wir maximal zwei Frequenzen mit allen Sendern nutzen können. Bei Verwendung von drei Clients gleichzeitig stehen somit nur 8 bis 12 Programme, je nach Frequenz, zur Verfügung. Werden nur zwei Clients gleichzeitig genutzt, sind wieder alle Programme möglich. In diesem Fall ist es sogar möglich zusätzliche Frequenzen zu hinterlegen. Zum Beispiel für das englischsprachige Programm.

In einem Haushalt mit maximal vier Personen und maximaler Verwendung von vier Clients mit Kodi ist somit eine Lösung mit mindestens vier Eingängen notwendig.

Bei Szenarien mit mehr als acht Clients gleichzeitig würde ich daher eine Lösung mit acht Eingängen verwenden und pro Eingang lediglich eine Frequenz zur Nutzung zuordnen. Bei einer Verwendung von lediglich zwei Eingängen und maximal zwei Clients würde ich alle Frequenzen pro Eingang zuordnen (auch mehr als der acht Frequenzen). Solange die Anzahl kleiner acht ist, würde ich immer mindestens die entsprechende Anzahl an Eingängen verwenden. Hierdurch ist der maximal mögliche Ausbau ohne Einschränkung der Frequenzen möglich. Bei einer Anzahl Clients größer der Anzahl an Eingängen würde ich maxmial eine Frequenz pro Eingang zuordnen. Somit wird der Fall vermieden, dass eine Meldung erscheint, dass der Adapter bereits in Verwendung ist.

In meinem Fall sind es mehr als acht Clients und ein nicht privater Einsatzbereich. Daher werden pro Eingang immer nur eine Frequenz zugeordnet.

Installation Debian 8.4 im Minimalzustand:

Debian 8.4.0 über netinst – CD mit:

  • SSH Server
  • Standard Systemwerkzeugen

installiert. Anschließend über die Kommandozeile das Netzwerk auf static geändert:

nano /etc/network/interfaces

debian_network_static_sample

Hinweis: ^ steht für die STRG-Taste. Somit mit STRG+o wird gespeichert und anschließend mit STRG + x wird nano beendet.

und ssh-Zugriff für root aktiviert.

nano /etc/ssh/sshd_config

wo wir PermitRootLogin without-password mittels # auskommentieren und PermitRootLogin yes einfügen.

debian_activate_ssh_root_user_sample

Behebung Zeitprobleme für EPG [Update zum 27. Mai 2016 und 2. Juni 2016]

Nach Abschluss der hier beschriebenen Installation musste ich feststellen, dass die Zeiten für den EPG im Kodi nicht korrekt waren. Auffällig für mich waren neben den Abweichungen EPG und laufendem Programm im Kodi, dass im Log des Servers die Zeit in der Zukunft lag und der Progress-Balken im Electronic Program Guide für kurze Sendungen nie zu sehen war. Zum Vergleich ein Beispiel mit Auswahl arte als Sender, wie es korrekt ist.

tvheadend_time_problem_epg

Nach mehreren Versuchen konnte ich eine entsprechende Lösung finden.

 

Behebung Zeitprobleme für EPG

Wir prüfen zur Installation des Servers die Zeitzone auf dem Server mit:

cat /etc/timezone

Zum Setzen der Zeitzone geben wir den folgenden Befehl ein:

dpkg-reconfigure tzdata

und legen mit Europa und Berlin die Zeitzone fest.

Ausgabe-Beispiel:

Current default time zone: 'Europe/Berlin'
Local time is now:      Fri May 27 13:15:15 CEST 2016.
Universal Time is now:  Fri May 27 11:15:15 UTC 2016.

 

Anschließend prüfen wir die Zeit im Debian und die der Hardware:

root@TVHeadend:~# date
Fr 27. Mai 13:25:16 CEST 2016
root@TVHeadend:~# hwclock --show
Fr 27 Mai 2016 13:26:14 CEST  -1.004662 seconds

In meinem Fall lag eine Zeitverschiebung der Local Time von einer Stunde zur „realen“ Zeit vor, die ich manuell korrigiert habe:

date 05271236
Fr 27. Mai 12:36:00 CEST 2016

Zur Info zu date: 05 ist der Monat, 27 der Tag, 12 die Stunde und 36 die Minute.

Alternativ kann auch ntp unter Debian aktiviert werden:

apt-get install ntp

Dann prüfen wir auf die verfügbaren Server:

ntpq -p

Ausgabe-Beispiel:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 cloud.a-schieb. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 gingey.oranged. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 s1.kelker.info  .INIT.          16 u    -   64    0    0.000    0.000   0.000
 lite.computer   .INIT.          16 u    -   64    0    0.000    0.000   0.000

Zusätzlich kann ein bestehender Server im eigenen Netzwerk (mit aktivem NTP-Dienst) durch anpassen der Datei /etc/ntp.conf genutzt werden, wo wir unterhalb

#server ntp.your-provider.example

eine Zeile mit:

server <zu hinterlegende Server-IP>

einfügen.

Danach starten wir den Dienst neu:

/etc/init.d/ntp restart

Wir prüfen erneut auf verfügbare Server:

ntpq -p

Hierbei sollte ein zusätzlicher Server zu Beginn zu sehen sein. Zum Forcieren der Übernahme der Zeit geben wir ein:

ntpd -s <hinterlegte Server-IP> -x

Mit

date

prüfen wir erneut, ob die Zeit nun korrekt ist.

 

Anschließend empfiehlt es sich die Hardware-Zeit an die vom PC zu synchronisieren. Dies erfolgt über:

hwclock --systohc

 

Installation der Treiber für TVTuner-Karte Cine S2 V6.5 DuoFlex S2v4

Sofern ein Proxy zur Installation genutzt werden muss, bitte folgenden Proxy-Einstellungen für hg, apt, wget und System setzen. Siehe hierzu: https://lichtschattenblog.wordpress.com/2016/04/21/proxy-unter-linux/

Ansonsten Ausgabe von:

uname –r

In meinem Fall: 3.16.0-4-amd64

direkt hinter:

apt-get install mercurial build-essential libproc-processtable-perl linux-headers-

setzen:

apt-get install mercurial build-essential libproc-processtable-perl linux-headers-3.16.0-4-amd64

und ausführen.

tvheadend_01_install_media_build_experimental

Ausgabe am Ende:

tvheadend_02_abschluss_install_media_build_experimental

Danach ins Verzeichnis /usr/src wechseln.

cd /usr/src

und Paketdateien herunterladen.

hg clone http://linuxtv.org/hg/~endriss/media_build_experimental/

Anschließend Treiber bauen und installieren:

cd media_build_experimental
make download
make untar
make
make install

Die Ausgaben am Ende sollten in etwa wie folgt aussehen:

tvheadend_05_abschluss_make_untar

tvheadend_06_abschluss_make

tvheadend_07_abschluss_make_install

Die Ausführung von make dauert recht lange. Einfach warten. 10 Minuten sind realisitisch. Ggf. sogar länger. Danach einen Neustart mit init 6 durchführen (war bisher immer notwendig – modprobe ngene und modprobe ddbridge führten nicht zum gewünschten Ergebnis ).

Installation TVHeadend:

Bei Verwendung eines Proxy und dem zuvor durchgeführten Neustart muss ggf. erneut der Befehl für den Proxy zum System gesetzt werden!

Schlüssel hinterlegen:

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61

Notwendige Paketquellen für apt hinterlegen:

echo "deb https://dl.bintray.com/tvheadend/deb jessie stable" | tee -a /etc/apt/sources.list

tvheadend_08_apt_sources

Bei Verwendung einer anderen/späteren Debian-Version ggf. jessie mit der korrekten Variante aktualisieren. Zum Vergleich einfach in die /etc/apt/sources.list den typischen Eintrag:

deb http://ftp.de.debian.org/debian/ <name> main

suchen und den Eintrag in <name> verwenden. Anschließend Paketquellen aktualisieren:

apt-get update

In meinem Fall musste zusätzlich

apt-get install apt-transport-https
apt-get update

ausgeführt werden. Anschließend tvheadend installieren:

apt-get install tvheadend

tvheadend_09_apt_install_tvheadend.jpg

Während der Installation werden Benutzer und Passwort abgefragt. Nach der Information bzgl. späterem Aufruf über http://<serverip&gt;:9981 zunächst die Installation abschließen. Zur Ausgabe creating user ist es eine längere Wartezeit typisch.

tvheadend_10_username

tvheadend_11_accessinfo

Einrichtung TVHeadend:

Nach Abschluss der Installation prüfen wir über einen Webbrowser (in meinem Fall Mozilla Firefox) die Installation durch Aufruf via http://servername:9981 und wechseln nach Eingabe von Benutzername und Passwort, welche wir zur Installation hinterlegt haben, in den Aktenreiter Configuration, dann DVB Inputs und anschließend zu TV adapters. Im Ergebnis sollte ein ähnliches Bild wie hier zu sehen sein.

tvheadend_12_config_dvbinputs_tvadapters

Spätestens jetzt müssen an den Eingängen die notwendigen Kabel korrekt angeschlossen werden.

Wichtige Einstellungen zu Beginn:

  • Debug-Logging aktivieren
  • Meldungen in der unteren Leiste ausgeben
  • Adapter aktivieren !!!

Zum Aktivieren des Debug-Logging wechseln wir in den Aktenreiter Configuration und anschließend zu Debugging. Hier aktivieren wir Debug to syslog und speichern die Auswahl über Apply configuration (run-time only). Anschließend aktivieren die Ausgabe der Meldungen in der unteren Leiste durch das doppelte Dach-Symbol rechts unten.

tvheadend_13_enable_debugging

Anschließend kann über die Console / putty-Sitzung über den folgenden Befehl das Logging ausgegeben werden.

tail -f /var/log/syslog | grep 'tvheadend'

Jetzt wechseln wir erneut in den Aktenreiter Configuration, dann DVB Inputs und anschließend zu TV adapters. Hier wählen wir auf der linken Seite die jeweilige Karte aus und aktivieren auf der rechten Seite unterhalb Basic Settings Enabled und speichern anschließend mit Save (ganz unten).

tvheadend_14_enable_adapter

Am Ende prüfen wir, ob wirklich alle aktiv sind. Alle weiteren Funktionen greifen auf dieser Einstellung und es werden keine Fehler etc. ausgegeben.

Über den Aktenreiter Configuration, dann DVB Inputs und und Networks wählen wir über Add und dem anschließenden Auswahldialog: DVB-S Network.

tvheadend_15_Add_Network

In Network Name vergeben wir einen sinnvollen Namen zum Einsatzzweck passend. Da ich hart die Netzwerke nach Frequenz trenne, wähle ich als Namen eine Kombination von Netzwerktyp und einer fortlaufenden Nummer. Da ich gezielt die Frequenzen zuordne, muss das Häckchen bei Network Discovery entfernt werden. Wer jedoch alle verfügbaren Sender sehen möchte, sollte dies weiterhin aktiv haben. Das System versucht dann alle verfügbaren Frequenzen zu ermitteln. Kleiner Hinweis: Erst an einer späteren Stelle werden die verfügbaren Kanäle zur entgültigen Bereitstellung gemappt. Anschließend Create auswählen.

tvheadend_16_Add_Network_Settings_dvbs01

Wichtig ist jetzt, da wir die korrekte Zeitzone auf unserem Server aktiviert haben, dass EIT Local Time bei allen Netzwerken NICHT aktiv ist.

Hinweis: EIT Local Time darf nur aktiv sein, wenn am Server als Zeit UTC aktiviert wurde und die Serverzeit der aktuellen Uhrzeit entspricht.

troubleshooting_tvheadend_kodi_epg_01

 

In meinem Fall habe ich für viere Eingänge ein jeweils eigenes Netzwerk erstellt:

tvheadend_17_Add_Network_dvb-s01-04

Wir wechseln erneut in den Aktenreiter Configuration, dann DVB Inputs und anschließend zu TV adapters. Hier wählen wir jeweils die Karte links aus und ordnen auf der rechten Seite der Reihe nach jeweils ein Netzwerk zu.

tvheadend_17b_Set_Network.jpg

Anschließend wechseln wir in den Aktenreiter Configuration, dann DVB Inputs und anschließend zu Muxes. Hier öffnen wir über Add den Dialog zur Hinterlegung der gewünschten Frequenzen. Zunächst wählen wir ein Netzwerk aus.

tvheadend_18_Add_Muxes_dvbs01

Dann hinterlegen wir für eine Sendergruppe die Frequenz und weitere Parameter. In meinem Fall waren dies:

  • 10744 MHz – Arte, Eins Plus, … (SR 22000, Polarisation: H, FEC 5/6)

die ich aus der Astra-Senderliste für SD-Standard übernommen habe. Für alle mit großen Endgeräten empfiehlt sich jedoch hier HD.

tvheadend_19_Add_Muxes_Arte

Im Ergebnis für die erste Frequenz:

tvheadend_20_Result_Add_Muxes_Arte

Anschließend erfolgt ein automatioscher Scan durch das System, ob zu den hinterlegten Informationen entsprechende Sender vorliegen. Wenn alles in Ordnung ist, werden die Sender unterm den Aktenreiter Configuration, dann DVB Inputs und anschließend Services aufgeführt. Werden keine Sender gefunden, dann zunächst prüfen, ob Eingaben fehlerhaft waren. Zusätzlich sollte bei Korrektur der Scan-Status auf Active gesetzt werden, da sonst ggf. kein erneuter Scan erfolgt.

 

tvheadend_21_Result_Services

Folgende weitere Frequenzen habe ich hinterlegt:

  • 11836 MHz – Das Erste, HR, WDR, … (SR 27500, Polarisation: H, FEC 3/4)
  • 11954 – ZDF, Kika, … (SR 27500, Polarisation: H, FEC 3/4)
  • 12110 – MDR, NDR, RBB, … (SR 27500, Polarisation: H, FEC 3/4)

tvheadend_22_Result_Muxes

Wodurch ich folgende Senderliste erhalten habe, bei der ich nicht gewünschte abwählte und anschließend über Save speicherte:

tvheadend_23_Result_Services.jpg

Anschließend müssen wir die verfügbaren mappen, damit diese später uns auf den Clients zur Verfügung stehen können. Dies machen wir über Map All …

tvheadend_24_Services_Map_All.jpg

… und Map.

tvheadend_25_Services_Map_All_Menu

Das Ergebnis sehen wir anschließend unterm Aktenreiter Configuration, anschließend Channel / EPG und dann Channels:

tvheadend_26_Channel

Damit anschließend die Programme über Clients genutzt werden können, muss ein entsprechender Benutzer mit entsprechenden Rechten hinterlegt werden. Hierzu wechseln in den Aktenreiter Configuration und anschließend Access Entries. Über Add öffnen wir den entsprechenden Dialog und hinterlegen Username, Password und aktivieren Streaming, Advanced Streaming und HTSP Streaming. Für die Nutzung in Kodi über das TVHeadend Addon muss HTSP Streaming aktiviert sein!

tvheadend_27_Add_User_Kodi

Im Ergbnis sieht es so aus.

tvheadend_28_Add_User_Kodi_Result.jpg

Tipps und Tricks:

  • Wenn nichts passiert, dann als erstes prüfen ob unter Configuration, DVB Inputs, TV Adapters diese wirklich aktiv sind. Dies war bisher immer mein Fehler, da die Option gut versteckt ist.
  • Bei Korrektur von Frequenzen immer Scan Status auf Active setzen:
    tvheadend_tipps_01_Scan_Status
  •  Aktualisierung über das Aktualisierungssymbol erzwingen:tvheadend_tipps_02_Refresh
  • Deaktivierung nicht benötigter Channel Tags, wie SDTV, im Aktenreiter Configuration, dann Channel / EPG und anschließend Channel Tags:tvheadend_tipps_03_ChannelTag_disable
    Dadurch wird später im Kodi verhindert, dass bei Wahl der Senderliste über links und rechts nicht zwischen den Gruppen gewechselt werden kann.
  • Bei Verwendung unterschiedlichster Übertragungswege und Clients kann es ggf. von Vorteil sein, bewusst Channel Tags zu hinterlegen. Zum Beispiel, in einem privaten Haushalt mit vier Eingängen am System und vier Clients bei gleichzeitiger Nutzung. Hier können alle Sender für HD und SD eingerichtet werden. Anschließend werden zwei Channel Tags definiert und ja nach Standard die Sender nur einer Gruppe zugeordnet. Zusätzlich deaktivieren wir den Standard-Channel Tag TV channels. Im Kodi kann dann über rechts und links zwischen den Sendergruppen, in der Senderliste, gewechselt werden. So kann zum Beipsiel im Garten, bei schlechter WLAN-Verbindung, trotzdem der Client genutzt werden.

Installation und Einrichtung von Kodi 16.1 (Stand 25.04.2016):

Zunächst laden wir die notwendigen Installationsdateien herunter oder führen ja nach System die Installation durch.

https://kodi.tv/download/

kodi_16_1_tvheadend01

Unter Windows wird der Installer heruntergeladen und anschließend gestartet. Nach dem ersten Next und I Agree wählen wir zunächst die PVR Add-ons ab und nur das gewünschte Tvheadend HTSP Client an. Wer zusätzlich wie ich mobil Kodi bei Freunden etc. nutzt kann zusätzlich den PVR IPTV Simple Client mitinstallieren. Durch die Abwahl der nicht gewünschten PVR Add-ons entfallen später automatische Aktualisierungen zum Start von Kodi.

kodi_16_1_tvheadend02

kodi_16_1_tvheadend03

Unter Linux müssen ggf. zu Kodi die PVR Add-ons zusätzlich installiert werden. Unter Android sind diese durch die Installation bereits verfügbar.

Nach dem ersten Start von Kodi wechseln wir zu System, dann Settings und anschließend zu Add-ons. Dann wechseln wir in das Verzeichnis My add-ons und anschließend zu PVR Clients.

Jetzt wählen wir Tvheadend HTSP Client mittels ENTER-Taste …

kodi_16_1_tvheadend04

dann Configure

kodi_16_1_tvheadend05

und tragen Namen oder IP-Adresse, sowie Benutzername und Passwort in den Dialog ein und schließen das Fenster über OK (Hinweis: Zur Sicherheit die Eingaben anschließend prüfen. Hier hatte ich 1x das Problem, dass meine Eingaben nicht übernommen wurden).

kodi_16_1_tvheadend06

Jetzt wählen wir in der Add-on Information Enable aus …

kodi_16_1_tvheadend07

und schließen die Ansicht 1x mit ESC-Taste. Jetzt empfiehlt es sich erneut mit ENTER in die Add-on Information zu wechseln, da ggf. Enable noch nicht aktiv ist (Bug über mehrere Kodi-Versionen). Sollte dies so sein, dann bitte erneut Enable auswählen. Anschließend mit 2x ESC-Taste wechseln wir wieder in das Settings Menü und wählen dann TV aus. Hier wählen wir auch Enabled aus …

kodi_16_1_tvheadend08

unmittelbar danach werden die Daten von TVHeadend importiert (siehe rechts oben).

kodi_16_1_tvheadend09

Bei Problemen wird in der Statusleiste eine entsprechende Information ausgegeben. Wenn dies entsprechend vorliegt, sollten zunächst Benutzername, Passwort, IP / Servername im Add-on geprüft werden. Zusätzlich prüfen, ob beim Add-on und TV beides auf enabled gesetzt sind. Im Log vom TVHeadend sind entsprechende Informationen zu sehen (sollte vorab im Webbrowser geöffnet sein).

tvheadend_29_kodi_connected

oder in einer Shell auf dem Server:

tail -f /var/log/syslog | grep 'tvheadend'

tvheadend_30_kodi_connected

Weitere Möglichkeit bei Problemen: Dem Benutzer im TVHeadend wurde nicht das Recht für HTSP Streaming zugeteilt.

Wenn alles in Ordnung ist, sehen wir spätestens jetzt (nicht bei allen Skins von Kodi verfügbar) im Hauptmenü TV und Radio.

kodi_16_1_tvheadend10

Bei Auswahl von TV sehen wir zum Beispiel:

kodi_16_1_tvheadend11

Mit der Taste e können wir auch in die EPG-Ansicht mit einer Tastatur wechseln. Es gibt jedoch weitere Möglichkeiten.

kodi_16_1_tvheadend12

Bei Auswahl eines Programms zum Beispiel im Vollbild:

kodi_16_1_tvheadend13

Mit der Taste c (im Vollbildmodus) wird die Kanalliste eingeblendet. Hier kann, wie bereits beschrieben durch rechts und links, die Ansicht durch die Channel Tags geändert werden (bitte im ersten Bild rechts oben All channels und im zweiten Bild TV channels beachten – in meinem Fall gibt es keine Abweichungen).

 

kodi_16_1_tvheadend14

kodi_16_1_tvheadend15

Wenn am Ende alles funktioniert, dann empfiehlt es sich das Debug-Logging in TVHeadend zu deaktivieren, unter Configuration und dann Debugging.

Troubleshooting – EPG, Serverzeit und Zeitzone:

Wer zur Installation ggf. eine falsche Zeitzone hinterlegt hat, hat anschließend das Problem, dass die Zeiten im EPG vom Kodi verschoben sind.

Wir prüfen hierbei zunächst ob die Zeiten und die Zeitzone am Server korrekt sind:

cat /etc/timezone
date
hwclock --show

Wenn nicht, dann bitte erneut im oberen Teil Behebung Zeitprobleme für EPG beachten.

Zusätzlich überprüfen wir am jeweiligen Client ob die Zeit und die Zeitzone korrekt ist.

Dann prüfen wir die Einstellung EIT Local Time für jedes Netzwerk im TVHeadend, dass diese Option nicht aktiv ist:

troubleshooting_tvheadend_kodi_epg_01

Zusätzlich empfiehlt es sich auf dem Server die EPG-Datenbank zu löschen. Dies erfolgt über:

cd /home/hts/.hts/tvheadend
service tvheadend stop
rm epgdb.v2
service tvheadend start

troubleshooting_tvheadend_kodi_epg_02

Nach einigen Sekunden wird eine neue epgdb.v2 erstellt.

Jetzt löschen wir zusätzlich im Kodi-Client die Datenbank für den PVR-Dienst über Einstellungen -> PCR-Dienst -> Allgemein -> Daten löschen.

troubleshooting_tvheadend_kodi_epg_03

 

Epilog:

Zusammenfassend empfinde ich persönlich die Installation und Einrichtung der TVTuner-Karten unter Debian 8.4 mittlerweile als recht einfach. Ebenso auch die Installation von TVHeadend. Vor ein paar Jahren war dies noch anders und recht kompliziert. Durch die Verwendung von Kodi auf diversen Clients ist es recht einfach auf sehr vielen Endgeräten Radio und TV zu empfangen

Für Radio direkt gibt es jedoch auch auch innerhalb Kodi ein sehr gutes Add-on.

Wer zum Beispiel in seinem Gartenhaus via Satellit oder DVB-T lediglich für ein Endgerät eine Möglichkeit benötigt, der kann auch einen Raspberry Pi mit geeignetem USB-Stick als Streaming-Server verwenden. Hier muss jedoch beachtet werden, dass nur wenige Sticks funktionieren. Ich kann derzeit auch keine entsprechende Variante empfehlen, da ich über keinen geeigneten USB-Stick verfüge.

Quellen und weitere Links:

 

Einrichtung Fernbedienung Rii mini i7 unter Kodi 16

Dieser Artikel beschreibt meine Einrichtung der Fernbedienung Rii mini i7 unter Kodi 16. Mit Kodi 17 gibt es ein paar Änderungen die ich einem anderen Artikel beschrieben habe. Siehe hierzu: http://wp.me/p6v8bD-18R

 

Seit kurzem bin ich der Besitzer einer Rii Mini i7 Funk-Fernbedienung. Zu Beginn hatte ich Probleme bei der Einrichtung im Kodi, da die Fernbedienung drei verschiedene Varianten zur Bedienung verwendet (Maus, Tastatur, AppCommand) , die vom Kodi über keymaps gesteuert werden können. Hauptproblem hierbei ist die Verwendung der Zurück-Taste als einfache rechte Maus-Taste. Damit die Nutzung im Kodi nun möglich ist und gleichzeitig, wenn der Air Mouse-Modus aktiv ist, keine Mauszeiger über den Bildschirm huschen, müssen folgende Maßnahmen durchgeführt werden:

  • Aktivierung „Maus- und Touchscreen-Unterstützung aktivieren“ im KodiRiiminii7_Kodi_Maus-Aktivierung
  • Deaktivierung der Mausbewegungen im Kodi
  • Mapping der Tasten auf der Fernbedienung zur korrekten Verwendung im Kodi

Die Aktivierung Maus- und Touchscreen-Unterstützung aktivieren muss im Kodi über Einstellungen, System, Eingabegeräte erfolgen. Erst mit dieser Aktivierung war es möglich im Debug-Modus (Einstellungen, System, Debug, Debug-Logging aktivieren) die Maus-Interaktion in den erweiterten Log-Dateien einzusehen (Windows: %appdata%\Kodi\kodi.log).

Zur Deaktivierung der Mausbewegungen im Kodi und Mapping der Tasten, muss im Verzeichnis

  • Windows: %AppData%\Kodi\userdata\keymaps

eine Datei mit Endung xml und folgendem Inhalt erzeugt werden (Name in meinem Fall: riiminii7.xml), Stand 20. April 2016 :

<?xml version="1.0" encoding="UTF-8"?>
<!-- This file contains the mapping of keyboard keys to actions within Kodi.              -->
<!--                                                                                      -->
<!-- The format is:                                                                       -->
<!--  <window>                                                                            -->
<!--    <device>                                                                          -->
<!--      <button>action</button>                                                         -->
<!--    </device>                                                                         -->
<!--  </window>                                                                           -->
<!--                                                                                      -->
<!-- The <global> section is a fall through - they will only be used if the button is     -->
<!-- not used in the current window's section.                                            -->
<!--                                                                                      -->
<!-- Actions can be built-in functions.                                                   -->
<!--  eg <B>ActivateWindow(MyMusic)</B>                                                   -->
<!-- would automatically go to Music on the press of the B button.                        -->
<!--                                                                                      -->
<!--  Long presses                                                                        -->
<!--   A limitation is that if a single press is mapped in a section, a global "longpress"-->
<!--   will be ignored. The workaround is to duplicate the long mapping in the section.   -->
<!--                                                                                      -->
<!-- An empty action removes the corresponding mapping from default and parent keymaps.   -->
<!-- This is different from a "noop" action, which disables a button.                     -->
<!--                                                                                      -->
<!-- More documentation on keymaps can be found on http://kodi.wiki/view/keymaps          -->
<keymap>
  <global>
    <appcommand>
      <browser_home>ActivateWindow(Home)</browser_home>
    </appcommand>
    <keyboard>
      <key id="61570">left</key>
      <key id="61571">right</key>
      <key id="61568">up</key>
      <key id="61569">down</key>
      <key id="61572">pageup</key>
      <key id="61573">pagedown</key>
      <key id="61453">select</key>
      <key id="61656">contextmenu</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </global>
  <LoginScreen>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </LoginScreen>
  <Home>
    <appcommand>
      <browser_home>FullScreen</browser_home>
    </appcommand>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Home>
  <VirtualKeyboard>
    <keyboard>
      <key id="61453">select</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </VirtualKeyboard>
  <MyTVChannels>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyTVChannels>
  <MyTVRecordings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyTVRecordings>
  <MyTVTimers>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyTVTimers>
  <MyRadioChannels>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyRadioChannels>
  <MyRadioRecordings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyRadioRecordings>
  <MyRadioTimers>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyRadioTimers>
  <TVGuide>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </TVGuide>
  <MyFiles>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyFiles>
  <MyMusicPlaylist>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyMusicPlaylist>
  <MyMusicPlaylistEditor>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyMusicPlaylistEditor>
  <MyMusicFiles>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyMusicFiles>
  <MyMusicLibrary>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyMusicLibrary>
  <FullscreenVideo>
    <keyboard>
      <key id="61656">info</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </FullscreenVideo>
  <VideoTimeSeek>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </VideoTimeSeek>
  <FullscreenInfo>
    <keyboard>
      <key id="61656">Back</key>
      <key id="61453">AudioNextLanguage</key> <!-- press select -->
      <key id="61568">volampup</key> <!-- press up -->
      <key id="61571">StereoMode</key> <!-- press right -->
      <key id="61569">volampdown</key> <!-- press down -->
      <key id="61570">ToggleStereoMode</key> <!-- press left -->
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </FullscreenInfo>
  <PlayerControls>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </PlayerControls>
  <Visualisation>
    <keyboard>
      <key id="61656">Playlist</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Visualisation>
  <MusicOSD>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MusicOSD>
  <VisualisationSettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </VisualisationSettings>
  <VisualisationPresetList>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </VisualisationPresetList>
  <SlideShow>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </SlideShow>
  <ScreenCalibration>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </ScreenCalibration>
  <GUICalibration>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </GUICalibration>
  <VideoOSD>
    <keyboard>
      <key id="61656">AudioNextLanguage</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </VideoOSD>
  <VideoMenu>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </VideoMenu>
  <OSDVideoSettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </OSDVideoSettings>
  <OSDAudioSettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </OSDAudioSettings>
  <VideoBookmarks>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </VideoBookmarks>
  <MyVideoLibrary>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyVideoLibrary>
  <MyVideoFiles>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyVideoFiles>
  <MyVideoPlaylist>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyVideoPlaylist>
  <MyPictures>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyPictures>
  <ContextMenu>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </ContextMenu>
  <MusicInformation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MusicInformation>
  <MovieInformation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MovieInformation>
  <PictureInfo>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </PictureInfo>
  <Teletext>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Teletext>
  <Favourites>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Favourites>
  <NumericInput>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </NumericInput>
  <FullscreenLiveTV>
    <keyboard>
      <key id="61453">Playlist</key>
      <key id="61656">info</key>
    </keyboard>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </FullscreenLiveTV>
  <FullscreenRadio>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </FullscreenRadio>
  <PVROSDChannels>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </PVROSDChannels>
  <PVROSDGuide>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </PVROSDGuide>
  <MyTVSettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MyTVSettings>
  <FileBrowser>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </FileBrowser>
  <ShutdownMenu>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </ShutdownMenu>
  <AddonInformation>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </AddonInformation>
  <AddonSettings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </AddonSettings>
  <Addon>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Addon>
  <Programs>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Programs>
  <Settings>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Settings>
  <MediaFilter>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </MediaFilter>
  <Weather>
    <mouse>
      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>
    </mouse>
  </Weather>
</keymap>

Hinweis zur aktuellen Version vom 20.April 2016 und der Anpassung im Vergleich zur früheren Version vom 26. Januar 2016:

Durch den Hinweis von icecreamman habe ich für <mouse> zusätzlich:

<leftclick>Select</leftclick>
<mousedragend>Select</mousedragend>

hinterlegt. In den Logs waren bei aktiver Maus:

unknown mouse command 57605
unknown mouse command 57606
unknown mouse command 57607
unknown mouse command 57608

immer wieder zu sehen. Gemäß der Dokumentation für xbmcgui.py sind dies folgende Zuordnungen.

KEY_MOUSE_DRAG_END = 57606
KEY_MOUSE_DRAG_START = 57605
KEY_MOUSE_RDRAG = 57607
KEY_MOUSE_RDRAG_START = 57608

Somit fehlte mir eine notwendige Zuordnung, die ich auf der Seite

http://kodi.wiki/view/RF_remote_controls

übersehen hatte. Die Variante von icecreamman mit

<leftclick>Select</leftclick>

global für <mouse> zu verwenden hat sogar recht gut funktioniert, jedoch mit dem Problem, dass beim Drehen der Fernbedienung der OK-Button weiterhin nicht funktionierte.

Theoretisch hätte es reichen müssen global folgenden Einstellungen für <mouse> zu hinterlegen:

      <leftclick>Select</leftclick>
      <mousedragend>Select</mousedragend>
      <rightclick>Back</rightclick>
      <mouserdragend>Back</mouserdragend>
      <mousemove>noop</mousemove>
      <mousedrag>noop</mousedrag>

jedoch war mir bei Tests aufgefallen, dass teilweise der Mauszeiger sichtbar wurde und bei Bewegung der Fernbedienung die OK-Taste nicht funktionierte. Durch die Hinterlegung jeweils der betroffenen Elemente konnte dies verhindert werden (Tests mit Kodi 15.2, Kodi 16 und Kodi 16.1 RC2). Aktuell fällt mir nicht auf, in welchem Modus sich die Fernbedienung befindet, wenn ich Kodi nutze.

Zusätzlich habe ich bereits erste Elemente und Funktionen erweitert, wobei ggf. weitere Elemente (PVR, Audio, …) hinzugefügt werden (bitte den jeweiligen Stand und Historie beachten). Durch

...
  <global>
    <appcommand>
      <browser_home>ActivateWindow(Home)</browser_home>
    </appcommand>
  ...
  <Home>
    <appcommand>
      <browser_home>FullScreen</browser_home>
    </appcommand>
   ...

wurde aktiviert, dass von jedem Ort im Kodi durch die Taste mit dem Haus-Logo direkt auf die Start-Seite gewechselt wird. Sofern man sich bereits auf der ersten Seite befindet, erfolgt ein Wechsel in den Fullscreen.

Durch:

<global>
...
<keyboard>
<key id="61570">left</key>
<key id="61571">right</key>
<key id="61568">up</key>
<key id="61569">down</key>
<key id="61572">pageup</key>
<key id="61573">pagedown</key>
<key id="61453">select</key>
<key id="61656">contextmenu</key>
</keyboard>

wurden die regulären Tasten der Fernbedienung ihrer korrekten Funktion zugeordnet.

Durch:

<FullscreenInfo>
<keyboard>
<key id="61656">Back</key>
<key id="61453">AudioNextLanguage</key> <!-- press select -->
<key id="61568">volampup</key> <!-- press up -->
<key id="61571">StereoMode</key> <!-- press right -->
<key id="61569">volampdown</key> <!-- press down -->
<key id="61570">ToggleStereoMode</key> <!-- press left -->
</keyboard>
  <VideoOSD>
    <keyboard>
      <key id="61656">AudioNextLanguage</key>
    </keyboard>

wurden ein paar Optionen aktiv, damit im Video-Modus bei Wahl der Options-Taste (rechts unten) folgenden Optionen zur Verfügung stehen:

  • OK-Taste: Wechsel der Tonspur
  • nach oben-Taste: Lautstärkeanhebung +
  • nach unten-Taste: Lautstärkeanhebung –
  • nach rechts-Taste: Wechsel des steroskopischen 3D-Modus
  • nach links-Taste: Wechsel zwischen normalen und 3D-Modus

Bitte beachten, dass es sich um eine Lautstärkeanhebung und nicht um die Lautstärkekorrektur handelt. Auf den Fire TV-Sticks ist eine Regulierung der Lautstärke nur über die Lautstärkeanhebung möglich.

Zu den aktuellen Anpassungen werden voraussichtlich weitere zur einfacheren Verwendung der Fernbedienung erfolgen.

Wer eigene Anpassungen durchführen möchte, der benötigt ggf. etwas Hilfe zur Bestimmung des jeweiligen Window Name im Kodi. Hierzu habe ich folgenden Beitrag http://wp.me/p6v8bD-1ex verfasst.

Zusätzlich ist zu empfehlen, dass die Power-Taste auf der Fernbedienung durch Fehlbedienung das System nicht herunterfährt.

  • Windows 10: Energie-Optionen -> Auswählen, was beim Drücken von Netzschaltern geschehen soll -> Nichts unternehmen auswählenRiiminii7_Kodi_Energieoptionen

 

Zur Erweiterung der Fernbedienung zur Nutzung der Power-Taste habe ich am 3. November 2016 einen zusätzlichen Beitrag verfasst: https://lichtschattenblog.wordpress.com/2016/11/03/fernbedienung-ri…0-64bit-und-kodi/

 

OpenElec – Zeitprobleme

Bei Verwendung von OpenELEC kann es zu Problemen bei der Ermittlung des korrekten Datums und der Zeit kommen. In meinem Fall wird zum Start die autoexec.py ausgeführt und bei Korrektur der Uhrzeit im laufenden Betrieb erfolgt immer ein Neustart des Systems. Zudem steht die grafische Oberfläche nicht zur Verfügung, da das betreuende System sich an einem anderen Ort befindet und nur von öffentlichen Plätzen die Eingabe ersichtlich ist. Meine Lösung ist der Zugriff via ssh (muss vorab aktiviert sein):

  • autostart.sh erstellen
    nano /storage/.config/autostart.sh
    und folgende Zeilen einfügen:

    #!/bin/sh
    (sleep 10; \
    /usr/sbin/ntpdate pool.ntp.org; \
    )&
  • autostart.sh ausführbar machen
    chmod +x /storage/.config/autostart.sh

Unter Links habe ich meine Quelle aufgeführt. Jedoch verwende ich einen abweichende und nur intern verfügbaren Zeitserver. Für den Zugriff auf den Standard-Zeitserver ist zudem Zugriff auf ein Proxy notwendig, wodurch wir bei der Standard-Variante keinen Zugriff auf den externen Zeitserver haben. Die Zeit habe ich auf 10 Sekunden gesetzt. Bei Verwendung von 30 Sekunden befand sich das System in einer Schleife und führte ständig einen reboot durch.

Getestete Version: OpenELEC (official) Version: 3.2.3

Bei Tests ist ggf die Log vom XBMC hilfreich (Auszug Test mit sleep 30):

  • nano /storage/.xbmc/temp/xbmc.log
01:03:49 T:2871981152 NOTICE: Thread Jobworker start, auto delete: true
10:10:14 T:3047178240 NOTICE: Storing total System Uptime
10:10:14 T:3047178240 NOTICE: Saving settings
10:10:14 T:3047178240 NOTICE: stop all
10:10:14 T:3047178240 NOTICE: ES: Stopping event server
10:10:14 T:3047178240 NOTICE: stopping zeroconf publishing
10:10:14 T:3047178240 NOTICE: Webserver: Stopping...
10:10:14 T:3047178240 NOTICE: WebServer: Stopped the webserver
10:10:14 T:3047178240 NOTICE: Webserver: Stopped...
10:10:15 T:2888758368 NOTICE: ES: UDP Event server stopped
10:10:15 T:3047178240 NOTICE: stop dvd detect media
10:10:16 T:3047178240 NOTICE: stop player

Links:

Erstelle eine kostenlose Website oder Blog – auf WordPress.com.

Nach oben ↑