19 KiB
03 — UI: hisenseUI, Web-Browser, Launcher, AM, Daten
Status: UI-Start, Pfade, Prozesse, App-/Launcher-Daten und AM-Konfiguration CONFIRMED (live/static). Template-/API-Details und die aktive Skin-Auswahl teils UNVERIFIED.
1. Zwei Browser, zwei Welten
| TV-UI | Web-Browser | |
|---|---|---|
| Prozess | hisenseUI (z. B. PID 589) |
hisense_browser (z. B. PID 1320) |
| Start | /3rd/opera4x/hisenseUI/start-UI.sh (autorun Zeile 168) |
/3rd/opera4x/browser/run-Browser.sh (AM-App opera4x) |
| Renderer | GLES (--hw-gles, Mali) |
DirectFB (--hw-dfb) |
| Seite | /3rd_rw/UI/index.html |
beliebige Web-URL; unsere Recon-Seite |
| JS-Plugins | /3rd/UI_jsplugins |
/3rd/opera4x/opera_dir/jsplugins |
| DevTools | 9223 (wenn enable_developer_tools) |
9224 (wenn enable_developer_tools) |
| Zweck | TV-Home/Settings/Launcher | Internet/TV-Browser/Web-Apps |
| User | root | root |
Wichtig: Das TV-UI ist nicht der „TV Browser“-Tile. Der Tile startet opera4x/hisense_browser (Web-Browser). Das System-UI ist hisenseUI und läuft separat.
2. TV-UI: Start und Seite
2.1 Startskript
/3rd/opera4x/hisenseUI/start-UI.sh (ro; Aufruf aus /basic/autorun.sh Zeile 168):
set -e
cd /3rd/opera4x/hisenseUI
. ./opera_env.sh
export MEMORY_LIMIT=$(( 500*1024*1024 ))
STARTPAGE=/3rd_rw/UI/index.html
# optional: "disk" -> /3rd_rw/UI/index.html; "url" -> http://172.16.12.134/modernTV/UI/hisenseUI/index.html
export LD_PRELOAD="/3rd/opera4x/lib/libcurl.so.4.4.0"
cmd="./bin/hisenseUI"
cmd+=" --hw-gles"
cmd+=" --js-flags=\"--expose-gc\""
cmd+=" --jsplugins-dir=/3rd/UI_jsplugins"
cmd+=" --enable-gpu-rasterization --force-gpu-rasterization"
cmd+=" --force-gpu-mem-available-mb=512 --disable-software-rasterizer"
cmd+=" --disable-web-security"
cmd+=" --http-cache-size=30"
cmd+=" -u ${STARTPAGE}"
# wenn /3rd_rw/appdata/enable_developer_tools: --remote-debugging-port=9223
exec $cmd
- Seite:
/3rd_rw/UI/index.html(rw). --disable-web-security: lokale Files/Cross-Origin erlaubt; die UI kannfile:////3rd_rwlesen.--jsplugins-dir=/3rd/UI_jsplugins: TV-APIs der UI.- GLES/Mali:
ins_arm_mali_mod.sh,OPERA_EGL_SCREEN_SIZE=1920x1080; UI-CSS nutzt 1280×720. - DevTools 9223 nur mit
/3rd_rw/appdata/enable_developer_tools(existiert). - MEMORY_LIMIT 500 MB;
--expose-gc; GPU-Rasterisierung.
2.2 UI-Seite /3rd_rw/UI/index.html
Die Seite ist eine PIXI-basierte Web-UI (loadModel()):
$LAB.script("pub/PubDefine.js").wait()
.script("model/model.js")
.script("lib/pixi.js")
.script("lib/tweenjs-0.6.2.combined.js")
.script("sdk/MessagePool.js")
.script("sdk/UI.js")
.script("lib/jquery-1.8.2.js")
.script("sdk/Const.js")
.script("sdk/Debug.js")
.script("sdk/Util.js")
.script("pub/PubFunc.js")
.script("lib/launcherDataInterface.js")
.script("lib/parseXML.js")
.script("lib/inputsInterface.js")
.script("pub/HisProductConfig.js")
.script("sdk/Logreport.js")
.script("pub/persianCalendarTime.js")
UI/-Unterordner:assets/,data/,keyboard/,language/,lib/,model/,module/,pub/,sdk/,templates/,tools/.pub/HisProductConfig.js(Dump):acrflag=false,ciplus_certification=false,pvr_enable=true.model/model.js/sdk/UI.js: UI-Framework;TVAPI/model/guijsstehen der UI-Seite zur Verfügung.lib/launcherDataInterface.js(139 KB,ldi.js): lädt Launcher-/Kategorie-/App-Daten; zentrale Stelle für App-Tiles.templates//module/: UI-Templates/Module (Settings, Launcher, etc.).UI_jsplugins(ro,/3rd/UI_jsplugins):libhisensejs,libmodeljs,libutiljs,libimejs,libdtv,libmmp,libsql,libpwjs,libmtkrpcwrapper,libchanneldump,libdmp-adapter,libavsmusic, … — dieHisense_*/TVAPI-Funktionen.
2.3 UI-Prozess prüfen / neu starten
ps | grep hisenseUI | grep -v grep
# PID ermitteln
kill <PID>
nohup /3rd/opera4x/hisenseUI/start-UI.sh >/tmp/hisenseUI.log 2>&1 &
start-UI.shexecthisenseUI; nachkillstartet das Skript einen neuen UI-Prozess.- Achtung: Bei kaputter
UI/index.htmlwird der Bildschirm schwarz. SSH/Root-Loop als Rettungsweg; Backup derindex.htmlzurückkopieren, UI neu starten. - DevTools 9223 (wenn
enable_developer_tools):http://192.168.188.94:9223/vom Host (Chrome/Chromium). Dort kannst du die UI-Seite inspizieren/JS ausführen.
3. Launcher-/App-Daten (das eigentliche „Wo ist das UI?“)
Die UI liest die App-/Kategorie-Daten über lib/launcherDataInterface.js (ldi.js) aus /3rd_rw/appdata/launcher/ (Bridge-Root /3rd_rw/appdata):
/3rd_rw/appdata/launcher/
preset.txt # 26 vorinstallierte App-Tiles (Cache/Liste)
Appinfo.json # vom Nutzer installierte Web-Apps (unser VidaaRecon)
deletedPresetApp.txt # JSON-Array der ausgeblendeten Tiles
rememberEditApp.json # Launcher-Edit-State
settingappinfo.txt # Setting-/App-Info
data/
CategoryIndex.xml # Kategorien (aktiv, wenn serviceUpdate zum Land passt)
CategoryList_*.xml
Category_1001_*.xml # App-Tiles (35 KB)
Category_57_*.xml # App-Tiles (35 KB)
PicInfo.xml # Bilder/Assets
serviceUpdate.xml # Land/Timestamp der Store-/Kategorie-Daten
SwitchFeatureList.xml
res/ # Tile-Icons (PNG/JPG)
cache/index.json # Icon-Cache
firstNotification.txt, lanCode.txt, NotifySwitchStatus.txt
Zusätzlich:
/3rd_rw/launcher/ # Alt-/Asset-Skin (html/js/css/img/data); Datenpfad appdata/launcher
/3rd_rw/UI/data/ # Default-/Fallback-Launcher-Daten (wenn Store-Land/Timestamp nicht passt)
/3rd_rw/launcher/data/templateConfig.xml # Template-Konfiguration (Alt-/UI-Templates)
/3rd_rw/VIDAAU2Launcher/ # VIDAA-U2-Tile-Launcher (Alternativ-Skin; Aktivierung UNVERIFIED)
3.1 ldi.js: aktive Datenquelle
var mainJSON;
var defaultData = (serviceCountryCode != currentCountryCode) || getAlwaysDefaultDataStatus() || serviceUpdate.timeStamp == 0;
var launcherPath = defaultData ? "UI/data/" : "launcher/data/";
if (defaultData) mainJSON = loadLauncherDefaultData(launcherPath, currentCountryCode);
else mainJSON = readXMLDOM(launcherPath + "CategoryIndex.xml", 1);
...
- Land/Sprache:
user_db.db→tvapi.str.basic.settings.tvset.location = DEU,tvapi.i32.language.osd = 16, Brandhis, Region 7. - Aktiver Pfad:
launcher/data/(/3rd_rw/appdata/launcher/data), sofernserviceUpdate.xmlzum LandDEUpasst und Timestamp ≠ 0; sonstUI/data/-Default. - Quelle:
CategoryIndex.xml/CategoryList_*.xml/Category_*.xml/PicInfo.xml. preset.txt: wird aus den Kategorie-/App-Daten +deletedPresetApp.txterzeugt (allAppsWriteToFileForUse); ist ein Cache.deletedPresetApp.txt: persistente Hide-Liste (JSON-Array von URLs/IDs); die UI/der Launcher filtert damit.Appinfo.json: User-Web-Apps (pushFavoriteApps), z. B. unserVidaaRecon.
3.2 Die 26 Preset-Tiles (Stand live)
Aus preset.txt (Reihenfolge/Inhalt live):
| App | StartCommand / URL | Typ |
|---|---|---|
| Netflix | netflix |
native (AM) |
| Prime Video | amazon |
native (AM) |
| Disney+ | https://cd-dmgz.bamgrid.com/bbd/hisense_tv/index.html |
Web |
| maxdome | http://8577004de253-ott-tv.maxdome.de |
Web |
| YouTube | youtube |
native/Web (AM) |
| Rakuten TV | https://prod-hisense-ui40-app.rakuten.tv/ |
Web |
| rlaxxTV | https://tvapp.rlaxxtv.com/r/no-animations/720/?customer=Hisense |
Web |
| Chili | https://hisense.chili.com |
Web |
| UEFA.TV | https://smarttv.uefa.tv |
Web |
| RTL TVNOW | https://app.hisense.rtl-smart.tv/ |
Web |
| Kidoodle.TV | https://ctv-vewd.kidoodle.tv |
Web |
| AccuWeather | accuweather |
native/Web |
| YuppTV | http://www.yupptv.com/hisense/index.html |
Web |
| Plex | http://plex.tv/web/tv/hisense?mixedContent=1 |
Web |
| Videociety | https://smarttv3.videociety.de |
Web |
| App Store | http://2897431816.fxm3751860294.com/?category=apps |
Store/Foxxum |
| Movies | ...?category=movies |
Store |
| Catch up TV | ...?category=catchup |
Store |
| News | ...?category=news |
Store |
| Music | ...?category=music |
Store |
| Sports | ...?category=sport |
Store |
| Search | ...?category=search |
Store |
| Game Center | http://apps.tvgam.es/tv_games/hisense_portal/production/portal/index.html |
Web |
| TV Browser | browser |
native (Web-Browser) |
| VIDAA tv | vidaa-plus |
native/Store |
| VidaaRecon | http://192.168.188.150:9000/recon.html |
User/Web (UrlType 36) |
UrlType 37= Start Web App;36= User-/Recon-App (unser Eintrag).PreInstall:truebei den Presets; unserVidaaReconist inpreset.txtgelandet (Launcher-Cache),Appinfo.jsonhat den User-Eintrag.StoreType:0/foxxum; die Store-Apps sind Foxxum-URLs.- Icons:
res/167593027...png;Image/IconURL/Thumb/Icon_96; FallbackuseDefaultImg.
3.3 Appinfo.json (User-Apps) — unser Beispiel
{"AppInfo":[
{"AppId":"VidaaRecondebug",
"Thumb":"http://192.168.188.150:9000/icon.png",
"Icon_96":"http://192.168.188.150:9000/icon.png",
"Image":"http://192.168.188.150:9000/icon.png",
"URL":"http://192.168.188.150:9000/recon.html",
"AppName":"VidaaRecon",
"Title":"VidaaRecon",
"IconURL":"http://192.168.188.150:9000/icon.png",
"StartCommand":"http://192.168.188.150:9000/recon.html",
"InstallTime":"2026-10-25",
"RunTimes":0,
"StoreType":"foxxum",
"PreInstall":false}
]}
- Die UI/der Launcher liest
AppInfound fügt die Apps als User-Apps hinzu (canRemove=true;appUrlType=START_WEBAPP). - Der
StartCommand/URLkannhttp://…oderfile:///3rd_rw/…sein; der Web-Browser (hisense_browser) öffnet ihn (nicht die UI). - Icon: HTTP/
file://; lokal inres//cache;useDefaultImgals Fallback.
3.4 deletedPresetApp.txt (Hide-Liste)
- JSON-Array von URLs/StartCommands/IDs.
- Der Launcher/
ldi.jsfiltert die Kategorien/preset-Liste damit. - Stand 2026-10-26: Die alten Probe-Einträge (data:, javascript:, 127.0.0.1;cd…) wurden beim Cleanup entfernt; die Datei ist jetzt
[]. Die 26 Presets sind sichtbar. Zum Ausblenden die gewünschten URLs/IDs eintragen (siehe05-bloat.md). - Die Datei ist rw (
/3rd_rw/appdata/launcher/deletedPresetApp.txt); per SSH/File.writeänderbar.
4. LauncherService
/3rd/launcherservice/startLS.sh (aus delayrun.sh nach 15 s):
export LD_LIBRARY_PATH=/lib:/basic:/basic/lib:/3rd/lib:/3rd/hicjson/lib/:/3rd/hisdk2.0/lib:/3rd/hisdk/lib:/3rd/loglevel/lib:/3rd/his_runlog/lib:/3rd/launcherservice/lib
/3rd/launcherservice/bin/LauncherService &
- Rolle: liefert/aktualisiert Launcher-/Kategorie-/App-Daten und Auth für die UI; verwaltet
/tmp/launcher/…. - Strings (Auszug):
/3rd_rw/appdata/launcher/data/CategoryIndex.xml,PicInfo.xml,serviceUpdate.xml/3rd_rw/appdata/launcher/res,cache/tmp/launcher/{CategoryIndexNew.xml,PicInfo.xml,launcher_recv_socket,launcher_send_socket,launcherServiceAuth.xml}/cgi-bin/launcher_index.fcgi?action=GetChannelFilePath|GetEULAFilePath|GetSwitchFlagupdateFile4weblauncher,LauncherInit,Launcher_SendMsgToLauncher
Hisense_GetLauncherServiceAuth(JS) liest/tmp/launcherServiceAuth.xml(Launcher-Auth-Token).- Store/Foxxum: die Kategorie-/App-Daten kommen aus den Store-/Foxxum-Daten;
serviceUpdate.xml(Land/Timestamp) entscheidet, oblauncher/dataoderUI/datagenutzt wird.
Für Modding: preset/Appinfo/deleted sind die lokalen, einfachen Hebel. Die Category*.xml/PicInfo/serviceUpdate sind die Store-/Launcher-Quelle; Änderungen daran nur mit Backup (der Service kann sie überschreiben).
5. AM (app_man) und :am
- Start:
/basic/app_man -c /basic/am_config -s /basic/am_start.ini -input_fifo &(autorun Zeile 177). - Boot-Apps:
dtv_app_mtk(/basic/dtv_svc),netflix,dialserver,samba_relay_agent,browser_base,securetime(ausam_start.ini). - On-demand/Apps:
opera4x(run-Browser.sh),opera_browser,youtube,cobalt,amazon_ignition,factory_lite,huluplus,hotlist,generic_osd,vudu,diskcache,youtube_kids/youtube_tv, … - Protokoll:
:am,<app>,:<verb>=<val>; Verbs u. a.:start,stop,pause,resume,URL,backgm,foregm,shutdown,suspend,wakeup:am,am,:shutdowned=…,:am,am,:stoped_all=…:am,<app>,<sub>:started=…etc. (Status-Reports)
- Kein
exec/argsüber AM; nur die konfiguriertenexec/argsausam_config. - JS:
HiBrowser.System.startApp(":am,<app>,:start=<val>")im Web-Browser;Hisense_StartApp(…)in der UI (Signatur/VerhaltenUNVERIFIED; im UI-JS/DevTools testen). - Beispiele:
(Die exakte
HiBrowser.System.startApp(":am,opera4x,:start=opera4x"); HiBrowser.System.startApp(":am,netflix,:start=netflix"); HiBrowser.System.startApp(":am,opera4x,:URL=http://192.168.188.150:9000/recon.html"); HiBrowser.System.startApp(":am,opera4x,:stop=opera4x");start-Semantik je App istUNVERIFIED;:URL/:stopsind aus denapp_man-Strings belegt.)
6. Web-Browser (hisense_browser, opera4x)
/3rd/opera4x/browser/run-Browser.sh (ro):
. ./opera_env.sh
export LD_PRELOAD=/3rd/opera4x/lib/libcurl.so.4.4.0
cmd="./bin/hisense_browser"
cmd+=" --hw-dfb --dfb-memory-limit-mb=128"
cmd+=" --disable-imestart-on-enter-key"
cmd+=" --with-feature:tvsdk-netview=on"
cmd+=" --with-feature:adaptive-streaming-secure-path-drm=on"
cmd+=" --ait=data/mit.sec"
cmd+=" --allow-running-insecure-content"
cmd+=" --enable-spatial-navigation"
cmd+=" --allow-file-access-from-files"
cmd+=" --http-cache-size=30"
# --disable-single-window-browsing (Modell)
# --remote-debugging-port=9224, wenn /3rd_rw/appdata/enable_developer_tools
exec $cmd "$@"
- Profil:
/3rd_rw/opera4x/opera_home_browser/(opera.json,browser.db,cookies,Local Storage,web_ui,widevine, …). opera.json:userjs.path=/3rd/opera4x/opera_dir/userjs_browser(ro);spatial_navigation_enabled=true;transparent=true; Font Tiresias;http_accept_language=de, en.browser.db: SQLite (Opera Speed Dial/History); nicht die TV-UI-App-Liste.user_db.db: TV-Settings (Sprache, Land, Brand, Region); nicht die App-Liste.- JS-APIs:
/3rd/opera4x/opera_dir/jsplugins(libhspdk-jsx,libhspdk-linux,libhisensejs,libmodeljs, …) →HiBrowser(File,System,loadLibrary,Cache,JsonWrite, …),Hisense_*. - Unlock:
--allow-file-access-from-files,--allow-running-insecure-content,--disable-web-security? (das UI nutzt--disable-web-security; der Web-Browser nicht, aber--allow-file-access-from-files). - DevTools 9224 mit
enable_developer_tools; von dort kann die Seite/JS inspiziert werden. - Unser Recon:
http://192.168.188.150:9000/recon.html;HiBrowser.File.download/write,HiBrowser.System.startApp,HiBrowser.loadLibrary.
Root-Kontext: hisense_browser ist UID/GID 0, CapEff voll, Single-Process, kein Seccomp. Die HiBrowser.File-APIs sind root-equivalent (Whitelist: /3rd_rw/appdata, /dev/shm/shm_tmp, /3rd/launcher/data; USB-Symlink-Bypass).
7. Aktive UI vs. Alt-/Alternativ-Skins
| Pfad | Rolle | Status |
|---|---|---|
/3rd_rw/UI/index.html + /3rd/opera4x/hisenseUI |
aktive TV-UI (PIXI, GLES) | aktiv (Startskript) |
/3rd_rw/appdata/launcher |
aktive Launcher-/App-Daten | aktiv (ldi.js launcher/data) |
/3rd_rw/UI/data |
Default-/Fallback-Daten | Fallback, wenn Store-Land/Timestamp nicht passt |
/3rd_rw/launcher |
Alt-/Asset-Skin (HTML/JS/CSS/IMG; data/templateConfig.xml) |
Alt/Asset; nicht der UI-Start |
/3rd_rw/VIDAAU2Launcher |
VIDAA-U2-Tile-Launcher | Alternativ; Aktivierung auf diesem Modell UNVERIFIED |
/3rd/UI_jsplugins |
UI-TV-APIs | aktiv |
/3rd/opera4x/opera_dir/jsplugins |
Web-Browser-JS-APIs | aktiv (für hisense_browser) |
Wichtig: Wenn du „die UI ändern“ willst, ist der aktive Einstieg /3rd_rw/UI/index.html und die Launcher-Daten in /3rd_rw/appdata/launcher. Die launcher-/VIDAAU2Launcher-HTML/JS sind Alt-/Alternativ-Skins; Änderungen dort wirken nur, wenn die UI sie tatsächlich lädt (UNVERIFIED).
8. UI-Restart / DevTools / Tests
# UI-Prozess
ps | grep hisenseUI | grep -v grep
kill <PID>
nohup /3rd/opera4x/hisenseUI/start-UI.sh >/tmp/hisenseUI.log 2>&1 &
# Web-Browser via AM
# :am,opera4x,:stop / :start (oder TV-Browser-Tile)
- UI DevTools 9223:
http://192.168.188.94:9223/(Host-Chrome). Dortdocument,TVAPI,model,guijs,Hisense_*prüfen. - Web-Browser DevTools 9224:
http://192.168.188.94:9224/; dortHiBrowser,File,System,Hisense_*prüfen. - UI-Test: Nach Änderung der
UI/index.html/JS/CSS UI neu starten; bei schwarzem Bildschirm SSH/Root-Loop + Backup. - Launcher-Test:
Appinfo.json/deletedPresetApp.txtändern; UI/Launcher neu starten; Tiles prüfen. - App-Tile-Test:
Appinfo.jsonergänzen; UI neu starten; App öffnen; Web-Browser/Recon. - UI-Dateien hochladen: nach optionalem SFTP-Install
(
../root/scripts/host/install_sftp.sh) mitsftp root@192.168.188.94(put -r/get); sonst per SSH/taroderFile.download. Backup vorher.
9. Evidence
- Prozesse:
ps,/proc/<pid>/cmdline,/proc/<pid>/environ(hisenseUIPID 589;hisense_browserPID 1320). - Startskripte:
/3rd/opera4x/hisenseUI/start-UI.sh,/3rd/opera4x/browser/run-Browser.sh,/3rd/launcherservice/startLS.sh. - UI-Seite:
/3rd_rw/UI/index.html;UI/pub/HisProductConfig.js;UI/lib/launcherDataInterface.js(ldi.js);UI/data/;UI/templates/. - Launcher:
/3rd_rw/appdata/launcher/{preset.txt,Appinfo.json,deletedPresetApp.txt,data/*,res/*,cache/*};/3rd_rw/launcher/data/templateConfig.xml;/3rd_rw/VIDAAU2Launcher/html/*. - AM:
/basic/am_config,/basic/am_start.ini,app_man-Strings (:am,…). - LauncherService:
/3rd/launcherservice/bin/LauncherService-Strings. - Browser:
/3rd_rw/opera4x/opera_home_browser/opera.json,browser.db;run-Browser.sh;enable_developer_tools. - Settings:
/3rd_rw/user_db.db(DEU, Brand his, Region 7).
10. Unknowns
- Aktive UI-Template-/Skin-Auswahl (
UI/templatesvs.launcher/VIDAAU2Launcher);VIDAAU2Launcherauf diesem Modell aktiv?UNVERIFIED. - Exakte
Hisense_*-Signaturen/Semantik (UI-APIs) undguijs/TVAPI/model-Interna. LauncherService-Datenquelle/Update (Store/Foxxum/FCGI) und obpreset.txtbei jedem Start ausCategory*.xmlneu geschrieben wird.app_man/AM-Interna,coexist_set/backgm/keymap, exakte:am-Semantik je App.- Ob die UI die
launcher-HTML/JS überhaupt lädt (Alt-Skin) oder nur die Daten (launcher/data); die aktive Seite ist/3rd_rw/UI. - Ob eigene
UI/index.html-Pages dieTVAPI/model-Globals brauchen oder obHisense_*/guijsdirekt nutzbar sind (im UI-DevTools testen). - Bloat-/Deaktivierungsfolgen (siehe
05):ms_service,swrc,runlog,Seriallog,HamService,securetime,netflix,browser_base,app_man,dtv_svc.