BlueLock
Lock and unlock your KDE desktop session based on Bluetooth device proximity.
BlueLock monitors a paired Bluetooth device's signal strength. When the device moves out of range the session is locked automatically; when it returns the session is unlocked.
Features
- System tray icon with five states reflecting proximity and lock status
- Configurable RSSI thresholds with hysteresis (separate lock/unlock levels)
- Configurable time durations before acting (avoids triggering on momentary drops)
- D-Bus
org.freedesktop.ScreenSaverfor lock/unlock — no extra tools required - Optional custom lock/unlock shell commands
- RSSI smoothing with a configurable ring buffer
- Real-time signal strength display in the configuration dialog
Requirements
- Python 3.11+
- PyQt6 (
python3-pyqt6-baseon Fedora) - BlueZ (
bluez)
Installation
From source
pip install .
bluelock
Development
make run
RPM (Fedora)
make rpm
sudo rpm -i ~/rpmbuild/RPMS/noarch/bluelock-*.rpm
Usage
- Launch BlueLock — it appears in the system tray.
- Right-click the tray icon and choose Preferences.
- Click Scan to find nearby Bluetooth devices.
- Select your device and click Use.
- Adjust the lock/unlock RSSI thresholds and durations to taste.
- Click OK — monitoring begins immediately.
Tray icon states
| Icon | Meaning |
|---|---|
| Close (blue) | Device is nearby — session is unlocked |
| Far (yellow/amber) | Device is moving away — lock countdown active |
| Gone (red) | Device is absent — session is locked |
| Error (grey) | Initialising, or no signal yet |
| Paused | Monitoring is paused — no automatic lock/unlock |
Thresholds
| Setting | Description |
|---|---|
| Lock RSSI | Session locks when signal drops below this level |
| Lock duration | Signal must stay below the threshold for this many seconds before locking |
| Unlock RSSI | Session unlocks when signal rises above this level |
| Unlock duration | Signal must stay above the threshold for this many seconds before unlocking |
The gap between the lock and unlock thresholds acts as a hysteresis band, preventing the session from oscillating when you are standing right at the boundary.
Configuration file
Saved at ~/.config/bluelock/config.toml.
Development
make test # run tests
make coverage # run tests with coverage report
make lint # run ruff
make format # auto-format with ruff
make build # build wheel and sdist
make release V=X.Y.Z # tag and publish a release
License
Unlicense — public domain.
Metadata
Release files for bluelock 0.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bluelock-0.4.2.tar.gz | 43.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bluelock-0.4.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 75.1 kB
Release files / bluelock-0.4.2.tar.gz
| Download URL | bluelock-0.4.2.tar.gz |
|---|---|
| Size | 43.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f512108e6572b3613a5743f7fd482adcf1e49117794e96b04a70bcd94e945010
|
|
BLAKE2b-256 checksum How to use checksums |
ac7ee37741f967c35d6342668aa39c2bfa918ee2f93723a8185af1fbac4de4e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / bluelock-0.4.2-py3-none-any.whl
| Download URL | bluelock-0.4.2-py3-none-any.whl |
|---|---|
| Size | 31.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
57805e2c02a97cc39b1b5984e850ef0d2b098d3d79ef2e1d563e38e8c78089cc
|
|
BLAKE2b-256 checksum How to use checksums |
f1e5b1c981982bb3eda06f1ac4d0f37ece44848ea802f0d367f8a0c5d560edc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|