glanced 0.3.2__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {glanced-0.3.2/src/glanced.egg-info → glanced-0.3.4}/PKG-INFO +8 -2
- {glanced-0.3.2 → glanced-0.3.4}/README.md +7 -1
- {glanced-0.3.2 → glanced-0.3.4}/pyproject.toml +8 -1
- glanced-0.3.4/src/glanced/_data/hooks/repair-glance-lock.hook +51 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/FaceUnlockIndicator.qml +630 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/LockView.qml +230 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/README.md +167 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/Service.qml +780 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/apply.sh +20 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/lockview.diff +27 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/revert.sh +9 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/service.diff +315 -0
- glanced-0.3.4/src/glanced/_data/lock-faceid/unlock-spin.png +0 -0
- glanced-0.3.4/src/glanced/_data/pam/Makefile +21 -0
- glanced-0.3.4/src/glanced/_data/pam/pam_glance.c +148 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/cli.py +50 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/locksetup.py +25 -3
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/pamsetup.py +31 -4
- {glanced-0.3.2 → glanced-0.3.4/src/glanced.egg-info}/PKG-INFO +8 -2
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced.egg-info/SOURCES.txt +13 -0
- glanced-0.3.4/tests/test_packaged_data.py +104 -0
- {glanced-0.3.2 → glanced-0.3.4}/LICENSE +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/NOTICE +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/setup.cfg +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/__init__.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/align.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/attention.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/camera.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/daemon.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/embed.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/enroll.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/gui/__init__.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/gui/enroll_window.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/gui/passphrase.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/ipc.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/landmarker.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/__init__.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/analyzer.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/bezel.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/cues.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/features.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/frame.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/geometry.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/glare.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/planar.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/liveness/scoring.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/livetest.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/models.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/paths.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/pipeline.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/poses.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/preview.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/scan.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/servicesetup.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced/store.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced.egg-info/dependency_links.txt +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced.egg-info/entry_points.txt +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced.egg-info/requires.txt +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/src/glanced.egg-info/top_level.txt +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_attention.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_daemon.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_enroll.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_enroll_passphrase.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_enroll_window.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_gui_available.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_liveness.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_locksetup.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_pamsetup.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_passphrase_dialog.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_paths.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_poses.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_preview.py +0 -0
- {glanced-0.3.2 → glanced-0.3.4}/tests/test_servicesetup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: glanced
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: Face unlock for Linux with real liveness detection
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -89,10 +89,16 @@ From PyPI. `pipx` keeps the daemon in its own environment and puts
|
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
91
|
pipx install 'glanced[runtime,gui]'
|
|
92
|
-
glancectl
|
|
92
|
+
glancectl setup # models, service, PAM, lock indicator
|
|
93
93
|
omarchy plugin add https://github.com/ayandexyz/omarchy-glance.git --enable
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
+
Then click the bar icon and **Enroll**, and `omarchy-restart-shell` to load the
|
|
97
|
+
indicator. `setup` asks for your password once and does what `install-service`,
|
|
98
|
+
`setup-pam` and `setup-lock` do separately; run those instead if you want to
|
|
99
|
+
watch each one. Enrolling is not part of it: it needs your face in front of the
|
|
100
|
+
camera and a passphrase you choose.
|
|
101
|
+
|
|
96
102
|
The `gui` extra is PySide6, for the enrollment window: a camera preview that
|
|
97
103
|
guides the sweep. Leave it out and nothing breaks -- `glancectl status`
|
|
98
104
|
reports the window as unavailable and the plugin's **Enroll** button runs the
|
|
@@ -68,10 +68,16 @@ From PyPI. `pipx` keeps the daemon in its own environment and puts
|
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
pipx install 'glanced[runtime,gui]'
|
|
71
|
-
glancectl
|
|
71
|
+
glancectl setup # models, service, PAM, lock indicator
|
|
72
72
|
omarchy plugin add https://github.com/ayandexyz/omarchy-glance.git --enable
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
+
Then click the bar icon and **Enroll**, and `omarchy-restart-shell` to load the
|
|
76
|
+
indicator. `setup` asks for your password once and does what `install-service`,
|
|
77
|
+
`setup-pam` and `setup-lock` do separately; run those instead if you want to
|
|
78
|
+
watch each one. Enrolling is not part of it: it needs your face in front of the
|
|
79
|
+
camera and a passphrase you choose.
|
|
80
|
+
|
|
75
81
|
The `gui` extra is PySide6, for the enrollment window: a camera preview that
|
|
76
82
|
guides the sweep. Leave it out and nothing breaks -- `glancectl status`
|
|
77
83
|
reports the window as unavailable and the plugin's **Enroll** button runs the
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "glanced"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.4"
|
|
8
8
|
description = "Face unlock for Linux with real liveness detection"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -33,5 +33,12 @@ glancectl = "glanced.cli:main"
|
|
|
33
33
|
[tool.setuptools.packages.find]
|
|
34
34
|
where = ["src"]
|
|
35
35
|
|
|
36
|
+
# The PAM module's source and the lock-screen patch. They are data, not code,
|
|
37
|
+
# but `setup-pam` and `setup-lock` cannot work without them, and a wheel that
|
|
38
|
+
# leaves them out is a face unlock that stops at the lock screen. Kept in step
|
|
39
|
+
# with the canonical top-level copies by tests/test_packaged_data.py.
|
|
40
|
+
[tool.setuptools.package-data]
|
|
41
|
+
glanced = ["_data/pam/*", "_data/lock-faceid/*", "_data/hooks/*"]
|
|
42
|
+
|
|
36
43
|
[tool.pytest.ini_options]
|
|
37
44
|
testpaths = ["tests"]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Installed by `glancectl setup-lock` via `omarchy hook install post-update`.
|
|
3
|
+
#
|
|
4
|
+
# `omarchy update` overwrites the package-owned lock plugin, and with it the
|
|
5
|
+
# Face ID-style indicator that `patches/omarchy-lock-faceid/apply.sh` put
|
|
6
|
+
# there. This runs at the end of that update, while sudo is still
|
|
7
|
+
# authenticated from its package step, and puts the indicator back.
|
|
8
|
+
#
|
|
9
|
+
# It only executes files from the root-owned copy the glanced package installs
|
|
10
|
+
# under /usr/share/glanced. A warm sudo timestamp must never be spent running
|
|
11
|
+
# whatever is sitting in a user-writable checkout; from a source checkout this
|
|
12
|
+
# hook can only tell you to rerun `glancectl setup-lock` yourself.
|
|
13
|
+
set -u
|
|
14
|
+
|
|
15
|
+
lock="${OMARCHY_PATH:-/usr/share/omarchy}/shell/plugins/lock/Service.qml"
|
|
16
|
+
[[ -f $lock ]] || lock=/usr/share/omarchy/shell/plugins/lock/Service.qml
|
|
17
|
+
[[ -f $lock ]] || exit 0 # no lock plugin here; nothing to repair
|
|
18
|
+
|
|
19
|
+
grep -q 'faceMessagePrefix' "$lock" && exit 0 # still patched
|
|
20
|
+
|
|
21
|
+
patch_dir=/usr/share/glanced/lock-faceid
|
|
22
|
+
notify() {
|
|
23
|
+
echo "glanced: $1"
|
|
24
|
+
command -v notify-send >/dev/null && notify-send -u critical "Glance face unlock" "$1" || true
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
# Root-owned, not writable by anyone else, on every path component we execute.
|
|
28
|
+
trusted() {
|
|
29
|
+
local f
|
|
30
|
+
for f in "$patch_dir" "$patch_dir/apply.sh"; do
|
|
31
|
+
[[ -e $f ]] || return 1
|
|
32
|
+
[[ $(stat -c '%u %a' "$f") =~ ^0\ [0-9]?[0-9][0145][0145]$ ]] || return 1
|
|
33
|
+
done
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if ! trusted; then
|
|
37
|
+
notify "The lock screen indicator was reverted by the update. Run: glancectl setup-lock"
|
|
38
|
+
exit 0
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
if ! sudo -n true 2>/dev/null; then
|
|
42
|
+
notify "The lock screen indicator was reverted by the update and sudo is not available here. Run: glancectl setup-lock"
|
|
43
|
+
exit 0
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if sudo -n bash "$patch_dir/apply.sh" >/dev/null; then
|
|
47
|
+
echo "glanced: lock screen indicator re-applied after update."
|
|
48
|
+
else
|
|
49
|
+
notify "Re-applying the lock screen indicator failed. Run: glancectl setup-lock"
|
|
50
|
+
fi
|
|
51
|
+
exit 0
|