Remote work on MacOS - My VNC setup Published the 2020-07-13 Since starting remote work, I created myself a nice and efficient work environment at home, with my bulky desktop computer, the right peripherals and software, and I've only had to deal with a little bit of iOS for testing, so I mostly managed to stay on my computer all day long. I recently finished the back-end part of a decently huge project, and had to start working on the iOS part (which kinda sucks, but hey, that's the job). Working on iOS would be okay, if only the software and hardware ecosystem wasn't so shit, both in UX and in reliability... I tried for a while to work with both (i.e. the work-provided macbook behind me, my computer in front of me, and rotating on my chair), but it's slow, clunky, and I'm *seriously* missing my real keyboard and mouse, shortcuts, and tools. So I tried to find an okay-tier compromise between working on the room heater that is the macbook (which means very regular 5min breaks to let my arms and hands cool down, because this shit *burns*) and not working at all (which, understandably, wouldn't be very well received by my project manager). The solution I ultimately went for is to keep the macbook close to my network setup, plugged to power and to Ethernet (by yet another adapter, kudos to the money-whore team that designed the connectivity on those laptops), and running the standard [Apple Remote Desktop](https://www.apple.com/fr/remotedesktop/index.html) daemon (which is basically a VNC server). ![A photo displaying my macbook pro connected to the power outlet and the desk switch (by Ethernet)](/image/remote-work-on-macos/mac-vnc) For VNC clients, however... I had to spend more time fiddling with "stuff" before I got an okayish setup, mainly due to most VNC clients being crap or hard to use. Here's what I tried and the issues I encountered. For a TL;DR on what I chose, you can jump to bottom right away. ## TigerVNC (fork of TightVNC) My first try was TigerVNC, mainly for its ease of use for logging into a remote VNC server, and its software license. I had *lots* of issues, however, around window scaling (which was just plain awful to configure, I ultimately failed to properly scale my window). A bigger issue I had came with video feedback latency, which could take up to 3 / 4 seconds at times. If that was not already a lot, my TightVNC client ultimately *froze* the image (watching the MBP's screen while wiggling the mouse from the desktop did show it was reacting properly, but without any image feedback at all), and I had to switch to a new TTY to kill the client instance as it completely took over my bspwm environment. So uh, yeah. No. ## RealVNC RealVNC came as a less-than-optimal solution at first glance, due to its commercial / business-oriented website and its non-free license, but at this point, I needed a working VNC client, and surprisingly, there was an AUR package for the viewer part of RealVNC. Well, let's at least try it, right? Overall, the UI is more confusing, and has *lots* of stuff, but the quick-launch panes and additional features will probably come handy for my next workday morning, so I don't have to fiddle around with IPs and authentication data. The video feedback is *much faster* and, overall, also pretty stable. I still can feel the feedback latency, but it's *far* better than TigerVNC, which was just abyssymal in comparison. A very good point given to RealVNC is that it's made to automatically scale the window, keeping the right aspect ratio. Out of the box is better and much more productive! After using it for a bit, I noticed that a few shortcuts were dead (I did not manage to test as throughly with TigerVNC since I pretty much kicked out the solution after 5 minutes, so I cannot offer a comparison stand), but most key presses are passing fine. Since it's a MacOS-based OS, I was confused at first on the switch between Meta and Alt, but using Alt means I can keep my muscle memory in check, as Alt on a standard keyboard is the position for Meta on the MacOS laptop keyboard. For render artifacts, JetBrains AppCode worked really well and was pretty quick to re-paint on-stream. I had to switch to XCode due to the debugger fucking up, however, and the rendering *completely shat itself* (I mean, as usual I guess, at this point everyone knows XCode is just a bad advertisement for Apple's low-quality development environment), which means that scrolling up (did not happen on down scroll) only repainted half the lines and left-side block guides, and *I have no idea how*, but XCode managed to put a floating icon of Safari in front of my editor zone, which left me unable to get rid of it, or actually interact with the content below... ---- TL;DR I used Apple Remote Desktop as VNC server, and RealVNC as VNC client, with Audio forwarding disabled (to avoid consuming bandwidth), and the overall experience was positive, even if XCode shat itself with rendering.