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
Comments
0 comments
Article is closed for comments.