Fix Zoom's UI Scaling on Linux

If you use Zoom on Linux, you may have noticed that about a month ago, they pushed an update which scaled the UI elements to be very large. There are a couple of suggestions on reddit for how to address this.

In my case, I have a normal HD display (my laptop's built-in display), and a hi-dpi external monitor. If you just set a single scale factor, it will look good on one, but not the other. Without needing to edit the zoomus.conf file (i.e., keeping the default autoScale=true), I was able to get Zoom to look reasonable by setting two different scale factors in my Zoom launch command.

The launch command (if you installed via flatpak) is here:

.local/share/flatpak/exports/share/applications/us.zoom.Zoom.desktop

and looks like:

[Desktop Entry]
Name=Zoom
Comment=Zoom Video Conferencing
GenericName=Zoom Client for Linux
Exec=env QT_SCREEN_SCALE_FACTORS=eDP-1=0.50;DP-1=1.00 /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=zoom --file-forwarding us.zoom.Zoom @@u %U @@
Icon=us.zoom.Zoom
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Network;InstantMessaging;
MimeType=x-scheme-handler/zoommtg;
StartupWMClass=zoom
X-Flatpak=us.zoom.Zoom

All that is needed is to set the environment variable QT_SCREEN_SCALE_FACTORS in the Exec command. QT_SCREEN_SCALE_FACTORS can take a list of name=value pairs, where the name is the display name as reported by xrandr if you use X11.

You can see which name's to use when you run xrandr and matching what you see with the displays you are using. In my case, eDP-1 is the laptop and my external display is connected to DP-1.

$ xrandr
Screen 0: minimum 320 x 200, current 5360 x 1440, maximum 16384 x 16384
eDP-1 connected 1920x1080+0+360 (normal left inverted right x axis y axis) 309mm x 174mm
   1920x1080     60.00*+  59.97    59.96    59.93
   1680x1050     59.95    59.88
   1600x1024     60.17
   1400x1050     59.98
   1600x900      59.99    59.94    59.95    59.82
   1280x1024     60.02
   1440x900      59.89
   1400x900      59.96    59.88
   1280x960      60.00
   1440x810      60.00    59.97
   1368x768      59.88    59.85
   1360x768      59.80    59.96
   1280x800      59.99    59.97    59.81    59.91
   1152x864      60.00
   1280x720      60.00    59.99    59.86    59.74
   1024x768      60.04    60.00
   960x720       60.00
   928x696       60.05
   896x672       60.01
   1024x576      59.95    59.96    59.90    59.82
   960x600       59.93    60.00
   960x540       59.96    59.99    59.63    59.82
   800x600       60.00    60.32    56.25
   840x525       60.01    59.88
   864x486       59.92    59.57
   800x512       60.17
   700x525       59.98
   800x450       59.95    59.82
   640x512       60.02
   720x450       59.89
   700x450       59.96    59.88
   640x480       60.00    59.94
   720x405       59.51    58.99
   684x384       59.88    59.85
   680x384       59.80    59.96
   640x400       59.88    59.98
   576x432       60.06
   640x360       59.86    59.83    59.84    59.32
   512x384       60.00
   512x288       60.00    59.92
   480x270       59.63    59.82
   400x300       60.32    56.34
   432x243       59.92    59.57
   320x240       60.05
   360x202       59.51    59.13
   320x180       59.84    59.32
DP-1 connected primary 3440x1440+1920+0 (normal left inverted right x axis y axis) 797mm x 333mm
   3440x1440     59.97*+  49.99    29.99
   2560x1440     59.95
   2560x1080     60.00
   1920x1080     60.00    59.94
   1680x1050     59.95
   1600x900      60.00
   1280x1024     75.02    60.02
   1440x900      59.89
   1280x800      59.81
   1152x864      75.00
   1280x720      60.00    59.94
   1024x768      75.03    70.07    60.00
   832x624       74.55
   800x600       72.19    75.00    60.32    56.25
   640x480       75.00    72.81    66.67    60.00    59.94
   720x400       70.08
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)

Relaunching Zoom after setting this fixes the scaling on both displays.