#!/usr/bin/env bash # Configure Thorium/Chromium to auto-allow unityhub:// deep links from Unity login origins. # This avoids missed external-protocol prompts and helps Unity Hub receive the token after web login. # # Features: # - Install a system policy file (requires sudo) with AutoLaunchProtocolsFromOrigins for unityhub # - Optionally set Thorium as default browser # - Optionally restart Thorium # - Non-destructive: does not edit your Thorium profile Preferences # # Usage: # bash Bash/fix_thorium_unity.sh --policy # Install policy (sudo) # bash Bash/fix_thorium_unity.sh --set-default # Set default browser to Thorium # bash Bash/fix_thorium_unity.sh --restart # Restart Thorium # bash Bash/fix_thorium_unity.sh --policy --restart # Install policy and restart browser set -euo pipefail IFS=$'\n\t' # Source common library for log functions SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" # shellcheck source=../../lib/common.sh source "$SCRIPT_DIR/../../lib/common.sh" DO_POLICY=false SET_DEFAULT=false DO_RESTART=false usage() { cat </dev/null 2>&1; then log_error "sudo not found; cannot install system policy. Use --set-default or run from root." exit 1 fi } install_policy() { ensure_sudo # Candidate policy directories (most common for Chromium forks) local candidates=( "/etc/thorium-browser/policies/managed" # Thorium "/etc/chromium/policies/managed" # Chromium "/etc/opt/chrome/policies/managed" # Google Chrome ) local wrote_any=false for target in "${candidates[@]}"; do log_info "Installing policy into: $target" sudo mkdir -p "$target" local policy_file="$target/unityhub-policy.json" sudo tee "$policy_file" >/dev/null <<'JSON' { "AutoLaunchProtocolsFromOrigins": [ { "protocol": "unityhub", "origin": "https://id.unity.com", "allow": true }, { "protocol": "unityhub", "origin": "https://login.unity.com", "allow": true }, { "protocol": "unityhub", "origin": "https://unity.com", "allow": true }, { "protocol": "unity", "origin": "https://id.unity.com", "allow": true }, { "protocol": "unity", "origin": "https://login.unity.com", "allow": true }, { "protocol": "unity", "origin": "https://unity.com", "allow": true } ] } JSON # Some Chromium builds cache policies; no explicit reload on Linux. Restarting browser suffices. log_ok "Policy written: $policy_file" wrote_any=true done if [[ $wrote_any != true ]]; then log_warn "Policy may not have been written. No candidate directories processed." fi } set_default_browser() { if command -v xdg-settings >/dev/null 2>&1; then # Prefer the upstream desktop id if it exists local desktop="thorium-browser.desktop" if [[ ! -f "/usr/share/applications/$desktop" && -f "$HOME/.local/share/applications/$desktop" ]]; then : # keep desktop as is elif [[ ! -f "/usr/share/applications/$desktop" && ! -f "$HOME/.local/share/applications/$desktop" ]]; then log_warn "thorium-browser.desktop not found; leaving default browser unchanged." return fi log_info "Setting default browser to $desktop" xdg-settings set default-web-browser "$desktop" || log_warn "Failed to set default browser via xdg-settings" log_ok "Default browser set to: $(xdg-settings get default-web-browser 2>/dev/null || echo "$desktop")" else log_warn "xdg-settings not found; cannot set default browser automatically." fi } restart_thorium() { # Kill Thorium processes and start fresh log_info "Restarting Thorium..." pkill -9 -f 'thorium-browser' 2>/dev/null || true # Also kill unityhub-bin's embedded Chromium if any leftover (harmless) pkill -9 -f 'unityhub-bin' 2>/dev/null || true # Start Thorium detached if available if command -v thorium-browser >/dev/null 2>&1; then nohup thorium-browser >/dev/null 2>&1 & disown || true fi log_ok "Thorium restart attempted." } main() { $DO_POLICY && install_policy $SET_DEFAULT && set_default_browser $DO_RESTART && restart_thorium cat <<'NEXT' --- Next steps: - Open Unity Hub, click Sign in, complete in Thorium; when prompted, allow the unityhub link to open the app. - If Thorium still does not prompt, the installed policy will auto-allow from Unity origins on next restart. - You can also trigger a test link: xdg-open 'unityhub://v1/editor-signin' --- NEXT } main "$@"