How to uninstall Timus Connect clearly from the device

You can run these scripts to uninstall Timus Connect entirely from the device.

This both script must be run under sudo or admin privilege.

 

  • [MacOS] Uninstall Script

    When you download the script, before you run it, do not forget to make the file executable by running this command:

    chmod +x uninstall_timus.sh
    
    sudo ./uninstall_timus.sh
    #!/bin/bash
    # Uninstallation Script for Timus Connect (macOS)
    # -----------------------------------------------
    # Completely removes the Timus Connect app and all related files from the system.
    #
    # Run with administrator privileges (sudo), since it stops system daemons and
    # deletes files under /Library. Progress and per-step results are written to
    # the log file defined below; nothing is printed to the terminal except the
    # final summary line.
    #
    # Steps performed:
    #   1. Unload the Timus Connect launch daemons.
    #   2. Kill the background/helper services and the telemetry agent.
    #   3. Kill the VPN tunnel processes (WireGuard, stealth WireGuard, OpenVPN).
    #   4. Remove the application bundle from /Applications.
    #   5. Remove application logs.
    #   6. Remove per-user and system-level application support files.
    #   7. Remove the launch daemon plist files.
    #   8. Reset the app's TCC permissions (Accessibility, Screen Capture, Apple Events).
    #   9. Remove the app from macOS login items.
    log_file="/tmp/timus_uninstall.log"
    timestamp() {
       date +"%Y-%m-%d %H:%M:%S"
    }
    echo "$(timestamp): Starting Timus Connect uninstallation script..." > "$log_file"
    set +e  # Keep going even if a step fails, so a partial system still gets cleaned up.
    # Kill every process whose command line matches the given name (best effort).
    # First a graceful pkill, then a forced kill -9 for anything that survives.
    kill_process() {
       process_name=$1
       echo "$(timestamp): Killing process $process_name..." >> "$log_file"
       sudo pkill -f "$process_name" >> "$log_file" 2>&1
       sudo pgrep -f "$process_name" | xargs sudo kill -9 >> "$log_file" 2>&1
       if [ $? -eq 0 ]; then
           echo "$(timestamp): Successfully killed $process_name." >> "$log_file"
       else
           echo "$(timestamp): Failed to kill $process_name or no process found." >> "$log_file"
       fi
    }
    # Unload any running daemons associated with Timus Connect
    echo "$(timestamp): Unloading any running daemons associated with Timus Connect..." >> "$log_file"
    launchctl unload /Library/LaunchDaemons/timus* >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully unloaded daemons." >> "$log_file"
    else
       echo "$(timestamp): Failed to unload daemons." >> "$log_file"
    fi
    # Kill the background service, helper service, and telemetry agent.
    # The binaries carry an "_arm64" suffix on Apple Silicon and no suffix on Intel,
    # so pick the matching names based on the current architecture.
    architecture=$(uname -m)
    if [ "$architecture" = "arm64" ]; then
       kill_process "timus-connect-service_arm64"
       kill_process "timus-helper-service_arm64"
       kill_process "timus-telemetry_arm64"
    else
       kill_process "timus-connect-service"
       kill_process "timus-helper-service"
       kill_process "timus-telemetry"
    fi
    # Kill the Electron app process itself.
    kill_process "Timus Connect"
    # Kill the VPN tunnel processes and telemetry agent.
    # These are bundled binaries that run as root and are NOT named "timus", so the
    # catch-all "pkill -f timus*" below never matches them. They also live inside
    # the app bundle, so they must be stopped before the bundle is deleted.
    kill_process "stealth-wireguard-go"
    kill_process "wireguard-go"
    kill_process "openvpn"
    kill_process "timus-telemetry"
    # Catch-all pass for any Timus Connect process still running.
    echo "$(timestamp): Killing any running processes related to Timus Connect..." >> "$log_file"
    pkill -f timus* >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully killed Timus Connect processes." >> "$log_file"
    else
       echo "$(timestamp): Failed to kill Timus Connect processes or no processes found." >> "$log_file"
    fi
    # Remove the Timus Connect application
    echo "$(timestamp): Removing the Timus Connect application..." >> "$log_file"
    rm -rf "/Applications/Timus Connect.app" >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully removed Timus Connect application." >> "$log_file"
    else
       echo "$(timestamp): Failed to remove Timus Connect application." >> "$log_file"
    fi
    # Remove Timus Connect logs
    echo "$(timestamp): Removing Timus Connect logs..." >> "$log_file"
    rm -rf ~/Library/Logs/"Timus Connect" >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully removed Timus Connect logs." >> "$log_file"
    else
       echo "$(timestamp): Failed to remove Timus Connect logs." >> "$log_file"
    fi
    # Remove per-user application support files (local database, config, tokens, etc.)
    echo "$(timestamp): Removing Timus Connect application support files..." >> "$log_file"
    rm -rf "$HOME/Library/Application Support/Timus Connect" >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully removed Timus Connect application support files." >> "$log_file"
    else
       echo "$(timestamp): Failed to remove Timus Connect application support files." >> "$log_file"
    fi
    # Remove the system-level application support directory.
    # This is separate from the per-user copy removed above and holds the service
    # token used by the privileged background service.
    echo "$(timestamp): Removing system-level Timus Connect application support files..." >> "$log_file"
    sudo rm -rf "/Library/Application Support/Timus Connect" >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully removed system-level application support files." >> "$log_file"
    else
       echo "$(timestamp): Failed to remove system-level application support files." >> "$log_file"
    fi
    # Remove daemon plist files associated with Timus Connect
    echo "$(timestamp): Removing daemon plist files associated with Timus Connect..." >> "$log_file"
    rm /Library/LaunchDaemons/timus-* >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully removed daemon plist files." >> "$log_file"
    else
       echo "$(timestamp): Failed to remove daemon plist files." >> "$log_file"
    fi
    # Revoke the app's privacy (TCC) permissions so no stale grants remain after
    # uninstall. Each reset clears the entry for bundle id com.timus.connect.
    # Reset Accessibility permissions for Timus Connect
    echo "$(timestamp): Resetting Accessibility permissions for Timus Connect..." >> "$log_file"
    sudo tccutil reset Accessibility com.timus.connect >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully reset Accessibility permissions." >> "$log_file"
    else
       echo "$(timestamp): Failed to reset Accessibility permissions." >> "$log_file"
    fi
    # Reset Screen Capture permissions for Timus Connect
    echo "$(timestamp): Resetting Screen Capture permissions for Timus Connect..." >> "$log_file"
    sudo tccutil reset ScreenCapture com.timus.connect >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully reset Screen Capture permissions." >> "$log_file"
    else
       echo "$(timestamp): Failed to reset Screen Capture permissions." >> "$log_file"
    fi
    # Reset AppleEvents (automation) permissions for Timus Connect
    echo "$(timestamp): Resetting AppleEvents permissions for Timus Connect..." >> "$log_file"
    sudo tccutil reset AppleEvents com.timus.connect >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully reset AppleEvents permissions." >> "$log_file"
    else
       echo "$(timestamp): Failed to reset AppleEvents permissions." >> "$log_file"
    fi
    # Remove the app from the user's login items so it no longer launches at startup.
    echo "$(timestamp): Removing Timus Connect app from login items on macOS..." >> "$log_file"
    osascript -e 'tell application "System Events" to delete login item "Timus Connect"' >> "$log_file" 2>&1
    if [ $? -eq 0 ]; then
       echo "$(timestamp): Successfully removed Timus Connect from login items." >> "$log_file"
    else
       echo "$(timestamp): Failed to remove Timus Connect from login items or it was not found." >> "$log_file"
    fi
    # Done. Print a summary; see the log file for the result of each individual step.
    echo "$(timestamp): Timus Connect uninstallation finished." >> "$log_file"
    echo "Timus Connect has been uninstalled. See $log_file for details."% 

