Instruction file imported from GHLFernandes/webOSvibecode (
.cursor/rules/lgtv-seguranca.mdc). Copyright stays with the author.
Regras do projeto: TV LG 43LJ5550
Contexto
- TV: LG 43LJ5550, webOS 3.5 (2017), hardware de entrada (SoC fraco, pouca RAM).
- Root via DejaVuln + Homebrew Channel (HBC).
- Acesso:
ssh lgtv(root@192.168.68.111, chave~/.ssh/lgtv). Desenvolvimento a partir do WSL2. - Ferramentas no PC:
ares-cli(devicelgtv). - Atualizações de firmware estão bloqueadas pelo HBC e devem continuar assim.
Objetivo (escopo fechado)
Só isto, nada além:
- Remover anúncios do sistema (home, banners, recomendações patrocinadas).
- Cortar telemetria: o sistema não deve enviar metadados, dados de uso, ACR/Live Plus nem logs para a LG ou para terceiros.
- Home mais limpa.
- Sistema mais rápido (menos coisa rodando, menos coisa carregando).
Apps a manter (uso real)
Manter apenas:
- YouTube (preferência: youtube-webos via HBC, mesmo id
youtube.leanback.v4, após desinstalar o app oficial). - Stremio: não como app na TV (664 MB RAM / webOS 3.5 —
tv.strem.ioreinicia o app). Usar Stremio no PC/celular + DLNA para a TV; verdocs/STREMIO-NA-TV.md. - Disney+ (
com.disney.alch.prod.lrd.app) — opcional; confirmar se ainda usa.
Apps de usuário instalados em /media/cryptofs/apps/... que não estão na lista acima (Netflix, Globoplay, Prime, Spotify, Twitch, etc.) podem ser removidos, sempre com confirmação explícita antes de cada remoção.
Fora desse escopo, pergunte antes: features novas, apps extras, ambilight, mudanças de imagem/som etc.
Nota sobre telemetria: o escopo é o que o sistema envia. Apps de streaming que o usuário abre (YouTube, Stremio, Disney+…) se comunicam com os próprios servidores por natureza; não quebre esses apps sem perguntar.
PROIBIDO (nunca, em hipótese nenhuma)
Estas ações podem brickar a TV. Não execute, não sugira como atalho e não gere scripts que as façam:
- Escrever em partições de sistema: kernel, rootfs, tvservice, ou qualquer
/dev/mmcblk*,/dev/mtd*,/dev/block/*. - Usar
dd,mkfs,fdisk,parted,flash_erase,nandwriteou qualquer ferramenta de flash. mount -o remount,rwem/ou em qualquer partição de sistema.- Instalar, baixar ou aplicar firmware (
.epk), ou reativar atualizações do sistema. - Alterar NVM/configurações de fábrica (serviços de factory, menus de serviço,
systempropertyde fábrica). - Editar, apagar ou substituir os scripts do Homebrew Channel ou do RootMyTV/DejaVuln.
- Matar ou desativar processos centrais:
tvservice,surface-manager,sam,ls-hubd/luna-hub,systemd/upstart,appinstalld,dropbear/SSH, rede (connman/wpa_supplicant). rm -rffora das áreas permitidas abaixo, ourmcom caminho vindo de variável sem validação.- Desativar SSH, mudar a rede ou qualquer coisa que corte nosso acesso à TV.
- Desinstalar apps de sistema (os de
/usr/palm/applications).
Se uma solução só for possível violando uma regra acima, pare e explique ao usuário. Não procure um contorno.
Onde pode escrever
Escrita só nestes lugares:
/home/root/(scripts, configs, hosts customizado, backups)./media/developer/(apps instalados via ares/HBC, como o launcher próprio)./var/lib/webosbrew/init.d/(scripts de boot do usuário; criar arquivos novos, nunca alterar os do HBC).
Todo o resto é somente leitura.
/etc/hosts e bloqueio DNS
O /etc/hosts é regenerado no boot pelo Homebrew Channel (/var/lib/webosbrew/startup.sh): copia para /tmp/hosts, faz mount --bind e acrescenta bloqueios de update (snu.lge.com, su.lge.com, …) se webosbrew_block_updates estiver ativo.
- Não fazer bind mount por cima do
/etc/hosts(conflita com o HBC). - Blocklist extra (anúncios/telemetria LG): script numerado em
/var/lib/webosbrew/init.d/que roda depois do trecho de hosts do HBC (viarun-parts) e acrescenta linhas ao mesmo/etc/hostsbindado, preservando os bloqueios de update. - Manter listas versionadas em
hosts/blocklist.txtehosts/allowlist.txtno repositório.
Allowlist (apps em uso)
Allowlist comentada só com domínios necessários para YouTube, Stremio e Disney+ funcionarem (CDN, APIs, DRM onde aplicável).
- A LG Content Store pode ser candidata a bloqueio se nenhum desses apps depender dela para abrir/atualizar — confirmar com o usuário antes de bloquear domínios da loja (HBC/repo webosbrew costuma ser canal alternativo de instalação).
Fluxo obrigatório
- Investigar antes de mudar. Primeiro só comandos de leitura (
cat,ls,ps,netstat,luna-sendde consulta,getSystemSettings). Entender, depois propor. - Classificar cada comando antes de rodar na TV:
[LEITURA]: pode executar.[ESCRITA]em área permitida: mostre o que vai escrever e onde, depois execute.[CONFIG](luna-send que altera configuração),[BOOT](qualquer coisa eminit.d),[REBOOT], ou parar/desativar qualquer serviço: peça confirmação explícita do usuário antes.
- Uma mudança por vez. Aplicar, testar, confirmar que a TV está estável, só então a próxima.
- Tudo reversível. Cada mudança vem com um script de desfazer em
scripts/undo/no repositório. Sem undo, não aplica. - Backup antes de alterar. Antes de mudar uma configuração, salve o valor atual (ex.: saída do
getSystemSettings) em/home/root/backup/e embackups/no repositório. - Registrar. Cada mudança aplicada na TV entra no
CHANGELOG.mddo repositório: data, o que mudou, como desfazer.
Scripts de boot (init.d)
Um script de boot ruim pode deixar a TV em loop de boot. Por isso:
- Teste o script manualmente via SSH antes de colocá-lo em
init.d. - Sempre
#!/bin/shcompatível com busybox (sem bashismos). - Nunca bloquear: sem loops infinitos, sem
sleeplongo em primeiro plano, sem esperar rede indefinidamente. Trabalho demorado vai para background com timeout. - Sempre terminar com
exit 0; falha de um comando não pode derrubar o boot (|| true). - Checar se o arquivo/serviço existe antes de agir sobre ele.
- Um script por responsabilidade, com nome numerado (ex.:
10-hosts-block,20-disable-ads).
Como atacar cada objetivo (ordem de preferência)
Anúncios e telemetria
- Configurações oficiais via
luna-send(o mesmo que o menu faz): recusar contratos de usuário, desligar Live Plus/ACR, promoções na home, recomendações. É o método mais seguro e reversível. - Bloqueio por hosts (via
init.dapós o HBC, ver seção acima): domínios de anúncio/telemetria LG a partir do que a TV realmente acessa (netstat/logs) e listas da comunidade (HaGeZi native LG webOS, webosbrew). Não invente domínios.- Allowlist mínima: YouTube, Stremio, Disney+ (ver
hosts/allowlist.txt). - Bloqueio da Content Store: só após confirmação (ver allowlist).
- Allowlist mínima: YouTube, Stremio, Disney+ (ver
- Desativar serviço de sistema só se 1 e 2 não resolverem, um de cada vez, com confirmação e undo, e nunca um serviço da lista proibida.
Home limpa
- Primeiro, o que dá via configuração (desligar banners/promoções, remover apps não usados que não sejam de sistema).
- Launcher próprio: app web instalado em
/media/developerviaares-install. Não substituir o launcher do sistema mexendo no rootfs. Abrir o launcher via remapeamento de botão ou como app normal.
Desempenho
- Reduzir o que carrega: menos apps instalados, home sem conteúdo remoto, bloqueio de domínios (menos requisições).
- Medir antes e depois (
free,top -n 1, tempo de abertura). Não declarar ganho sem medida. - Não mexer em governor de CPU, frequências, swap ou parâmetros de kernel sem perguntar.
Desenvolvimento de apps para esta TV
- Motor web é um Chromium antigo: gerar ES5 (ou transpilar com target antigo). Não assumir
fetch,Promise,async/await, CSS Grid ou flex gap nativos sem polyfill/teste. - Nada de frameworks pesados. Vanilla JS ou algo mínimo (ex.: Preact).
- Navegação 100% por controle remoto (setas, OK, voltar), com foco visível.
- Leve: poucos assets, sem animações caras, sem polling agressivo.
- O app em si também não pode ter telemetria, analytics nem chamadas a serviços externos.
Repositório
- Nunca commitar chaves privadas, tokens ou senhas.
- Estrutura sugerida:
scripts/apply/: aplicar mudanças.scripts/undo/: desfazer cada mudança.init.d/: scripts de boot (cópia versionada do que está na TV).hosts/:blocklist.txteallowlist.txtcomentados.apps/launcher/: launcher próprio.backups/: estado anterior das configurações.CHANGELOG.md: tudo que foi aplicado na TV.
Em caso de problema
- TV instável depois de uma mudança: pare, rode o undo correspondente e avise o usuário. Não empilhe correções às cegas.
- Perdeu acesso SSH: não tente nada criativo; informe o usuário. O Homebrew Channel tem configurações e opção de reboot na própria TV, e o reset de fábrica remove a configuração de root.
- Na dúvida se algo é seguro: trate como inseguro e pergunte.
