https://github.com/paolostivanin/snoop-guard
Receive a notification whenever your webcam and/or your microphone are being used
https://github.com/paolostivanin/snoop-guard
c microphone notifications privacy webcam
Last synced: 6 months ago
JSON representation
Receive a notification whenever your webcam and/or your microphone are being used
- Host: GitHub
- URL: https://github.com/paolostivanin/snoop-guard
- Owner: paolostivanin
- License: gpl-3.0
- Created: 2016-10-07T20:36:52.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2025-10-22T07:30:15.000Z (9 months ago)
- Last Synced: 2025-10-22T09:26:48.001Z (9 months ago)
- Topics: c, microphone, notifications, privacy, webcam
- Language: C
- Homepage:
- Size: 93.8 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
# Snoop Guard
Receive a notification every time your webcam and/or your microphone are being used.
Project status: active, user-space daemon + CLI.
## Requirements
- GCC or Clang
- glib-2.0, gio-2.0, gobject-2.0
- alsa-lib (for microphone checks)
- libnotify (desktop notifications)
## Build
```
$ mkdir -p build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ cmake --build .
```
Check version:
```
$ ./sg-daemon --version
$ ./sg-ctl --version
```
## Configuration
Snoop Guard reads its configuration from: `$HOME/.config/snoop-guard.ini`
A sample configuration is provided at the repository root as `snoop-guard.ini`.
Copy it to your config directory and adjust values:
```
$ mkdir -p "$HOME/.config"
$ cp ./snoop-guard.ini "$HOME/.config/snoop-guard.ini"
```
Relevant options:
- [server]
- `check_interval`: polling interval in seconds (> 5)
- `notification_timeout`: seconds; 0 = manual dismissal
- `microphone_device`: ALSA device name (e.g., sysdefault). If unset/invalid, mic checks are skipped
- [policy]
- `allow_list`: semicolon-separated process names that will NOT trigger a notification when using the webcam
- `deny_list`: semicolon-separated process names that WILL trigger a notification when using the webcam
Notes:
- The policy lists apply to webcam checks. Microphone process attribution is not available yet.
## Running as a user service (systemd)
This project is intended to run as a per-user systemd service. A unit file is provided: `snoop-guard.service`.
Install and enable:
```
$ mkdir -p "$HOME/.config/systemd/user"
$ cp ./snoop-guard.service "$HOME/.config/systemd/user/"
$ systemctl --user daemon-reload
$ systemctl --user enable --now snoop-guard.service
```
By default the unit expects the binary at `/usr/bin/sg-daemon`. If you run it from a custom location, override ExecStart with a user drop-in:
```
$ systemctl --user edit snoop-guard.service
```
and add:
```
[Service]
ExecStart=
ExecStart=/absolute/path/to/sg-daemon
```
## CLI usage
The `sg-ctl` tool connects over the user session D-Bus to query status and recent events:
- `sg-ctl status`
- `sg-ctl recent [N]`
- `sg-ctl --help`
## Limitations
- Only one microphone device can be monitored at a time.
- We currently cannot reliably attribute which process is using the microphone; allow/deny lists apply to webcam usage only.
## Security
- The provided systemd unit includes modern hardening options while preserving access to `/dev/video*` and `/dev/snd/*`.
- See SECURITY.md for the vulnerability disclosure policy and hardening details.
## License
GPL-3.0-or-later. See LICENSE for details.