So, I hope this is useful for anyone having this issue, I found a software workaround to this bug.
First of all, the bug only happens only when running on dGPU, and I found out that it's related the card not properly adjusting secondary cursors to the same reference positions of the arrow one (on cursor change, e.g transitioning from link cursor to normal). So, the solution was manually changing theses values on the system files to be the same.
Now, it's not that easy to do so, because since Catalina, MacOS would not let you edit files in the System/ directory, even with System Integrity Protection (SIP) off. So, the first thing to do is unlocking this protection. For that, you would have to first go to the macOS Recovery Mode. For that:
- Turn on your Mac and immediately press and hold these two keys: Command (⌘) and R.
- Release the keys when you see an Apple logo, spinning globe, or other startup screen.
- You might be prompted to enter a password, such as a firmware password or the password of a user who is an administrator of this Mac. Enter the requested password to continue.
- Startup is complete when you see the utilities window:
- In the Recovery Screen, go to the menu Utilities -> Terminal, and type the following:
Code:> csrutil disable > reboot
Now, in normal mode, open a terminal window, and run:
Code:> sudo mount -uw / > killall Finder
Now, you should be able to edit files in the Systems directory. After restarting, the directory will be read only again, but you should manually enable SIP again, more on that later.
For editing the files I used Visual Studio Code with an extension called Binary Plist, which lets me edit the binary plist field as an XML and transform it back to binary on save. You could use anything that lets you edit files with these extensions as required.
Now, move to /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Resources/cursors/ (use cd command) This is where all the files that controls the cursors are.
View attachment 961271
You have to copy these whole folder to another directory, since you will not be able to edit these files directly from VSCode. Move a directory up with> cd ..
and copy to another directory, for example home:
Code:> cp -R ./cursors ~/cursors
I suggest that you keep a backup of the original cursors folder. Now open the cursors directory in VSCode:
View attachment 961272
As you see, every pointer (e.g. the pontinghand, which is displayed on links hover) has a file for the image and another for configuration (info.plist). If you have the Binary Plist extension installed, when you open a plist file and click on the " Do you want to open it anyway" link, you should get second tab in the form of plist XMLView attachment 961273
Binary form:
View attachment 961276
XML form:
View attachment 961275
So now, you can modify the values as needed. We need to edit the hotx and hoty values (I haven't tried with the -scaled values, since I would not be using escalation for my display, you might want to experiment with that, too). Change the hotx and hoty values to 4 (Inside the <integer></integer> tag below the corresponding key).
View attachment 961277
I changed these values for all the cursors, but you can do it just for the pointing hand if that's what you only care about.
Once all these files are ready, it's time to move them to the System directory. For that, in the terminal, move to the directory where you have the edited cursors folder (cd ~
, in this example) and run:
Code:> sudo cp -R ./cursors /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Resources/
Now, restart your computer, and the jittering problem should not be there anymore.
Once this is done, you should restart on Recovery Mode again, open the terminal and run:
Code:> csrutil enable > reboot
And that would be all. I hope it's helpful for you guys, it was really frustrating for me and I was so relieved when I got to fix it with this.
Hi @jorgepasco1!
Thanks for your efforts in fixing this nasty issue.
Since on Big Sur and later editing these files is impracticable now, I installed Mojave on my Mac (in a separate partition, not because of cursor of course, just needed several 32 bit apps and games). On Mojave your method works great, so I fixed pointing hand first.
However, other pointers have wrong movement too and I want to fix them as well. The problem is, if hotx and hoty values are set to 4 for other pointers, they seem to be cropped a little (and still jittering).
How did you know value '4' is correct for pointing hand and what values for other pointers did you set? Please let us know 🙏I changed these values for all the cursors