- Why we wrote DeamonLeash
- What DeamonLeash does
- DeamonLeash: Manual Setup
- Uninstall DaemonLeash
- DaemonLeash: Interactive Script
6 Reasons to stop using Adobe CC
- 1: LOCK-IN EFFECT
- 2: DATA PROFILING
- 3: SECURITY ISSUES
- 4: TERMS & CONDITIONS
- 5: SANCTIONS AND THE ABUSE OF POWER
- 6: ALTERNATIVE SOTWARE DOES EXIST!
It is quite an effort to work with this script. If you really want to use DaemonLeash with Adobe software, we recommend you stop using Adobe CC instead and find alternatives:
A word in advance: we stopped using Adobe a while ago and we found alternative software that cover all our needs. This is the reason why we also stopped to maintain DaemonLeash on GitHub. Adobe might have changed how its background processes work, which is why our script might not catch all of them anymore...
Why we wrote DaemonLeash
( . . . )
Until 2020 we have been using Adobe Creative Cloud (for MacOS) on a regular basis. Some of our members have either studied Design or FineArts and it is very common that students get access to the whole Adobe Creative Cloud through the computer workshop at their academy or university. At the same time we started to get interested in MacOS security and online privacy. When we were looking into the background processes that were running on the computers of fellow artists and designers, it came to our attention that several background processes continously connect to Adobe Servers to send out data as soon as we start the Computer - even though we did not actively start any Adobe Application (i.e. Photoshop). We noticed that also Google Chrome configures a LauchDaemon that behaves exactly the same way, which is why we included Google processes in our script as well. These processes require processing power that we want to use in other ways. Yes, background processes check for updates too - yet for privacy reasons we prefer to check for updates either manually, or when we start the application that we want to use.
But most importantly we do value our privacy. The average user does not exactly know what data is being collected by big Software Corporations, even though i.e. Adobe claims only to collect data to improve its products. Yet in our opinion it already is intolerable that Adobe and Google automatically know when (every time we start our computer), where (our IP address) and for how long we use our computers (until we shut them down), just because we have their software installed on our system. We want to limit the collection of our data as much as we can.
This is why we wrote DaemonLeash.
What DaemonLeash does
Kill persistent Adobe (and Google) background processes
Whenever you start your computer DaemonLeash checks for both LaunchDaemons and LaunchAgents by Adobe & Google and disables them before they can communicate with their respective end-points over the internet. In order to keep your workflow uninterrupted, DaemonLeash does not terminate Adobe processes as long as you are actively using Adobe Software, but it keeps listening in the background and terminates any persitent Adobe Backgound Process as soon as you terminate the software you are working with (i.e. after you close Adobe Photoshop). Even though we do not use Google Chrome and we would never recommend to use Google Chrome, we added Google Chrome as an example to show how DaemonLeash could be configured to target other background processes as well. Yes, our script sets up its own background processess to achieve this. But these use much less CPU power than the average Adobe background process does.
DaemonLeash consists of a LaunchDaemon, a LaunchAgent, four Shell Scripts and a Log File. Right now DaemonLeash targets Adobe CC and Google Chrome, yet the scripts can easily be adapted to unload other LaunchDaemons and LaunchAgents, that may be installed by other proprietary software on your system as well.
IMPORTANT: Manual Setup Required
Both Adobe and Google may automatically install Plugins and Startup Items on your Computer. You can disable them manually at any time:
Open System Settings -> General -> Login Items and remove all apps that you don't want to start whenever you log in (select the app and click -). We recommend you disable Creative Cloud on startup and only start it when you need to update Adobe CC.
Next, go to System Settings -> Privacy & Security -> Extensions -> Added Extensions and for each extension you want to disable, remove the respective hook by clicking on it. Furthermore, check at the bottom of System Settings for additional Plugins that may have been installed by Google Chrome or Adobe CC and disable them.
If you further want to monitor, maybe even block outgoing connections, we recommend Lulu by Objective See. Alternatively, you can purchase Little Snitch by Objective Development. Both Lulu and Little Snitch are host-based application firewalls for MacOS and can be used to monitor apps, preventing or permitting them to connect to attached networks through advanced rules. A Single License for Little Snitch costs about $59/€59. Advanced users may look into PiHole, which we recommend as DNS based ad-blocker, that can be configured to block any other outgoing connection via custom rules.
HOWEVER, ADOBE ONLY ALLOWS ACTIVE SUBSCRIBERS TO USE CREATIVE CLOUD OFFLINE WITH A VALID LICENSE FOR A LIMITED PERIOD OF TIME: THE SO-CALLED GRACE PERIOD.
During the grace period you can use Lulu, Little Snitch or Pi-hole to block all outgoing traffic to Adobe servers and use Adobe CC as if you were offline. Yet as soon as Adobe CC reminds you that you have to reconnect to the Internet to validate you subscription, briefly disable your application firewall or your Pi-hole and allow Adobe CC to reconnect to the Adobe Servers. Afterwards you can block Adobe CC again (until the next grace period ends).
DaemonLeash: Manual Setup
Terminate Persistent Background Processes
Follow this step-by-step guide if you want to learn how to configure a LaunchAgent and a LaunchDaemon as DaemonLeash (for Adobe CC and Google Chrome) on MacOS. If you prefer an automated fast and easy way to set it up, use our scripted solution instead: DaemonLeash: Interactive Script
CONCEPT:
There are several challenges that need to be addressed in order to make DaemonLeash work:
1) Adobe and Google never use the same names for their LaunchDaemons and LaunchAgents across multiple computers (they always contain seemingly random strings and numbers). Furthermore these numbers may change after any update. This is why we need to dynamically create unload lists that track these individual changes in order to unload the respective LaunchDaemons and LaunchAgents in a reliable way.
2) We need to run a script in the background, that checks periodically if the user started Adobe software (i.e. to work with Photoshop) - and that in turn pauses the unload process for as long as the user is working, to guarantee an uninterrupted workflow.
3) For troubleshooting purposes we want to create a log file, that tells us at which time which process has been terminated and if any Adobe processes are currently running.
We are going to use /Users/Shared/ as our install location, because this folder is accessible for both, the admin account and the local user account. We do this because DaemonLeash may run on a machine where admin account and day-to-day user accounts are separated. Alternatively, if you use MacPorts, you may use /opt/ as an install location as well. You then have to change the script accordingly.
PREPARE INSTALL LOCATION:
Create required folders:
mkdir /Users/Shared/Enhancements
mkdir /Users/Shared/Enhancements/DaemonLeash
mkdir /Users/Shared/Enhancements/DaemonLeash/dynamiclist
Prepare the log file:
# Touchsudo touch /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
Folder ownership and permissions:
# Ownershipsudo chown $(stat -f '%Su' /dev/console):wheel /Users/Shared/Enhancements
# Ownershipsudo chown -R $(stat -f '%Su' /dev/console):staff /Users/Shared/Enhancements/DaemonLeash
# Ownershipsudo chown root:wheel /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
# Permissionssudo chmod 644 /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
CREATE REQUIRED SCRIPTS:
First we want to create the main script, which is owned by root and the core of DaemonLeash. It is responsible for setting all necessary variables, to check for running processes related to Adobe apps you are currently working with (in which case these processes won't be terminated) and to check if background processes keep running after you have finished your work. For example after you have quit Adobe Photoshop, we want persistent processes to be terminated as well. The same counts for processes that are respawned by Adobe Creative Cloud. This script fills the initially empty unload scripts with the specific commands that are necessary to unload all LaunchDaemons and LanchAgents by Adobe and Google. It also writes the current status (about Adobe processes) into the log file. We don't want to accumulate a huge log here, which is why only the most current status of running Adobe processes is logged and displayed. Eventually, this script will run every 60 seconds.
Change into the DaemonLeash installation folder:
cd /Users/Shared/Enhancements/DaemonLeash
Open a command-line editor, i.e. nano, to create DaemonLeash.sh:
sudo nano DaemonLeash.sh
Copy and paste the following lines:
#!/bin/bash
# First DaemonLeash clears the old unload command list of Adobe/Google LaunchDaemons and LaunchAgents.
sed -i '' /com.adobe.*/d /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh;
sed -i '' /com.google.*/d /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh;
sed -i '' /com.adobe.*/d /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh;
sed -i '' /com.google.*/d /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh;
# Next it fills the two unload command lists again with all Adobe/Google Launch Daemons and LaunchAgents.
find /Library/LaunchDaemons \( -name "com.adobe.*" \) | sed 's/^/sudo launchctl unload /' >> /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh;
find /Library/LaunchDaemons \( -name "com.google.*" \) | sed 's/^/sudo launchctl unload /' >> /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh;
find /Library/LaunchAgents \( -name "com.adobe.*" \) | sed 's/^/launchctl unload /' >> /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh;
find /Users/bleeeth/Library/LaunchAgents \( -name "com.adobe.*" \) | sed 's/^/launchctl unload /' >> /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh;
find /Library/LaunchAgents \( -name "com.google.*" \) | sed 's/^/launchctl unload /' >> /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh;
find /Users/bleeeth/Library/LaunchAgents \( -name "com.google.*" \) | sed 's/^/launchctl unload /' >> /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh;
# Because this script is started and owned by root it can now also unload all LaunchDaemons
/Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh
# Next we define the functions that check for running processes. Please note: we have split each function in two functions. We decided to do this because it makes it possible to write the readout of one function to the log file and use the other function to tell the sript that processes are running.
# 1) We need two functions for all active apps that are in use.
# 2) We need two functions for all background apps that we want to terminate.
# 3) We need one exeption for Creative Cloud. Sometimes we want to update our Adobe Applications, but if we keep to terminate all background processes, Creative Cloud will just crash which makes it impossible for us to install updates.
ApplicationLog() {
ps cax | grep -v grep | grep -E "Acrobat|InDesign|Illustrator|Dreamweaver|Photoshop|Lightroom|Audition|Premiere Pro|Media Encoder|After Effects"
}
ApplicationCheck() {
ApplicationLog > /dev/null
}
BackgroundLog() {
ps cax | grep -v grep | grep -v LogTransport2 | grep -E "AdobeCRDaemon|Adobe Desktop Service|Core Sync|Adobe CCXProcess|node|Adobe_CCXProcess.node|AdobeIPCBroker|LogTransport2|AdobeResourceSynchronizer"
}
BackgroundApplicationCheck() {
BackgroundLog > /dev/null
}
Exception() {
ps cax | grep -v grep | grep -E "Creative Cloud"
}
# Periodically the script runs through a loop, checks for Adobe processes and Adobe background processes and deals with them. Every time it writes the current status into the log file:
while true
do
if Exception > /dev/null
then
sed -i '' '1,$d' /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
date +'%d/%m/%Y %H:%M:%S' >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo "-> These Adobe Processes are currently running:" >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
ApplicationLog >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
BackgroundLog >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
elif ApplicationCheck && BackgroundApplicationCheck
then
sed -i '' '1,$d' /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
date +'%d/%m/%Y %H:%M:%S' >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo "-> These Adobe Processes are currently running:" >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
ApplicationLog >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
BackgroundLog >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
killall ACCFinderSync "Adobe Creative" "Core Sync" "AdobeCRDaemon" "Adobe CCXProcess.app" "Adobe Desktop Service" "Adobe Crash Reporter" "LogTransport2" "AdobeResourceSynchronizer" "node" Adobe_CCXProcess.node "AdobeIPCBroker"
elif BackgroundApplicationCheck
then
sed -i '' '1,$d' /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
date +'%d/%m/%Y %H:%M:%S' >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
killall ACCFinderSync "Adobe Creative" "Core Sync" "AdobeCRDaemon" "Adobe CCXProcess.app" "Adobe Desktop Service" "Adobe Crash Reporter" "LogTransport2" "AdobeResourceSynchronizer" "node" Adobe_CCXProcess.node "AdobeIPCBroker"
echo "-> Adobe Background Processes terminated." >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
ApplicationLog >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
elif ApplicationCheck
then
sed -i '' '1,$d' /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
date +'%d/%m/%Y %H:%M:%S' >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo "-> No Background Processes, yet these Adobe Processes are still running:" >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
ApplicationLog >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
BackgroundLog >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
killall ACCFinderSync "Adobe Creative" "Core Sync" "AdobeCRDaemon" "Adobe CCXProcess.app" "Adobe Desktop Service" "Adobe Crash Reporter" "LogTransport2" "AdobeResourceSynchronizer" "node" Adobe_CCXProcess.node "AdobeIPCBroker"
else
sed -i '' '1,$d' /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
date +'%d/%m/%Y %H:%M:%S' >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo " " >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
echo "-> No Adobe Processes are currently running." >> /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.log
fi
# Loop interval currently set to 60 seconds.
sleep 60
done
Press [control] + X and then Y + [ENTER] to save the file and close the editor.
Since the main script is going to be owned by root it can only unload global LaunchDaemons. This is why we need an unload helper script, owned by the current user. Its sole purpose is to periodically check for Adobe & Google LaunchAgents and to unload them. In order to do so, it needs to fill another initially empty script with the required commands. All running processes are still handled by the main script. Unloading LaunchAgents only makes sure that no new processes are spawned by them. This scripts also runs every 60 seconds.
Open a command-line editor again to create DeamonLeashHelper.sh:
sudo nano DaemonLeashHelper.sh
Copy and paste the following content:
#!/bin/bash
/Users/Shared/Enhancements/daemonleash/dynamiclist/LocalUnloadList.sh
ApplicationCheck() {
ps cax | grep -v grep | grep -v LogTransport2 | grep -E "Acrobat|InDesign|Illustrator|Dreamweaver|Photoshop|Lightroom|Audition|Premiere Pro|Media Encoder|After Effects|Creative Cloud" > /dev/null
}
while true
do
if ApplicationCheck
then
sleep 60
else
/Users/Shared/Enhancements/daemonleash/dynamiclist/LocalUnloadList.sh
fi
done
Again, press [control] + X and then Y + [ENTER] to save the file and close the editor.
Furthermore we need to create two empty shell scripts, that will later be dynamically filled by DaemonLeash.sh and by DeamonLeashHelper.sh with all necessary unload commands. Every startup DaemonLeash will check LaunchDaemons and LaunchAgents by Adobe and Google. It will then create two separate unload command lists that can handle Adobe and Goolge both at user level and at admin level (root). The global unload list will be owned by root and handles all Adobe and Google LaunchDaemons, while the local unload list is owned by the current user. This list handles all Adobe and Google LaunchAgents. As soon as both command lists are complete, DaemonLeash proceeds to run both of them in order to unload all LaunchDaemons and LaunchAgents by Adobe and Goolge:
# Touchsudo touch /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh
# Touchsudo touch /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh
# Touchsudo tee /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh << EOF > /dev/null
#!/bin/sh
EOF
# Touchsudo tee /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh << EOF > /dev/null
#!/bin/sh
EOF
Next we define required file ownership and permissions:
# Ownershipsudo chown root:wheel /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.sh /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh
# Ownershipsudo chown $(stat -f '%Su' /dev/console):wheel /Users/Shared/Enhancements/DaemonLeash/DaemonLeashHelper.sh /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh
# Permissionssudo chmod 744 /Users/Shared/Enhancements/DaemonLeash/DaemonLeash.sh /Users/Shared/Enhancements/DaemonLeash/dynamiclist/GlobalUnloadList.sh /Users/Shared/Enhancements/DaemonLeash/DaemonLeashHelper.sh /Users/Shared/Enhancements/DaemonLeash/dynamiclist/LocalUnloadList.sh
CREATE LAUNCHDAEMON AND LAUNCHAGENT:
Quick Summary: The global (DaemonLeash) LaunchDaemon montitors and terminates global Adobe & Google LaunchDaemons. The local (DaemonLeash) LaunchAgent on the other hand monitors and terminates Adobe & Google LaunchAgents that run on a user account level.
Both DaemonLeash LaunchDaemon and DaemonLeash LaunchAgent run once ever time you restart your computer. They are responsible for starting the two scripts you set up earlier: DaemonLeash.sh and DaemonLeashHelper.sh
To create the required LaunchDaemon, navigate in your Terminal.app to the folder location where all global LaunchDaemons are stored:
cd /Library/LauchDaemons
Open a command-line editor, i.e. nano, to create the LaunchDaemon:
sudo nano info.term7.daemon.leash.plist
Copy and paste the following lines:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>info.term7.daemon.leash</string>
<key>ProgramArguments</key>
<array>
<string>/Users/Shared/Enhancements/DaemonLeash/DaemonLeash.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Press [control] + X and then Y + [ENTER] to save the file and close the editor.
To create the required LauchAgent, navigate in your Terminal.app to the folder location where all LaunchAgents for all users are stored:
cd /Library/LaunchAgents
Open a command-line editor, i.e. nano, to create the LaunchAgent:
sudo nano info.term7.daemon.leash.helper.plist
Copy and paste the following lines:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>info.term7.daemon.leash.helper</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/Users/Shared/Enhancements/DaemonLeash/DeamonLeashHelper.sh</string>
</array>
</dict>
</plist>
Press [control] + X and then Y + [ENTER] to save the file and close the editor.
Setup ownership and permissions:
# Ownershipsudo chown root:wheel /Library/LauchDaemons/info.term7.daemon.leash.plist /Library/LaunchAgents/info.term7.daemon.leash.helper.plist
# Permissionssudo chmod 644 /Library/LauchDaemons/info.term7.daemon.leash.plist /Library/LaunchAgents/info.term7.daemon.leash.helper.plist
Finally we need to load our Daemons with the following two commands:
# Start LaunchAgentlaunchctl load info.term7.daemon.leash.helper.plist
# Start LaunchDaemonsudo launchctl load /Library/LaunchDaemons/info.term7.daemon.leash.plist
Congratulations! DaemonLeash is now up and running. Every time you restart your computer it will run automatically.
Uninstall DaemonLeash
the manual way...
1) Unload the LaunchAgent and the LaunchDemon:
# Unload LaunchAgentsudo -u $(stat -f '%Su' /dev/console) launchctl unload /Library/LaunchAgents/info.term7.daemon.leash.helper.plist
# Unload LaunchDemonsudo -u $(stat -f '%Su' /dev/console) launchctl unload /Library/LaunchDaemons/info.term7.daemon.leash.plist
2) Delete the LaunchAgent and the LaunchDemon:
# Delete LaunchAgentsudo rm /Library/LaunchAgents/info.term7.daemon.leash.helper.plist
# Delete LaunchDemonsudo rm /Library/LaunchDaemons/info.term7.daemon.leash.plist
3) Delete all related files:
# Delete Files & Folderssudo -u $(stat -f '%Su' /dev/console) rm -rf /Users/Shared/Enhancements/DaemonLeash
DaemonLeash has now been purged from your system.
DaemonLeash: Interactive Script
automatic install scripts
Our interactive script and sets up a local LaunchAgent and a global LaunchDaemon, that run whenever a user logs into an account on MacOS. It also sets up all required folders, scripts and a log file at /Users/Shared/Enhancements/DaemonLeash. We also provide a simple uninstall script.
BE CAREFUL: YOU SHOULD ALWAYS LOOK THROUGH THE CONTENT OF ANY SHELL SCRIPT YOU DOWNLOAD FROM AN UNKNOWN SOURCE BEFORE YOU EXECUTE IT! MAKE SURE IT IS SAFE TO EXECUTE!
WE HOST OUR SCRIPTS FOR EVERYONE TO SEE ON OUR GITHUB PAGE.
To run our script, you first have to download it: Open the Terminal.app (found with Spotlight: press ⌘ and [SPACE], then type Terminal, or find it in your Applications -> Utilities Folder). In your Terminal, use this command to navigate to your Downloads Folder:
cd ~/Downloads
Download the interactive script:
# Interactive Scriptcurl -O https://raw.githubusercontent.com/term7/DaemonLeash/master/Install_DaemonLeash.sh
If you ever want to uninstall DaemonLeash, download our uninstall script:
# Uninstall Scriptcurl -O https://raw.githubusercontent.com/term7/DaemonLeash/master/Remove_DaemonLeash.sh
Give the respective file execute permissions:
chmod +x *DaemonLeash.sh
Execute the respective script:
./Install_DaemonLeash.sh
./Remove_DaemonLeash.sh
If asked, enter your administrator password and hit [ENTER] and follow the instructions. Your password won't be shown by default.