-
-
Save khronokernel/122dc28114d3a3b1673fa0423b5a9b39 to your computer and use it in GitHub Desktop.
| """ | |
| electron_patcher.py: Enforce 'use-angle@1' in Chrome and Electron applications | |
| Version 1.0.0 (2024-08-11) | |
| """ | |
| import enum | |
| import json | |
| from pathlib import Path | |
| class ChromiumSettingsPatcher: | |
| class AngleVariant(enum.Enum): | |
| Default = "0" | |
| OpenGL = "1" | |
| Metal = "2" | |
| def __init__(self, state_file: str) -> None: | |
| self._local_state_file = Path(state_file).expanduser() | |
| def patch(self) -> None: | |
| """ | |
| Ensure 'use-angle@1' is set in Chrome's experimental settings | |
| """ | |
| _desired_key = "use-angle" | |
| _desired_value = self.AngleVariant.OpenGL.value | |
| if not self._local_state_file.exists(): | |
| print(" Local State missing, creating...") | |
| self._local_state_file.parent.mkdir(parents=True, exist_ok=True) | |
| state_data = {} | |
| else: | |
| print(" Parsing Local State file") | |
| state_data = json.loads(self._local_state_file.read_bytes()) | |
| if "browser" not in state_data: | |
| state_data["browser"] = {} | |
| if "enabled_labs_experiments" not in state_data["browser"]: | |
| state_data["browser"]["enabled_labs_experiments"] = [] | |
| for key in state_data["browser"]["enabled_labs_experiments"]: | |
| if "@" not in key: | |
| continue | |
| key_pair = key.split("@") | |
| if len(key_pair) < 2: | |
| continue | |
| if key_pair[0] != _desired_key: | |
| continue | |
| if key_pair[1] == _desired_value: | |
| print(f" {_desired_key}@{_desired_value} is already set") | |
| break | |
| index = state_data["browser"]["enabled_labs_experiments"].index(key) | |
| state_data["browser"]["enabled_labs_experiments"][index] = f"{_desired_key}@{_desired_value}" | |
| print(f" Updated {_desired_key}@{_desired_value}") | |
| if f"{_desired_key}@{_desired_value}" not in state_data["browser"]["enabled_labs_experiments"]: | |
| state_data["browser"]["enabled_labs_experiments"].append(f"{_desired_key}@{_desired_value}") | |
| print(f" Added {_desired_key}@{_desired_value}") | |
| print(" Writing to Local State file") | |
| self._local_state_file.write_text(json.dumps(state_data, indent=4)) | |
| def main(): | |
| # Patch all Electron applications | |
| for directory in Path("~/Library/Application Support").expanduser().iterdir(): | |
| if not directory.is_dir(): | |
| continue | |
| state_file = directory / "Local State" | |
| if not state_file.exists(): | |
| continue | |
| print(f"Patching {directory.name}") | |
| patcher = ChromiumSettingsPatcher(state_file) | |
| patcher.patch() | |
| # Patch all Chrome variants | |
| if Path("~/Library/Application Support/Google").expanduser().exists(): | |
| for directory in Path("~/Library/Application Support/Google").expanduser().iterdir(): | |
| if not directory.is_dir(): | |
| continue | |
| state_file = directory / "Local State" | |
| if not state_file.exists(): | |
| continue | |
| print(f"Patching {directory.name}") | |
| patcher = ChromiumSettingsPatcher(state_file) | |
| patcher.patch() | |
| if __name__ == "__main__": | |
| main() |
I have to run this and restart for Chrome and Chrome only every time I want to use it. It’s like Chrome overwrites the change on quitting.
macPro6,1 using Ventura with OCLP. Chrome v. 141.0.7390.55
for me this script isn't working any more. only way to start chrome for now is with the command:
open /Applications/Google\ Chrome.app --args --use-angle=gl
the flag use-angle seems to have been removed from chrome itself. I cannot change it anymore from the chrome://flags page. Guess I need a different way to force GL to start with chrome now
update:
i created a apple script like this to create a new app to launch chrome with above commandline.
then I used this trick to change the icon.
Haha, thanks. I was just about to post that I created an Automator applet for this (and also that your command line is for Discord). And here it is! Feel free to make this a gist if you'd like to.
Haha, thanks. I was just about to post that I created an Automator applet for this (and also that your command line is for Discord). And here it is! Feel free to make this a gist if you'd like to.
yeah, saw that already and fixed it :). Thanks for the share. I had to do the same with my visual studio code.


I installed Sequoia on my MacPro6,1 and it works very well. Using this patcher fixed Chrome and Opera for me and the only remaining app so far is Obsidian for which I have found the following fix. First launch Obsidian from using this command
open /Applications/Obsidian.app --args --use-angle=glThen once you are up and running go to Settings>Appearance>Hardware Acceleration and turn it off. You can now run obsidian as normal.