Skip to content

Instantly share code, notes, and snippets.

@zcutlip
Created May 24, 2024 23:12
Show Gist options
  • Save zcutlip/43822c48dc9ac5ee61e113222b928783 to your computer and use it in GitHub Desktop.
Save zcutlip/43822c48dc9ac5ee61e113222b928783 to your computer and use it in GitHub Desktop.
Hammerspoon module to kill `legacyScreensaver`
screenSleep = false
screenSaver = false
screenLock = false
--[[
place in ~/.hammerspoon/kill_screensaver/
load from your hammerspoon init.lua:
require "kill_screensaver.kill_ss"
A to kill legacyScreenSaver when the screen saver exits and/or screen wakes
legacyScreenSaver has a memory leak that causes it to consume many gigabytes of memory over
a period of several days. killall -9 legacyScreenSaver seems to be harmless, and allows the memory to be freed
]]
local log = hs.logger.new('main','debug')
function killLegacySaver()
log.i("killing legacyScreenSaver")
local task = hs.task.new("/usr/bin/killall",nil, {"-9", "legacyScreenSaver"})
task:start()
end
function updateSaverStatus()
log.i("Doing kill_ss update")
log.i("screenLock: ", screenLock)
log.i("screenSaver: ", screenSaver)
log.i("screenSleep: ", screenSleep)
if screenSaver == false and screenLock == false and screenSleep == false then
killLegacySaver()
else
log.i("Nothing to update")
end
end
function saverMonitorCallback(event)
if event == hs.caffeinate.watcher.screensaverDidStart then
log.i("screensaverDidStart")
screenSaver = true
elseif event == hs.caffeinate.watcher.screensDidLock then
log.i("screensDidLock")
screenLock = true
elseif event == hs.caffeinate.watcher.screensDidSleep then
log.i("screensDidSleep")
screenSleep = true
elseif event == hs.caffeinate.watcher.screensaverDidStop then
log.i("screensaverDidStop")
screenSaver = false
elseif event == hs.caffeinate.watcher.screensDidUnlock then
log.i("screensDidUnlock")
screenLock = false
elseif hs.caffeinate.watcher.screensDidWake then
log.i("screensDidWake")
screenSleep = false
end
updateSaverStatus()
end
saverWatcher = hs.caffeinate.watcher.new(saverMonitorCallback)
saverWatcher:start()
updateSaverStatus()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment