diff --git a/src/assets/blog/2025-03-11.md b/src/assets/blog/2025-03-11.md new file mode 100644 index 0000000..b2766d7 --- /dev/null +++ b/src/assets/blog/2025-03-11.md @@ -0,0 +1,317 @@ +--- +name: How to unenshittificate your Google TV +date: 25-03-11T19:00:00-05:00 +desc: Google sucks. I have a google tv. I dont want google on my tv. Go away. +--- + +In August 2024 I bought my first tv ever at Wallmart, a Pillips 7000 series 4K +Ultra HD LED Google TV. For only $280 I had a 4K tv that I could use to stream +content from my PS3, Wii, and my local media server. It's a bit sluggish running +a cheap 32-bit arm processor, but thats not my biggest problem with the tv. I +got sick of those damn ads. + +### Those damn ads + +Below is the promotional image for the tv I purchased from phillips. The biggest +thing on the screen is an Oppenheimer ad, taking up 50% of the screen real +estate. Below is "Top picks for you" which google puts in ads or +"recommendations" for movies/shows that promoters want me to watch. And finally +below that is a list of apps installed on the tv which contains a ton of preloaded +apps that you cannot remove from my tv. My tv came with Netflix, Prime Video, +Tubitv, and Univision none of which I use. But because I could not uninstall +these apps from my tv I was locked into them. + + + +Even being a tech savy person I didn't realize what I was getting into when I +bought my tv. I personaly use Linux, Ad Block in my Firefox browser, and +heavly manage what software is running on the devices I own. When faced with my +tv I wanted to do the same. I wanted to strip away the ads, the recommendations, +the preinstalled applications, and make the tv truly mine. In this guide I am +documenting the process on how to do just this. But first I must quickly talk +about dumb tv's. + +### Just use a dumb tv + +The easy and commenly recommended solution to my problem is to just + +> "Get a dumb tv! They dont have any preinstalled apps or ads, just your content." + +It is true that dumb tv's would solve my problem, but the problem is that you +cannot buy dumb tv's, or at least in retail. Back in the early 2000s all tv's were +dumb, I have a tv that is 720p with massive bezels that just shows content from +my console and computers. It works great as a dumb tv and does have the problems +stated earlier, but I want a tv that is at least 1440p (preferably 4K) and at +least 50 inches. I commenly have people over where I live and its a nice-to-have +to have a nice tv. The problem is that dumb tv's that fit this criteria are not +really sold to consumers any more, at least on the cheaper end. It is more +profitable for OEMs to put smart software in their devices to get monetary +kickbacks from either Google, Roku, or Amazon. There are still dumb tv's being +sold to business but you should expect to pay a pretty penny for one. Since +they are made for businesses, and the manufacturer doesnt get kickbacks, they +cost a lot more. Getting a dumb tv is not a solution for most people, especially +those who already bought an affordable smart tv from retail. + +### The Guide + +Ok so now that dumb tv's are out of the way, this is the plan on how you +"unenshittifiy" your Google/Android tv. + +The core of this guide centers around that Google TVs run android, a mobile +linux based distribution. All android devices support a USB debugging feature +called adb (Android Debug Bridge) that allows the user to access higher +privileged settings/operations then from the normal user interface. With adb +you can disable and partially uninstall preloaded applications, change the user +interface (called the launcher), and sideload custom applications that is not +provided in Androids "Google Play Store". + +In an itemized list this guide will: + +1. Replace the default launcher with [flauncher](https://github.com/CocoCR300/flauncher) + +Flauncher is a launcher (default user interface) for Google TVs. It is simple +and just shows the installed apps on the tv, no ads, nothing else. I am using a +fork of flauncher that includes some fixes and improvements, but you can also +just use the original [here](https://gitlab.com/flauncher/flauncher). + +2. Removing all preinstalled applications + +No more Netflix or Amazon Prime Video if you dont use them! + +3. Removing everything Google + +Google likes to inject their services into everything they use spying on you +in the process. In the process we will add apps that replace some of the +functionality lost when removing these apps. + +#### ⚠️ Warning ⚠️ + +Before you start or do anything listed in this guide or any other guide be warned +that you are completing these operations AT YOUR OWN RISK with FULL LIABALITY if +anything is to go wrong. It is unlikely that anything listed here should result +in bricking your tv but it is possible. I will also note that many google tv's can +still be easily factory reset to fix anything if the tv does break, but you should +still proceed with caution. + +#### 1. The user interface + +The image posted in the opening to this blog post shows the default user interface +for Google TV and as described it sucks. In Android everything is an app including +the default user interface that your tv loads into, and on Android these are +called launchers. On most Android phones you can select your launcher of choice +but google tv does not let you do that directly. To change the user interface +you MUST install an app that supports being a luncher and then disable the +Google TV launcher AFTER installing the custom launcher. If you do this in the +wrong order you will likely brick your tv. + +First download your launcher of choise. As stated earlier I am using Flauncher +for this, but there are other launchers avaliable if you wish to look around. + +Once you have downloaded your launcher (it should be an APK) we then need to +install it to your tv. To do this we need to connect adb to your tv. To enable +debugging on your tv, fist open settings and find the entry listing your tv's +build number (usually under System > About). Click this option multiple times +and the tv should state that "You are now a developer". Go back into just System +settings and enter "Developer Options". Find USB debugging and enable it. Then +connect a USB cable to your tv and a computer that you installed +[android tools](https://developer.android.com/tools/releases/platform-tools) +onto. Run... +```bash +$ adb devices +``` +... and a prompt to verify your device should show up on your tv. Approve this +message and you now have adb connected to your tv. + +Finally run... +``` +$ adb install <path to apk locally> +``` +... to install the custom launcher onto your tv. + +To verify that this works open the launcher app from your default google tv +interface. If it works great! If it doesnt show up as a google tv app or doesnt +work I would reccommend using a different launcher. + + + +Above is my tv running FLauncher! Horray! + +Now you will notice that when your press the home button on your Google TV +remote, select the home option in the input menu, or restart your tv that it +will boot into the default user interface. You have two options to fix this + +##### Option 1: Remap the home button + +Using [Button Mapper](https://play.google.com/store/apps/details?id=flar2.homebutton&hl=en_US) +which is avaliable in the play/[auora](https://auroraoss.com/) store, you can +remap your home button to open your custom launcher application instead of +acutally going home (which is the Google TV default interface). The downside +to this is that the tv will always boot into the Google TV default interface +and menus like the input switcher will do the same. If you always want your +custom launcher see option 2. + +##### Option 2: Disabling the default launcher + +On my Google TV the launcher application was called `com.google.android.apps.tv.launcherx`. +Using adb you can disable the launcher application (along with another app) +to stop google tv from using the default interface. +```bash +# Disable com.google.android.apps.tv.launcherx which is the default launcher on CCwGtv +$ adb shell pm disable-user --user 0 com.google.android.apps.tv.launcherx +# com.google.android.tungsten.setupwraith will then be used as a 'fallback' and will automatically +# re-enable the default launcher, so disable it as well +$ adb shell pm disable-user --user 0 com.google.android.tungsten.setupwraith +``` + +With the default launcher disabled google tv SHOULD fallback to your custom +launcher application at all times. If it does not do this the tv will result +in a soft brick. Be warned. + +#### 1.5. Fixing the input switcher (with LiveTV from mediatek) + +If you are using a physical google tv and not just a streamer such as a +chromecast, disabling the custom launcher will break your input switcher if your +custom launcher does not support switching inputs on its own (flauncher does not). +If this is the case you need to find a different input switcher application. + +My google tv uses mediatek for alot of its software, and I think alot of Google +TVs do the same. If you have the same luck that I did you MAY have an +application hiddden in your tv called `com.mediatek.wwtv.tvcenter`. This +application will bring back a different input switcher that I like alot better then +the default included one. There are two things you can try to get this working +if your tv uses mediatek. + +##### Option 1: Install from file + +I recommend trying option 2 first. If it doesnt work due to missing application +then try this option. + +Try to find an file called 'LiveTV.apk' on your tv. Within adb shell run +```bash +adb shell find / -name "LiveTV.apk" 2>/dev/null +``` +With luck you should find an apk on your tv with this name and the package name +of `com.mediatek.wwtv.tvcenter`. If you do run +```bash +adb shell pm install --user 0 <path to apk on tv> +``` + +If your tv does not have an apk you can try using the one from my tv hosted +[here](/public/blog/LiveTV.apk). + +##### Option 2: Install from package manager + +Run the following commands +```bash +adb shell pm install-existing --user 0 com.mediatek.wwtv.tvcenter +adb shell pm enable --user 0 com.mediatek.wwtv.tvcenter +``` + +If the commands fail stating that the apk is not found try option one if you +havent done it. If the commands fail stating that an app is already installed +try checking the tv if the input switcher works or the "LiveTV" app is installed. +If not then your SOL (from what I know). + +#### 2. Removing preloaded applications + +Now that we have a working custom launcher, the next step is to remove the preloaded +applications on the tv. On my tv the following applications were preloaded and +can be removed with: +```bash +# Netflix +$ adb shell pm uninstall --user 0 com.netflix.ninja +# Prime Video (Amazon) +$ adb shell pm uninstall --user 0 com.amazon.amazonvideo.livingroom +# Tubitv +$ adb shell pm uninstall --user 0 com.tubitv +# VIX (Univision) +$ adb shell pm uninstall --user 0 com.univision.prendetv +# Youtube +$ adb shell pm uninstall --user 0 com.google.android.youtube.tv +# LiveTV X (anoki ai tv bullshit or something) +$ adb shell pm uninstall --user 0 com.cltv.cltv +``` + +If you have other apps you can just replace the command above with the package +name of the app you want to remove. If using flauncher you can view the package +name by long pressing over the app icon. + +If you still want youtube I recommend [SmartTube](https://github.com/yuliskov/SmartTube) +as an alternative. + +#### 3. Removing everything google + +The main google apps on my tv that I dont want are the google play store, google +play services, gboard (google keyboard), and the google app. + +If you are to disable gboard (google keyboard) you MUST install a different +keyboard first and enable it. I recommend [LeanKeyboard](https://github.com/yuliskov/LeanKeyboard). + +You can disable these applications with the following +```bash +# Google Play Store +adb shell pm disable --user 0 com.google.android.play +# Google Play Services +adb shell pm disable --user 0 com.google.android.gms +# Google App +adb shell pm disable --user 0 com.google.android.katniss +# Gboard +adb shell pm disable --user 0 com.google.android.inputmethod.latin +``` + +Horray! You may now notice that you can no longer install applications from +your google tv. The solution is installing an f-droid client and alternative +play store client. I recommend [Droid-ify](https://github.com/Droid-ify/client) +and [Auora Store](https://auroraoss.com/) respectively. Droid-ify will allow +you to install apps from F-droid which is a free and open souce (FOSS) repository +of android apps. Auora Store will allow you to install applications from the +google play store without having to log in. These apps are not really made for +Goolge TV and this suck navigating with a remote, so I recommend connecting a +mouse or using the android tv bluetooth remote app on your phone. + +#### 4. Fixing issues on reboot + +Finally you may notice that your google may reset some changes every time +your tv reboots. On my tv google will re-enable google play services (GMS) and +the google app. My tv will also disable the "LiveTV" app that allows me to switch +inputs. Below is the script I use everytime I fully restart my tv. You dont +have to run this if the tv goes to sleep, and you should modify this script +to reflect your situation. +```bash +#!/bin/sh + +# script to run everytime tv is restarted +# unfucks the tv and does good things + +# > connect to tv +# if you are using debugging over a usb cable this is not needed. I connect adb +# over tcp so I need to specify where adb needs to connect. If you are also +# using tcp make sure to change the ip to the ip of your tv. +adb connect 10.254.0.182 + +# > fuck google (tv enables them on boot) +adb shell pm disable --user 0 com.google.android.gms +adb shell pm disable --user 0 com.google.android.katniss +adb shell am force-stop com.google.android.gms +adb shell am force-stop com.google.android.katniss + +# > fix livetv (gets borked on boot, allows changing of inputs) +# this app gets into a weird state on reboot so it needs to be uninstalled +# so that it can be reinstalled/enabled. Make sure to add -k to keep user +# settings and data when uninstalling. +adb shell pm uninstall -k --user 0 com.mediatek.wwtv.tvcenter +adb shell pm install-existing --user 0 com.mediatek.wwtv.tvcenter +``` + +### Were Done! + +Unless I missed anything you should now have a fully debloated, more functional, +less ad ridden Google TV. Horray! If you ever run into any issues I always +recommend checking out the [XDA Fourms](https://xdaforums.com/) or searching your +problem in a search engine. I hope this worked out for you and you now have a +tv that is truly yours. + + + +Now if you excuse me I am going to go play some beatmania on my debloated +Google TV. :) diff --git a/src/public/blog/beatmania.jpg b/src/public/blog/beatmania.jpg new file mode 100644 index 0000000..7df957e Binary files /dev/null and b/src/public/blog/beatmania.jpg differ diff --git a/src/public/blog/flauncher.jpg b/src/public/blog/flauncher.jpg new file mode 100644 index 0000000..0f01601 Binary files /dev/null and b/src/public/blog/flauncher.jpg differ diff --git a/src/public/blog/googletv.jpg b/src/public/blog/googletv.jpg new file mode 100644 index 0000000..392c5b0 Binary files /dev/null and b/src/public/blog/googletv.jpg differ diff --git a/src/public/blog/site1.jpg b/src/public/blog/site1.jpg index ac24f9b..2775afd 100644 Binary files a/src/public/blog/site1.jpg and b/src/public/blog/site1.jpg differ diff --git a/src/public/blog/site2.jpg b/src/public/blog/site2.jpg index d3244ac..6c8c3a8 100644 Binary files a/src/public/blog/site2.jpg and b/src/public/blog/site2.jpg differ diff --git a/src/public/blog/site3.jpg b/src/public/blog/site3.jpg index b8ce964..080eb1b 100644 Binary files a/src/public/blog/site3.jpg and b/src/public/blog/site3.jpg differ diff --git a/src/public/blog/site4.jpg b/src/public/blog/site4.jpg index e12da23..b5ab4b4 100644 Binary files a/src/public/blog/site4.jpg and b/src/public/blog/site4.jpg differ diff --git a/src/public/blog/site5.jpg b/src/public/blog/site5.jpg index c9e93bd..b2bc2b7 100644 Binary files a/src/public/blog/site5.jpg and b/src/public/blog/site5.jpg differ diff --git a/src/public/icons/logo16.png b/src/public/icons/logo16.png index da0bdd7..5dfac05 100644 Binary files a/src/public/icons/logo16.png and b/src/public/icons/logo16.png differ diff --git a/src/public/icons/logo32.png b/src/public/icons/logo32.png index fff2ab3..1a3f58e 100644 Binary files a/src/public/icons/logo32.png and b/src/public/icons/logo32.png differ diff --git a/src/public/icons/logo320.png b/src/public/icons/logo320.png index e84b176..a061aaf 100644 Binary files a/src/public/icons/logo320.png and b/src/public/icons/logo320.png differ diff --git a/src/public/icons/logo512.png b/src/public/icons/logo512.png index 615fc4a..8eb21fd 100644 Binary files a/src/public/icons/logo512.png and b/src/public/icons/logo512.png differ diff --git a/src/public/icons/logo64.png b/src/public/icons/logo64.png index deb8b1e..229419f 100644 Binary files a/src/public/icons/logo64.png and b/src/public/icons/logo64.png differ diff --git a/src/public/icons/logo640.png b/src/public/icons/logo640.png index edd4493..6b22d5d 100644 Binary files a/src/public/icons/logo640.png and b/src/public/icons/logo640.png differ diff --git a/src/public/img/background.jpg b/src/public/img/background.jpg index 7b61bc5..79a8a12 100644 Binary files a/src/public/img/background.jpg and b/src/public/img/background.jpg differ diff --git a/src/public/img/background.png b/src/public/img/background.png index d834400..ea5fc7e 100644 Binary files a/src/public/img/background.png and b/src/public/img/background.png differ diff --git a/src/public/img/bee.png b/src/public/img/bee.png index 917a5ef..3fc0fe3 100644 Binary files a/src/public/img/bee.png and b/src/public/img/bee.png differ diff --git a/src/public/img/bee.webp b/src/public/img/bee.webp index 7af6759..61742fd 100644 Binary files a/src/public/img/bee.webp and b/src/public/img/bee.webp differ diff --git a/src/public/img/headerLogo.png b/src/public/img/headerLogo.png index 758ea9f..c829aa2 100644 Binary files a/src/public/img/headerLogo.png and b/src/public/img/headerLogo.png differ diff --git a/src/public/img/headerLogo.webp b/src/public/img/headerLogo.webp index 4a9a961..5596d1d 100644 Binary files a/src/public/img/headerLogo.webp and b/src/public/img/headerLogo.webp differ