Gone are the days when Apple could claim that “It Just Works”.
Mac from a Programmer’s Perspective
Let’s cut to the chase: Mac’s problems are bigger and older than you think. In this post I’m going to mention three major problems that I’ve been dealing with in the past few days since my migration back to Mac (right now I’m on Macbook Pro M1 Pro). I used to have a 2015 Macbook Pro too, and All the following problems existed on that machine too. In fact, my quest to solve these issues has taken me to ancient forums and threads dating all the way back to the late 2000s!
Honestly, it’s a shame that Apple has not yet fixed any of these issues, while boasting about macOS as “The Most Advanced Operating System”. Between dropping my Macbook Pro 2015 and now, I used Windows for work and personal stuff and never experienced any such issues with it. Sure, Windows does have many other problems, but at least they don’t make me pull my hair and regret spending almost $3000 on a brand new machine. IMO, it’s unfortunate that the power of M1 is being wasted on such an outdated crappy macOS. Let’s look at the problems. Feel free to skim the headings.
Mac Problems that Ruined it For Me
1. Mac’s incompatibility with most external monitors
1.1. Monitor is Detected as TV! No RGB Color Profile.
This not only messes with colors, but makes text look fuzzy too.
- There’s a Ruby script that supposedly fixes this, but I haven’t tried it.
- Instead, I followed this gist to manually inject the right color profile settings in a
*.plistfile in system files.
1.2. No HiDPI Support
(Apparently this decision was intentional by Apple). While I can drive my QHD monitor at 2540x1440 resolution, that results in tiny jagged text that is hard to read. In fact, everything looks too small at this resolution. What I do instead is that I drive the same monitor at 1920x1080 HiDPI. On Windows, it’s only a matter of plug-and-play. I connect the monitor and Windows automatically chooses HiDPI (If it doesn’t, I upscale everything by 125%). But Mac has been giving me headaches…
- There used to be a workaround for Intel Macs.
- No workaround for the M1 Mac, here’s why:
The previous workaround required extracting DisplayProductID and DisplayVendorID codes and putting them in a system folder. But this doesn't work on M1 Macs anymore.
- I tried Switchresx to extract the EDID, but the extracted code doesn’t make sense.
The workaround also required sudo mount -uw /, but on macOS Monterey it throws an error now: mount_apfs: volume could not be mounted: Permission denied. mount: / failed with 66.
- To bypass this error, you’d have to disable FileVault forever!
So there’s no real fix for this issue. But two methods that people are using to mitigate the issue at the cost of putting more pressure on their Mac: (1) Use BetterDummy, and (2) Use Switchresx (both have a trial period. Apparently, Switchresx still works after the trial period but you can’t change its configs without purchasing a licesse):
*** (1) Use the BetterDummy app: This is an app that creates a dummy (virtual) screen. Then you mirror it to your external monitor. For example, I have a QHD external monitor with 2560x1440 resolution, but I created a 1920x1080 dummy screen and mirrored it to the external monitor. This way I can keep the Macbook Pro in clamshell mode which turns off the internal display to save CPU and GPU cycle. Disabling the internal disaply also has the advantage that my windows/apps won’t open on a screen that I don’t use.
*** (2) Use the Switchresx app: This is different from BetterDummy in that Switchresx actually creates custom resolutions for monitors. System Integrity Protection (SIP) must be disabled when you want to create custom resolutions and save them, but you can re-enable SIP afterwards. In my case, I created a 3840x2160 resolution for the internal display. After saving and rebooting, that resolution shows up as 1920x1080 “HiDPI” in Switchresx menu. I can then choose that resolution and mirror my external and internal monitors.
- The limitation of this method is that your internal display will have to be on. You can turn the brightness down to zero, but macOS is actually rendering the internal display anyway. For this reason, I decided to go with BetterDummy instead.
- Both apps can run at system login and I had no problem with them after rebooting. Some people mentioned that BetterDummy makes their mouse cursor a bit laggy, but I cannot confirm it now. I think with M1, you won’t have to worry about rendering two screens at a time. In fact, right now my MBP is using 5% CPU and 10% GPU.
- Some people say that the RDM app fixes the issue, but it doesn’t. All it does is it provides you with a list of available resolutions for your displays. But it can’t create HiDPI resolutions for you. You can of course, use RDM after having set up your resolutions using Switchresx or BetterDummy.
Update: macOS 12.4 has (re)added some HiDPI support for <4K displays. But it’s incomplete and doesn’t include the popular 1920*1280 resolution. So I still use BetterDummy.
1.3. Disabled Font Smoothing by Default
Press enter or click to view image in full size
You should use terminal commands, or use a third-party app to re-enable font smoothing. This causes some improvement in text quality, but doesn’t fix the wrong resolution problem and lack of HiDPI.
1.4. Screen Flickering
Don’t know what causes it. Most likely due to MonitorControl app. But we need ControlMonitor to change the brightness of the external monitor using keyboard shortcuts.
- On Windows, ControlMyMonitor does the same job and it works perfectly, especially when used with Autohotkey.
1.5. macOS’s Text Render is Inferior to Windows ClearType
I actually used to use MacType on Windows, a utility app that mimics Mac’s font rendering on Windows. But now I’ve realized Windows texts look more crisp and sharp, at least on my 2K monitor.
- No problems on the internal Retina display, though.
1.6. Can’t Turn Off the Macbook’s Internal Display!
I’m not even kidding here. On Windows, you can choose “Second Screen Only” and it just works. But on Mac, you can’t do it. You can turn off the brightness, but macOS still renders a whole Retina display. This means your Mac’s resources are being wasted on a screen that’s not even visible. Not to mention that the internal display is still a valid display, so some of your apps might open there! If you want to truly turn off the internal display, your only option is to close the lid and use the Macbook Pro in clamshell mode. Of course, I’m not a fan of this because it makes the Mac a bit hotter than usual, something which is not good for the battery.
2. Mac’s poor handling of BlueTooth mouses
2.1. Laggy, Jumpy, and Sluggy Cursor Movement, dating all the way back to at least 2004!
Press enter or click to view image in full size
Two reasons for this. The first reason is not Mac-specific, but the second one is. Reason #1: This is a common problem in mouses with low polling rate. Usually, if the mouse’s polling rate is less than double the monitor’s refresh rate, cursor movements look jumpy. My 2K monitor is at 60 Hz, while Mac’s ProMotion Retina display is 120 Hz. So mouse jumpy-ness is more obvious on the internal monitor.
- You can test the polling rate of your mouse using this website.
- Careful! Safari doesn’t report mouse polling rate correctly on this website. In my and other people’s experience, Safari almost doubles the results, which is misleading. One more reason not to use Safari.
- Solution: Buy a gaming mouse even if you’re not into gaming. I bought Logitech G502 (Wired) which features a 1,000 Hz polling rate (!) and 1 ms response time. There’s also a wireless version of the mouse which is almost twice as expensive. They both have a 25,600 DPI too! My previous Logitech Triathlon m720 had 1,000 DPI and 125 Hz polling rate using the Logitech’s Unifying receiver. Polling rate is less on BlueTooth.
Press enter or click to view image in full size
Reason #2: Apple is notorious for using poor BlueTooth modules which interfere with Wi-Fi. Some people argue that the problem is with the drivers. In my experience, turning off the Wi-Fi fixes most of the choppy/jumpy mouse movements, so there’s definitely some interference happening, and it’s been going on for over 20 years now ðŸ˜
- A workaround suggests disabling IPv6! Crazy as it sounds, it does help a bit with the mouse issue. Except that you cannot disable IPv6 on macOS anymore. If you go to
System Preferences > Network > Wi-Fi > Advanced > TCP/IP > Configure IPv6, you can only chooseLink-local only. - Need to use a terminal command to completely disable IPv6. Some people disable IPv6 in their modem altogether…
- Some say resetting SMC or NVRAM works, but it didn’t solve the issue for me.
- Other workarounds focus on resetting BlueTooth by pressing
Optionand opening the BlueTooth panel in the menu bar. - Except that Apple removed that option in macOS Monterey, so now you have to use
sudo pkill bluetoothdin terminal. Needless to say that this solution doesn't fix the mouse problem anyway, because the problem is somewhere else (Wi-Fi and BlueTooth interference). - Some say it’s good to reset the Mac’s BlueTooth preferences. This can be done via
rm -rf /Library/Preferences/com.apple.Bluetooth/plist. - Finally, some people say using the Mos app helps. I should say that it doesnt’! This app smooths mouse scrolls, not cursor movements. Also, if you want smooth scrolling, you can already do it in the Logitech Options app if you use Logi mouses.
2.2. BlueTooth Mouse and Keyboard Keep Disconnecting upon Awake
- Also, it takes a few seconds for the BlueTooth keyboard and mouse to start working after a reboot. So frustrating when you want to enter password but the keyboard doesn’t work.
3. Mac’s lack of support for CEC (Customer Electronics Control)
3.1. Cannot Control External Monitor’s Speakers in Mac!
To clarify, my display doesn’t have speakers, but it does have a 3.5 mm headphone jack which I’ve been connecting to my speakers. No problems on Windows, but on Mac, there’s an app for that.
- Need Third-Party Apps. I’ve been using the eqMac app. It mostly works, but fails to automatically detect the speakers. For example, whenever I disconnect the HDMI cable, eqMac still redirects the audio to the nonexistent display speaker and crashes. When connecting the HDMI again, eqMac still plays music on MBP’s speakers, so you’d have to manually choose your speakers each time.
Conclusion
Mac is far from “it just works”. In fact, the ridiculous problems that keep popping up with each version of macOS are so annoying that render it unusable for serious work. Unless of course, you’re the type of person who upgrades their monitor, keyboard, and mouse every time you upgrade your Mac. In fact, you probably will have to buy a new USB hub or dock too. In my setup, the perfectly-working USB hub which I use with my Lenovo ThinkPad T490s doesn’t work with Mac. I don’t know what Apple thinks, but this is totally unacceptable. I now intend to use my MBP only as a laptop, not a serious work horse like the T490s on Windows/Linux. Macs are aesthetically attractive, but practically, they’ve been a nightmare, at least for me.
In Short:
(1) Mac does not just work. It does some things perfectly, and it sucks at many others.
(2) As soon as Asahi Linux becomes ready for the M1 Mac, I’ll ditch macOS for good. Asahi is based on Arch anyway, so I’ll get to say “I’m (kinda) using Arch, btw” /jk
(3) Apple should really be ashamed of their shady marketing tactics to push customers to purchase more expensive devices just to get the standard functionality right. The previous problems often don’t exist if you buy Apple’s display, Apple’s Magic Mouse, and Apple’s Magic Keyboard. In other words, “it just works as long as you buy from us”. I’m not a Microsoft fan, but at least MS doesn’t force people to buy certain types of accessories (their insistance on TPM 2.0 for Windows 11 is another story).