Cái TV thông minh trong nhà bạn đang chạy một cái OS mà bạn không kiểm soát. Nó hiển thị quảng cáo trên màn hình chờ, gửi dữ liệu xem lên server của hãng, tự cài update bạn không yêu cầu. Bạn trả tiền mua TV, nhưng cái màn hình đó vẫn thuộc về nhà sản xuất. dumbtv là một bộ script giải quyết đúng phần đó, từ một máy tính khác, qua ADB.
Nó làm gì, cụ thể
dumbtv kết nối tới TV qua ADB từ máy tính của bạn rồi thực hiện một loạt thay đổi: disable khoảng 65 package (dịch vụ quảng cáo, ad-ID, sponsored rows, analytics thời gian xem, engine thử nghiệm A/B, app Alexa, screensaver quảng cáo, helper OTA), gỡ các app streaming do quảng cáo nuôi (JioHotstar, Zee5, JioCinema, SonyLIV, Discovery+, Aaj Tak, Twitch, FastScreen, MX Player), tắt theo dõi quảng cáo và báo cáo sử dụng, và cài một DNS filter chạy ngay trên TV để các endpoint telemetry của Amazon, Alexa và server OTA trả về 127.0.0.1.
Điểm quan trọng nhất nằm ở dòng cuối README: no root, nothing written to /system, every step reversible with one script. Nó không unlock bootloader, không thay hệ điều hành, không sống sót qua factory reset. Tác giả nói thẳng điều đó trong docs/WHY-NOT-REPLACE-OS.md, kèm lý do mọi TV hiện tại đều có signed boot chain và verified system partition. Đây là thái độ tôi thích: không hứa điều không làm được.
Có một thứ nó tự viết thêm: launcher/, một home screen 45 KB viết bằng Java thuần, không dùng library, không có quyền internet, nên nó không thể gọi về đâu được kể cả muốn. Trên Fire OS 7/8 nó không xin quyền nào. HOME nhảy vào launcher trong khoảng 0.2 giây, không chớp qua màn hình Amazon. Repo từng cài Projectivy nhưng bỏ, vì Projectivy là closed source và xin advertising ID, ad attribution, install referrer, internet cùng quyền install/delete package, quá nhiều so với một cái màn hình chờ.
Vì sao 611 sao sau một ngày
Repo tạo ngày 2026-10-18, cập nhật 2026-10-19, và đã có 611 sao. Con số đó nói lên nhu cầu: ai có Fire TV Stick hay một cái Android TV cũng từng thấy sponsored row trên home screen và không có cách tắt tử tế. Các hướng dẫn debloat Fire TV trên mạng thì rải rác, mỗi bài một danh sách package, không bài nào kèm script restore đầy đủ.
Điểm khác biệt so với đống script vặt trên GitHub: dumbtv lưu snapshot trước khi làm gì, nên restore.sh trả lại đúng giá trị mà TV của bạn từng có, không phải default chung. Nó cũng hỏi bạn muốn giữ gì trước khi xóa, thay vì áp một danh sách cứng. Và nó chấp nhận sự thật là phần lớn kiến thức về từng model TV không thể sinh ra từ code, nên có ./scripts/contribute.sh đọc model, OS build và kernel từ TV rồi hỏi những gì máy không biết (cách bật developer mode, IP hiện ở đâu, dialog nào chặn automation), ghi ra file YAML trong catalog/devices/ và in sẵn lệnh git / gh để mở pull request.
Cài và chạy thử
Trước tiên chạy preflight để chụp snapshot. Chỉ chạy một lần, lần sau không ghi đè được giá trị gốc:
./preflight.sh
Rồi cấu hình, script sẽ hỏi từng app một có muốn xóa không, hỏi bạn có xem Prime Video không (nếu có thì CDN video của Prime được bỏ khỏi blocklist để phát vẫn chạy), hỏi có thay launcher và cài DNS filter không. Câu trả lời ghi vào dumbtv.conf, file này git-ignored, sửa ý thì chạy lại:
./scripts/configure.sh
Muốn quay lại trạng thái ban đầu:
./scripts/restore.sh
Còn nếu chỉ muốn thử mỗi launcher, không đụng phần còn lại:
adb connect <ip>:5555
./launcher/install.sh
Lệnh này tải release APK, kiểm tra rồi cài. Không cần Java hay Android SDK trên máy bạn.
Ai nên dùng, và dùng trong trường hợp nào
Người có Fire TV Stick hoặc Fire TV Edition TV và thấy khó chịu vì home screen đầy quảng cáo. Người có Android TV / Google TV (Sony, TCL, Philips, Hisense, Xiaomi, Shield) muốn thay launcher mặc định mà không muốn cài app lạ xin đủ thứ quyền. Người muốn chặn telemetry ở mức DNS nhưng không muốn dựng pi-hole riêng, vì personalDNSfilter chạy ngay trên TV.
Với Samsung, LG, Roku, VIDAA, Vizio, Panasonic, Philips Saphi thì repo nói thẳng: no. Không có shell, không có đường vào. Lời khuyên trong README là chặn ở router hoặc cho TV boot thẳng vào cổng HDMI. Phần docs/OTHER-TVS.md liệt kê từng loại TV không mở được và lý do thật của từng cái.
Ưu và nhược
Ưu: reversible thật, có snapshot; không root nên không brick máy; chạy từ máy khác qua ADB nên không phải cài gì lên TV; launcher nhỏ, không quyền internet; tài liệu viết rõ ràng, kể cả phần nói “không làm được”.
Nhược: license không rõ, mà đây là điểm trừ thật sự nếu bạn định dùng trong môi trường doanh nghiệp hay fork lên sản phẩm. Repo mới một ngày tuổi, nên coi là code chạy được chứ chưa phải thứ đã qua chiến trận. Test end to end mới trên một chiếc Fire TV Edition chạy Fire OS 7.7.1.7 (Android 9); Fire OS 6 và 8 khác vài chỗ nhỏ, Android TV cần danh sách package khác cùng một mẹo launcher khác. Fire OS 6 dùng list riêng trong data/fireos6/ và giữ HOME bằng một foreground service nhỏ thay vì accessibility hook mà Amazon chặn ở 6.7.
Hai thứ không lấy lại được, README ghi rõ: app nằm trong /data khi bị uninstall thì APK mất, phải vào store tải lại, cái keep-list trong configure.sh sinh ra chính vì lý do này; và app nào bạn tự tay gỡ sau đó thì restore.sh cũng không cứu được vì nó chỉ trả lại các list trong data/.
Kết luận
611 sao trong khoảng một ngày là tín hiệu đủ rõ rằng rất nhiều người đang muốn cái TV của mình ngừng làm những việc họ không yêu cầu. Nếu bạn có Fire TV hoặc Android TV và biết ADB là gì, đáng bỏ một buổi tối chạy preflight rồi configure, ít nhất là để xem cái home screen 45 KB không có quyền internet trông thế nào. Mã nguồn ở humblemuzzu/dumbtv.
Câu hỏi thường gặp
dumbtv có cần root TV không?
Không. dumbtv chạy hoàn toàn qua ADB từ máy tính khác, không unlock bootloader và không ghi gì vào /system. Mọi bước đều reversible bằng một script, và nó không sống sót qua factory reset.
dumbtv có dùng được cho Samsung, LG hay Roku không?
Không. Repo nói thẳng là no với Samsung, LG, Roku, VIDAA, Vizio, Panasonic và Philips Saphi vì các loại này không có shell, không có đường vào. Lời khuyên trong README là chặn ở router hoặc cho TV boot thẳng vào cổng HDMI.
Làm sao quay lại trạng thái ban đầu sau khi chạy dumbtv?
Chạy ./scripts/restore.sh. Vì dumbtv lưu snapshot ở bước ./preflight.sh trước khi thay đổi, script trả lại đúng giá trị mà TV của bạn từng có chứ không phải default chung. Lưu ý là app nằm trong /data khi bị uninstall thì APK mất, phải vào store tải lại.
