aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/waybar/executable_webcam-status.sh
blob: 1b812a670be008c68b7535595849e08c02142e37 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
# Emit waybar JSON when any /dev/video* device is held open by a process.
# V4L2 capture (firefox, zoom, OBS, etc.) doesn't go through PipeWire's
# privacy portal, so the built-in waybar privacy module never sees it.
set -eu

devs=$(echo /dev/video[0-9]*)
case "$devs" in
  '/dev/video[0-9]*') exit 0 ;;  # no devices present
esac

# fuser exits 0 when at least one device has an opener, 1 otherwise. Stderr
# carries 'PID' for each match; redirect it away.
if fuser $devs >/dev/null 2>&1; then
  printf '{"text":"󰕧","tooltip":"webcam in use","class":"active","alt":"active"}\n'
else
  printf '{"text":"","alt":"idle"}\n'
fi