powerMonitor and powerSaveBlocker
Energy awareness in the main process.
import { powerMonitor, powerSaveBlocker } from '@owear/core'
powerMonitor
An EventEmitter that auto-connects the native monitor on first use.
powerMonitor.watch(): Promise<void>
powerMonitor.getIdleTime(): Promise<number> // seconds
powerMonitor.getIdleState(threshold: number): Promise<IdleState>
powerMonitor.isOnBatteryPower(): Promise<boolean>
powerMonitor.onBatteryPower: boolean // last known value
type IdleState = 'active' | 'idle' | 'locked' | 'unknown'
Electron-style aliases: powerMonitor.getSystemIdleTime = getIdleTime,
powerMonitor.getSystemIdleState = getIdleState.
Events
powerMonitor.on('suspend', () => {})
powerMonitor.on('resume', () => {})
powerMonitor.on('shutdown', () => {})
powerMonitor.on('lock', () => {})
powerMonitor.on('unlock', () => {})
powerMonitor.on('ac', () => {})
powerMonitor.on('battery', () => {})
In the renderer these arrive as power.suspend, power.resume, power.shutdown,
power.lock, power.unlock, power.ac, power.battery.
powerSaveBlocker
type PowerSaveBlockerType = 'prevent-app-suspension' | 'prevent-display-sleep'
powerSaveBlocker.start(type?: PowerSaveBlockerType): number
powerSaveBlocker.stop(id: number): boolean
powerSaveBlocker.isStarted(id: number): boolean
prevent-display-sleep takes precedence over prevent-app-suspension. The method
returns synchronously with a client id; the native inhibit is started in the
background once the app is ready.
const id = powerSaveBlocker.start('prevent-display-sleep')
// … long export …
powerSaveBlocker.stop(id)
Platform backends (Linux)
- suspend/resume/shutdown, lock/unlock:
logind; - battery: UPower with a
/sys/class/power_supplyfallback; - idle: X11 MIT-SCREEN-SAVER (
libXss,dlopened); Wayland reportsunknown/0; - inhibitors:
org.freedesktop.ScreenSaver.
Windows: PowerBroadcast/WTS/GetLastInputInfo (verify in CI).