This is simple script designed to fix the jittery cursor issue on M1 Macbook Pro (and potentially other Macs). The jitter stems from a rendering bug causing misalignment between the hot spots of different cursors. The hot spot is the exact point within the cursor's graphical representation that corresponds to the actual screen location being pointed to. Benzomouse addresses this by standardizing the hotx
and hoty
values across all cursor types, ensuring the hot spots are aligned. This eliminates the discrepancy that causes the jitter, providing a smooth cursor transition experience.
As root volume is read-only in macOS now, this utilizes synthetic symlinks - the script makes the necessary modifications without altering the system's security settings or any system config files.
This script uses XMLStarlet to modify the plist files.
brew install xmlstarlet
- Install Dependencies: Make sure to install XMLStarlet as mentioned in the dependencies section above.
- Clone or Download the Repository: Clone this repository or download the
benzomouse.sh
script to your local machine. - Make the Script Executable: Open a terminal window, navigate to the directory where the script is saved, and run:
chmod +x benzomouse.sh
- Run the Script: Execute the script by running:
./benzomouse.sh
- Follow the Prompts: The script will guide you through the process and will prompt you to reboot your system.
If you encounter any issues or wish to revert the changes made by Benzomouse, follow these steps:
- Delete the Synthetic Symlink Entry:
Open a terminal window and run:
Remove the line that contains the symlink for the cursors, then save and exit
sudo nano /etc/synthetic.conf
nano
. - Reboot Your Mac:
Since the synthetic symlink requires a reboot to take effect, you'll need to reboot again to remove it. Run:
sudo reboot
- Delete the Copied Cursors Folder:
After restarting, open a terminal window and delete the copied cursors folder by running:
rm -rf ~/cursors
After these steps, the system should revert to using the original cursor files, and the modified copies will be deleted.
- No Need to Disable SIP or Authenticated-Root: Benzomouse does not require you to disable System Integrity Protection (SIP) or authenticated-root. These methods were originally required to fix this bug, but Apple has obsoleted them.
- Scaled Displays: I don't use a scaled display, nor do I use an external monitor. If needed, you can modify the script to change
hotx-scaled
andhoty-scaled
. Replace the XMLStarlet command with the following:xmlstarlet edit --update "/plist/dict/key[text()=\\\"hotx-scaled\\\"]/following-sibling::*[1]" --value "YOUR_HOTX-SCALE_VALUE_HERE" \\ --update "/plist/dict/key[text()=\\\"hoty-scaled\\\"]/following-sibling::*[1]" --value "YOUR_HOTY-SCALE_VALUE_HERE" -L "{}"
I recommend making a backup of ~/cursors (the copy in your Users folder) before doing this, in case you need to repeatedly revert changes. Like the hotx
and hoty
fix, a hotx-scaled
and hoty-scaled
fix probably requires consistent hot spot values. Replace YOUR_HOTX-SCALE_VALUE_HERE
and YOUR_HOTY-SCALE_VALUE_HERE
with the desired scaled values for hotx
and hoty
, respectively.
GPLv3.