Important Note: If Timus Connect remains in the Dock. This is expected behavior. After a reboot, or when the Dock gets refreshed, it should disappear automatically.

  • [Windows] Uninstall Script

    # Uninstallation Script for Timus Connect
    # ---------------------------------------
    # This script performs the following actions:
    # 1. Stops and deletes services related to Timus Connect.
    # 2. Kills all processes named "timus" and other specified processes.
    # 3. Runs the uninstaller for Timus Connect silently.
    # 4. Deletes specific directories associated with Timus Connect.
    # 5. Removes Timus Connect from startup items.
    # 6. Removes specific registry keys related to Timus Connect.
    # 
    # NOTE: Please review this script thoroughly before running it. Ensure that the paths
    # and services mentioned are correct for your specific setup.
    
    # Define log function
    function Log-Message {
        param (
            [string]$message
        )
        $logFile = "$env:USERPROFILE\\timus_uninstall.txt"
        Add-Content -Path $logFile -Value ("$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $message")
    }
    
    # Function to stop and delete a service
    function Stop-And-Delete-Service {
        param (
            [string]$serviceName
        )
        try {
            $service = Get-Service -Name $serviceName -ErrorAction Stop
            if ($service.Status -ne 'Stopped') {
                Stop-Service -Name $serviceName -Force -ErrorAction Stop
                Log-Message "Stopped service $serviceName"
            }
            sc.exe delete $serviceName
            Log-Message "Deleted service $serviceName"
        } catch {
            Log-Message "Failed to stop or delete service ${serviceName}: $($_)"
        }
    }
    
    # Function to kill processes by name
    function Kill-Processes {
        param (
            [string[]]$processNames
        )
        foreach ($processName in $processNames) {
            try {
                Get-Process -Name $processName -ErrorAction Stop | Stop-Process -Force
                Log-Message "Killed all processes named $processName"
            } catch {
                Log-Message "Failed to kill processes named ${processName}: $($_)"
            }
        }
    }
    
    # Function to kill processes by executable name using taskkill
    function TaskKill-Processes {
        param (
            [string[]]$processExecutables
        )
        foreach ($processExecutable in $processExecutables) {
            try {
                Start-Process -FilePath "taskkill.exe" -ArgumentList "/F /IM $processExecutable" -NoNewWindow -Wait
                Log-Message "Taskkill executed for $processExecutable"
            } catch {
                Log-Message "Failed to execute taskkill for ${processExecutable}: $($_)"
            }
        }
    }
    
    # Function to delete directories
    function Delete-Directory {
        param (
            [string]$directoryPath
        )
        try {
            Remove-Item -Path $directoryPath -Recurse -Force -ErrorAction Stop
            Log-Message "Deleted directory $directoryPath"
        } catch {
            Log-Message "Failed to delete directory ${directoryPath}: $($_)"
        }
    }
    
    # Function to remove startup items
    function Remove-StartupItem {
        param (
            [string]$itemName
        )
        try {
            # Remove from Startup folder
            $startupFolderPath = [System.Environment]::GetFolderPath('Startup')
            $startupItemPath = Join-Path -Path $startupFolderPath -ChildPath "$itemName.lnk"
            if (Test-Path $startupItemPath) {
                Remove-Item -Path $startupItemPath -Force
                Log-Message "Removed $itemName from Startup folder"
            }
        } catch {
            Log-Message "Failed to remove $itemName from Startup folder: $($_)"
        }
        
        try {
            # Remove from Registry (Current User)
            $regPath = "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
            if (Get-ItemProperty -Path $regPath -Name $itemName -ErrorAction Stop) {
                Remove-ItemProperty -Path $regPath -Name $itemName -ErrorAction Stop -Force
                Log-Message "Removed $itemName from HKCU registry"
            }
        } catch {
            Log-Message "Failed to remove $itemName from HKCU registry: $($_)"
        }
    
        try {
            # Remove from Registry (Local Machine)
            $regPathLM = "HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
            if (Get-ItemProperty -Path $regPathLM -Name $itemName -ErrorAction Stop) {
                Remove-ItemProperty -Path $regPathLM -Name $itemName -ErrorAction Stop -Force
                Log-Message "Removed $itemName from HKLM registry"
            }
        } catch {
            Log-Message "Failed to remove $itemName from HKLM registry: $($_)"
        }
    }
    
    # Function to remove registry keys
    function Remove-RegistryKey {
        param (
            [string]$registryPath
        )
        try {
            if (Test-Path $registryPath) {
                Remove-Item -Path $registryPath -Recurse -Force -ErrorAction Stop
                Log-Message "Removed registry key $registryPath"
            }
        } catch {
            Log-Message "Failed to remove registry key ${registryPath}: $($_)"
        }
    }
    
    # Define paths using environment variables
    $programFilesPath = [System.Environment]::GetFolderPath('ProgramFiles')
    $programDataPath = [System.Environment]::GetFolderPath('CommonApplicationData')
    $appDataLocalPath = [System.Environment]::GetFolderPath('LocalApplicationData')
    $appDataRoamingPath = [System.Environment]::GetFolderPath('ApplicationData')
    
    # Construct the path to the uninstaller
    $uninstallPath = Join-Path -Path $programFilesPath -ChildPath "Timus Connect\\Uninstall Timus Connect"
    
    # Stop and delete Timus Connect services
    Stop-And-Delete-Service -serviceName "timus-connect-service"
    Stop-And-Delete-Service -serviceName "timus-helper-service"
    
    # Kill all processes named "timus"
    Kill-Processes -processNames @("timus")
    
    # Additional taskkill commands for specific executables
    TaskKill-Processes -processExecutables @("timus-connect-service.exe", "timus-helper-service.exe", "timus-telemetry.exe", "timus-wireguard-tunnel-service.exe", "openvpn.exe")
    
    # Run uninstaller silently
    try {
        $process = Start-Process -FilePath $uninstallPath -ArgumentList "/S" -NoNewWindow -Wait -PassThru
        $process.WaitForExit()
        Log-Message "Ran uninstaller at $uninstallPath"
    } catch {
        Log-Message "Failed to run uninstaller at ${uninstallPath}: $($_)"
    }
    
    # Delete directories associated with Timus Connect
    Delete-Directory -directoryPath "$appDataLocalPath\\timus-updater"
    Delete-Directory -directoryPath "$appDataRoamingPath\\Timus Connect"
    Delete-Directory -directoryPath "$programFilesPath\\Timus Connect"
    Delete-Directory -directoryPath "$programDataPath\\Timus Connect"
    
    # Remove Timus Connect from startup items
    Remove-StartupItem -itemName "Timus Connect"
    
    # Remove specific registry keys related to Timus Connect
    Remove-RegistryKey -registryPath "HKCU:\\SOFTWARE\\Classes\\timus-connect"
    Remove-RegistryKey -registryPath "HKLM:\\SOFTWARE\\Timus"
    Remove-RegistryKey -registryPath "HKCR:\\timus-connect"
    
    # Log completion of the script
    Log-Message "Uninstallation script completed"
    
    # Exit the script
    exit
    
    

 

Updated

Was this article helpful?

1 out of 1 found this helpful

Have more questions? Submit a request

Comments

0 comments

Article is closed for comments.