Change Finder Icon in macOS Catalina without rebooting?
With all default security measures of Catalina enabled you can't change neither Finder's icon nor Dock's Finder icon without rebooting.
To overcome the involved hurdles (and re-enable them later), you have to reboot at least twice.
These are:
- disable SIP
- mount your system volume read/write (usually it's read-only)
Step-by-step How-To:
-
Boot to macOS Recovery (AKA Recovery Mode) by booting|rebooting and pressing cmdR right after the startup chime
-
After booting is completed you'll see a window titled macOS Utilites. In the menubar open Utilities > Terminal
-
In the Terminal type
csrutil disable
and hit ⏎ Return/Enter to execute the command -
In the Terminal type
reboot
and hit ⏎ Return/Enter -
After rebooting to the standard macOS and logging on to a user with admin privileges, open Terminal in the folder /Applications/Utilities/
-
In the Terminal type
sudo mount -rw /
and hit ⏎ Return/Enter to execute the command -
Now modify Dock's Finder icons: (/System/Library/CoreServices/Dock.app/Contents/Resources/finder.png and /System/Library/CoreServices/Dock.app/Contents/Resources/[email protected]) or Finder's Finder icons: /System/Library/CoreServices/Finder.app/Contents/Resources/Finder.icns
-
To remove the original icon type:
sudo rm /System/Library/CoreServices/Dock.app/Contents/Resources/finder.png
and hit ⏎ Return/Enter
-
Copy the new icons with the Terminal to the Resources folder(s). Example (assuming the new Finder icon finder.png is on your desktop):
sudo cp /Users/your_username/Desktop/finder.png /System/Library/CoreServices/Dock.app/Contents/Resources/
and hit ⏎ Return/Enter
-
Remove Dock's icon cache:
sudo find /private/var/folders/ -name com.apple.dock.iconcache -exec rm {} \;
and hit ⏎ Return/Enter
11. Kill the Dock.app: killall Dock
and hit ⏎ Return/Enter
12. Reboot to Boot to macOS Recovery and re-enable SIP by typing in the Terminal csrutil enable
and ⏎ Return/Enter to execute the command.
13. In the Terminal type reboot
and hit ⏎ Return/Enter
14. Proof for the modified Finder icon in the Dock:
[![enter image description here][1]][1]
After point updates (e.g. 10.15.2) the icons will be replaced probably and you have to re-do the whole icon customization.
Alternative way (kudos to user3439894) without disabling SIP and only one reboot:
-
Download/prepare your pics (i.e. finder.png and [email protected]) e.g on your Desktop
-
Boot to macOS Recovery (AKA Recovery Mode) by booting|rebooting and pressing cmdR right after the startup chime
-
After booting is completed you'll see a window titled macOS Utilites. In the menubar open Utilities > Terminal
-
Here I assume Macintosh HD is the name of your main volume and user_name is your user name. Replace them accordingly with the names in your setup in the commands below . In the Terminal enter (hit ⏎ Return/Enter after each line):
cp /Volumes/Macintosh\ HD/Users/user_name/Desktop/finder.png /Volumes/Macintosh\ HD/System/Library/CoreServices/Dock.app/Contents/Resources/ cp /Volumes/Macintosh\ HD/Users/user_name/Desktop/[email protected] /Volumes/Macintosh\ HD/System/Library/CoreServices/Dock.app/Contents/Resources/ find /Volumes/Macintosh\ HD/private/var/folders/ -name com.apple.dock.iconcache -exec rm {} \; reboot
If you are unable to navigate to the path /Volumes/Macintosh\ HD
, make sure your disk is mounted. Follow the steps below to mount your disk.
- Quit the terminal
- Select the Disk Utility option
- On the left side of the window, you will see the list of Disks where Macintosh HD might be greyed out. Click that and select mount from the central top panel.
- Quit the Disk Utility and open terminal again. You will be able to navigate to the paths mentioned above
A quick & dirty bash script iconreplacement.sh
(which can be refined) based on user3439894's alternative approach automates some tasks:
#!/bin/bash
#Variables
DOCKRES="/Volumes/$SYSVOLNAME/System/Library/CoreServices/Dock.app/Contents/Resources/"
#Change Finder icons in Dock.app, clean Dock's icon cache and reboot to normal system
if [ ! -d "/Users/$USER" ]; then
cp "/Volumes/$SYSVOLNAME/Users/$USR/Desktop/finder.png" "$DOCKRES"
cp "/Volumes/$SYSVOLNAME/Users/$USR/Desktop/[email protected]" "$DOCKRES"
find "/Volumes/$SYSVOLNAME/private/var/folders/" -name com.apple.dock.iconcache -exec rm {} \;
reboot
fi
#Reboot to Recovery Mode
sudo nvram "recovery-boot-mode=unused" > /dev/null 2>&1
sudo reboot > /dev/null 2>&1
The variable DOCKRES
defines the path to the Resource folder of Dock.app in Recovery Mode.
The if
statement detects whether the Mac is booted to Recovery Mode. Only then the resource files will be copied to Dock.app's Resource folder, the iconcache will be deleted and the Mac reboots.
The sudo
commands reboot your Mac to Recovery Mode. sudo
doesn't exist in the Recovery Mode base system and executing it throws an error. In my environment this happened sometimes because reboot was too slow to kill everything (or sudo ...
too fast). The error message is suppressed with ... > /dev/null 2>&1
.
Move the bash script to your admin user's Desktop. The two Dock resource files (finder.png and [email protected]) have to reside on the same user's desktop.
To execute the bash script (save any open files and quit all apps first) and reboot to Recovery Mode enter in Terminal:
cd Desktop
./iconreplacement.sh
In Recovery Mode open the Terminal. The shell command and the script require to set the name of your main volume and the admin user. Example:
SYSVOLNAME="Macintosh HD"
USR=capatane
So enter and replace Main_Volume_Name and user_name accordingly:
SYSVOLNAME="Main_Volume_Name"
USR=user_name
cd "/Volumes/$SYSVOLNAME/Users/$USR/Desktop/"
. ./iconreplacement.sh
The first .
(dot and space) is intentional and is required to export the user definded variables (SYSVOLNAME
& USR
) to the shell script!
Use this script at your own risk. No responsibility is taken over for errors, omissions, interruptions, defects, delays during operation etc.