Making XMonad Work with Zoom
by Peter Stuart on September 6, 2021
Making XMonad work smoothly with Zoom takes some configuration. Here are some problems I’ve run into, with the solutions I’ve found.
Screen Sharing
If Zoom doesn’t give you the option to share individual windows when screen sharing, you need to use ewmh
from XMonad.Hooks.EwmhDesktops
.Reddit: xmonad window sharing with Zoom
If the “You are screen sharing” / “Stop Share” controls which appear at the top of the screen when you are screen sharing have a black background, and sometimes disappear when you change windows, you need to use a compositor. I use picom.
Floating Notification Windows
Zoom shows notification windows when you join audio (eg. “You are connected to computer audio”) and when people start screen sharing. By default, these windows will be tiled, but they should be floated. Because many of the windows change their title shortly after they are created, matching by title in a custom manageHook
doesn’t work, since that doesn’t watch for changes to window titles. Instead, you need to also observe window title changes using XMonad.Hooks.DynamicProperty
.Ethan Schoonover on the Arch Linux forums
I have a single manageZoomHook
which I include in both my custom manageHook
and my custom handleEventHook
(using dynamicTitle
from XMonad.Hooks.DynamicProperty
):
=
manageZoomHook $
composeAll =? zoomClassName) <&&> shouldFloat <$> title --> doFloat,
[ (className =? zoomClassName) <&&> shouldSink <$> title --> doSink
(className
]where
= "zoom"
zoomClassName =
tileTitles "Zoom - Free Account", -- main window
[ "Zoom - Licensed Account", -- main window
"Zoom", -- meeting window on creation
"Zoom Meeting" -- meeting window shortly after creation
]= title `notElem` tileTitles
shouldFloat title = title `elem` tileTitles
shouldSink title = (ask >>= doF . W.sink) <+> doF W.swapDown
doSink
=
myManageHook
manageZoomHook<+> manageDocks
<+> manageHook defaultConfig
=
myHandleEventHook mconcat
[ dynamicTitle manageZoomHook,
docksEventHook,
handleEventHook defaultConfig ]