367 lines
19 KiB
Markdown
367 lines
19 KiB
Markdown
# 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):
|
||
|
||
```sh
|
||
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 kann `file://`/`/3rd_rw` lesen.
|
||
- **`--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()`):
|
||
|
||
```js
|
||
$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`/`guijs` stehen 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`, … — die `Hisense_*`/`TVAPI`-Funktionen.
|
||
|
||
### 2.3 UI-Prozess prüfen / neu starten
|
||
|
||
```sh
|
||
ps | grep hisenseUI | grep -v grep
|
||
# PID ermitteln
|
||
kill <PID>
|
||
nohup /3rd/opera4x/hisenseUI/start-UI.sh >/tmp/hisenseUI.log 2>&1 &
|
||
```
|
||
|
||
- `start-UI.sh` **exec**t `hisenseUI`; nach `kill` startet das Skript einen neuen UI-Prozess.
|
||
- **Achtung:** Bei kaputter `UI/index.html` wird der Bildschirm schwarz. SSH/Root-Loop als Rettungsweg; Backup der `index.html` zurü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
|
||
|
||
```js
|
||
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`, Brand `his`, Region 7.
|
||
- **Aktiver Pfad:** `launcher/data/` (`/3rd_rw/appdata/launcher/data`), sofern `serviceUpdate.xml` zum Land `DEU` passt und Timestamp ≠ 0; sonst `UI/data/`-Default.
|
||
- **Quelle:** `CategoryIndex.xml`/`CategoryList_*.xml`/`Category_*.xml`/`PicInfo.xml`.
|
||
- **`preset.txt`:** wird aus den Kategorie-/App-Daten + `deletedPresetApp.txt` erzeugt (`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. unser `VidaaRecon`.
|
||
|
||
### 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:true`** bei den Presets; unser `VidaaRecon` ist in `preset.txt` gelandet (Launcher-Cache), `Appinfo.json` hat den User-Eintrag.
|
||
- **`StoreType`:** `0`/`foxxum`; die Store-Apps sind Foxxum-URLs.
|
||
- **Icons:** `res/167593027...png`; `Image`/`IconURL`/`Thumb`/`Icon_96`; Fallback `useDefaultImg`.
|
||
|
||
### 3.3 `Appinfo.json` (User-Apps) — unser Beispiel
|
||
|
||
```json
|
||
{"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 `AppInfo` und fügt die Apps als **User-Apps** hinzu (`canRemove=true`; `appUrlType=START_WEBAPP`).
|
||
- Der `StartCommand`/`URL` kann `http://…` oder `file:///3rd_rw/…` sein; der **Web-Browser** (`hisense_browser`) öffnet ihn (nicht die UI).
|
||
- **Icon:** HTTP/`file://`; lokal in `res/`/`cache`; `useDefaultImg` als Fallback.
|
||
|
||
### 3.4 `deletedPresetApp.txt` (Hide-Liste)
|
||
|
||
- JSON-Array von URLs/StartCommands/IDs.
|
||
- Der Launcher/`ldi.js` filtert 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 (siehe `05-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):
|
||
|
||
```sh
|
||
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|GetSwitchFlag`
|
||
- `updateFile4weblauncher`, `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, ob `launcher/data` oder `UI/data` genutzt 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` (aus `am_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 konfigurierten `exec`/`args` aus `am_config`.
|
||
- **JS:** `HiBrowser.System.startApp(":am,<app>,:start=<val>")` im Web-Browser; `Hisense_StartApp(…)` in der UI (Signatur/Verhalten `UNVERIFIED`; im UI-JS/DevTools testen).
|
||
- **Beispiele:**
|
||
```js
|
||
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");
|
||
```
|
||
(Die exakte `start`-Semantik je App ist `UNVERIFIED`; `:URL`/`:stop` sind aus den `app_man`-Strings belegt.)
|
||
|
||
---
|
||
|
||
## 6. Web-Browser (`hisense_browser`, `opera4x`)
|
||
|
||
`/3rd/opera4x/browser/run-Browser.sh` (ro):
|
||
|
||
```sh
|
||
. ./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
|
||
|
||
```sh
|
||
# 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). Dort `document`, `TVAPI`, `model`, `guijs`, `Hisense_*` prüfen.
|
||
- **Web-Browser DevTools 9224:** `http://192.168.188.94:9224/`; dort `HiBrowser`, `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.json` ergänzen; UI neu starten; App öffnen; Web-Browser/Recon.
|
||
- **UI-Dateien hochladen:** nach optionalem SFTP-Install
|
||
(`../root/scripts/host/install_sftp.sh`) mit `sftp root@192.168.188.94`
|
||
(`put -r`/`get`); sonst per SSH/`tar` oder `File.download`. Backup vorher.
|
||
|
||
---
|
||
|
||
## 9. Evidence
|
||
|
||
- Prozesse: `ps`, `/proc/<pid>/cmdline`, `/proc/<pid>/environ` (`hisenseUI` PID 589; `hisense_browser` PID 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/templates` vs. `launcher`/`VIDAAU2Launcher`); `VIDAAU2Launcher` auf diesem Modell aktiv? `UNVERIFIED`.
|
||
- Exakte `Hisense_*`-Signaturen/Semantik (UI-APIs) und `guijs`/`TVAPI`/`model`-Interna.
|
||
- `LauncherService`-Datenquelle/Update (Store/Foxxum/FCGI) und ob `preset.txt` bei jedem Start aus `Category*.xml` neu 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 die `TVAPI`/`model`-Globals brauchen oder ob `Hisense_*`/`guijs` direkt nutzbar sind (im UI-DevTools testen).
|
||
- Bloat-/Deaktivierungsfolgen (siehe `05`): `ms_service`, `swrc`, `runlog`, `Seriallog`, `HamService`, `securetime`, `netflix`, `browser_base`, `app_man`, `dtv_svc`.
|