diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index d3f723c..e0475e2 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -71,7 +71,7 @@ body:
options:
- AUR (Arch, CachyOS, EndeavourOS, Manjaro)
- Fedora package
- - Debian or Kubuntu package
+ - Debian or Ubuntu package
- Built from source
- Other
validations:
@@ -80,8 +80,8 @@ body:
id: system
attributes:
label: System
- description: Distribution, desktop and session (Wayland or X11).
- placeholder: CachyOS, Plasma 6.4, Wayland
+ description: Distribution, desktop and its version, and on Hyprland or Niri the lock screen.
+ placeholder: CachyOS, Hyprland 0.56, hyprlock
validations:
required: true
- type: textarea
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 11109b1..7f9a76d 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -10,7 +10,7 @@ jobs:
check:
name: build, tests and shellcheck
runs-on: ubuntu-latest
- # Arch has every Plasma 6 and Qt 6 development package this needs, and the
+ # Arch has every Qt 6 and KDE Frameworks 6 package this needs, and the
# newest OpenCV, which is the one that moved things around.
container: archlinux:latest
steps:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ad61ad6..bad4754 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -24,12 +24,12 @@ jobs:
strategy:
matrix:
include:
- # Plasma 6 arrived in Debian with trixie.
+ # Qt 6 and KDE Frameworks 6 arrived in Debian with trixie.
- name: Debian 13
image: debian:trixie
codename: trixie
suffix: "~deb13"
- - name: Kubuntu 26.04
+ - name: Ubuntu 26.04
image: ubuntu:26.04
codename: resolute
suffix: "~ubuntu26.04"
@@ -239,7 +239,7 @@ jobs:
- name: Debian 13
image: debian:trixie
codename: trixie
- - name: Kubuntu 26.04
+ - name: Ubuntu 26.04
image: ubuntu:26.04
codename: resolute
container: ${{ matrix.image }}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 34c8baf..225a46c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@ endif()
include(GNUInstallDirs)
-option(FU_BUILD_AGENT "Build the Plasma agent (bubble, lock screen, set up window)" ON)
+option(FU_BUILD_AGENT "Build the agent (bubble, lock screen, set up window)" ON)
option(FU_BUILD_PAM "Build the PAM module" ON)
option(FU_BUILD_TESTS "Build the tests" ON)
@@ -150,7 +150,9 @@ if(FU_BUILD_AGENT)
src/agent/bubblewindow.cpp
src/agent/bubblecontroller.cpp
src/agent/lockcontroller.cpp
+ src/agent/lockwatcher.cpp
src/agent/inputwatcher.cpp
+ src/agent/wayland.cpp
src/agent/enrollcontroller.cpp
)
target_include_directories(face-unlock-agent PRIVATE src/agent)
diff --git a/README.md b/README.md
index b8ac1ba..fcbe56c 100644
--- a/README.md
+++ b/README.md
@@ -4,10 +4,11 @@
face-unlock
-Face ID for KDE Plasma.
+Face ID for Linux.
- Unlock the lock screen, sudo and admin prompts with your face.
+ Unlock the lock screen, sudo and admin prompts with your face.
+ On KDE Plasma, GNOME, Hyprland and Niri.
@@ -26,7 +27,7 @@
-
+
## Install
@@ -52,7 +53,7 @@ sudo dnf install face-unlock
-Debian, Kubuntu
+Debian, Ubuntu
```bash
codename="$(sed -n 's/^VERSION_CODENAME=//p' /etc/os-release)"
@@ -66,7 +67,19 @@ sudo apt update && sudo apt install face-unlock
-Needs Plasma 6 on Wayland and a camera. Updates come with your system updates.
+Updates come with your system updates. It needs a camera and one of these
+desktops, on Wayland:
+
+| | Lock screen | sudo and admin prompts | Bubble |
+|---|---|---|---|
+| KDE Plasma 6 | ✅ | ✅ | ✅ above the lock screen too |
+| GNOME | ✅ | ✅ | ❌ GNOME does not allow it |
+| Hyprland | ✅ with hyprlock or swaylock | ✅ | ✅ once the lock screen is gone |
+| Niri | ✅ with swaylock or hyprlock | ✅ | ✅ once the lock screen is gone |
+
+On Hyprland and Niri, admin prompts and setting up a face need a polkit agent
+(for example hyprpolkitagent). Hyprland without uwsm does not start the lock
+screen part by itself: the menu shows the line to add to `hyprland.conf`.
## How to use
diff --git a/doc/face-unlock.1.scd b/doc/face-unlock.1.scd
index 604cc4c..72b1091 100644
--- a/doc/face-unlock.1.scd
+++ b/doc/face-unlock.1.scd
@@ -2,7 +2,7 @@ face-unlock(1)
# NAME
-face-unlock - face unlock for KDE Plasma
+face-unlock - face unlock for Plasma, GNOME, Hyprland and Niri
# SYNOPSIS
@@ -11,14 +11,14 @@ face-unlock - face unlock for KDE Plasma
# DESCRIPTION
Look at the screen and it unlocks, the way a phone does. The lock screen, sudo
-in a terminal and the admin password prompts of Plasma can all take a face
-instead of a password. A photo of somebody on a phone or tablet does not get
+in a terminal and the admin password prompts can all take a face instead of a
+password, on KDE Plasma, GNOME, Hyprland and Niri (see *DESKTOPS*). A photo of somebody on a phone or tablet does not get
in, and with the strict photo check a printed one does not either.
A bubble at the top of the screen shows what is going on: it drops down when
the camera starts looking, the face in it looks around, and when it recognises
-somebody two green rings spin and land around a tick. It shows above the lock
-screen too. *Animation speed* makes all of it faster or slower.
+somebody two green rings spin and land around a tick. On Plasma it shows above
+the lock screen too. *Animation speed* makes all of it faster or slower.
Run without a command it shows an interactive menu. Everything it can be told
is reachable from there; the settings files behind it do not need to be edited
@@ -71,7 +71,7 @@ It is a convenience, not a security upgrade. See *HOW SAFE IS THIS*.
with nothing to do.
*face-unlock-agent*
- Runs in the Plasma session as a user service
+ Runs in the desktop session as a user service
(_face-unlock-agent.service_). It watches the lock screen, asks the
daemon to scan when somebody comes back, unlocks the session when the face
matches, draws the bubble, and is the setup window.
@@ -171,14 +171,16 @@ prompts off, or face unlock altogether.
Plasma's lock screen runs a fingerprint stack next to the password, but starts
it once per lock, gives up for good after the first failure and labels it for
-fingerprints. So face unlock does not go through the lock screen's PAM at all.
-The agent watches for the screen to lock (org.freedesktop.ScreenSaver) and
-scans when somebody comes back:
+fingerprints. GNOME's, hyprlock and swaylock only ask their PAM stack once the
+password is typed. So face unlock does not go through the lock screen's PAM at
+all. The agent watches for the screen to lock (see *DESKTOPS*) and scans when
+somebody comes back:
- on any key or mouse movement after the screen locked, once 1.5 seconds have
passed (the key that locked it does not count). Enter on the empty password
field is a key like any other. This works while a video or an app keeps the
- screen on, too (ext_idle_notifier_v1, input notification);
+ screen on, too (ext_idle_notifier_v1 with its input notification, and
+ Mutter's IdleMonitor on GNOME);
- when the machine wakes from sleep;
- right after locking, if *Scan right after locking* is on. Off by
default: whoever locks their screen on purpose is usually still in front of
@@ -188,8 +190,12 @@ After a scan that did not get anybody in, the next one waits for the person to
be still for two seconds and then touch something again, so typing the password
does not start a scan with every key.
-Unlocked through logind, the lock screen cuts off its own password prompt and
-counts that as a wrong password. After a face unlock the daemon resets the
+When the face matches, the agent unlocks the session the way its lock screen
+wants it: through logind, as *loginctl unlock-session* does, on Plasma and
+GNOME, and with SIGUSR1 for hyprlock and swaylock.
+
+Unlocked through logind, Plasma's lock screen cuts off its own password prompt
+and counts that as a wrong password. After a face unlock the daemon resets the
failed logins of *pam_faillock*(8), as a correct password does, so face unlocks
never lock the account.
@@ -198,6 +204,41 @@ The bubble is a layer-shell surface that KWin keeps above the lock screen
file asks for it, which is
_io.github.loonixtools.face-unlock-agent.desktop_.
+# DESKTOPS
+
+All of them on Wayland. sudo and admin prompts work the same everywhere.
+
+*KDE Plasma 6*
+ Everything. The lock is seen through org.freedesktop.ScreenSaver and
+ logind, and the bubble shows above the lock screen.
+
+*GNOME*
+ The lock is seen through logind, where GNOME sets *LockedHint*. There is
+ no bubble: GNOME has no layer-shell, and a normal window can neither stay
+ on top nor pick its place.
+
+*Hyprland*
+ With hyprlock or swaylock. Hyprland does not set logind's *LockedHint*,
+ so the agent looks for the lock screen among the user's processes once
+ a second. The lock screen covers the bubble, which shows the tick once it
+ is gone. Hyprland only starts the agent's user service when it runs
+ under uwsm. Without uwsm, this line in _~/.config/hypr/hyprland.conf_
+ starts it:
+
+ exec-once = systemctl --user start face-unlock-agent.service
+
+*Niri*
+ With swaylock or hyprlock. niri sets logind's *LockedHint* for any lock
+ screen, but only these two can be unlocked by another program. The
+ bubble works as on Hyprland.
+
+Other lock screens (gtklock, waylock, the ones built into shells) cannot be
+unlocked by another program. There face unlock only does sudo and admin
+prompts.
+
+Hyprland and Niri come without a polkit agent. One has to run for admin
+prompts and for setting up a face, for example hyprpolkitagent.
+
# SUDO AND ADMIN PROMPTS
Turned on under *Settings*, one line goes in front of the service's PAM stack:
@@ -263,12 +304,13 @@ _$XDG_RUNTIME_DIR/face-unlock/agent.socket_
# REQUIREMENTS
-KDE Plasma 6 on Wayland, a camera, OpenCV 4.5.4 or newer with its DNN module,
-Qt 6, LayerShellQt, KI18n, systemd, polkit and Linux-PAM.
+KDE Plasma 6, GNOME, Hyprland or Niri on Wayland, a camera, OpenCV 4.5.4 or
+newer with its DNN module, Qt 6, LayerShellQt, KI18n, systemd, polkit and
+Linux-PAM.
# SEE ALSO
-*loginctl*(1), *pam*(8), *polkit*(8), *systemctl*(1)
+*loginctl*(1), *pam*(8), *polkit*(8), *systemctl*(1), *swaylock*(1)
# AUTHORS
diff --git a/packaging/README.md b/packaging/README.md
index 05d8e3f..b728156 100644
--- a/packaging/README.md
+++ b/packaging/README.md
@@ -17,14 +17,14 @@ The AUR package lives in [Felitendo/PKGBUILDS](https://github.com/Felitendo/PKGB
Its CI notices a new GitHub release, updates the checksum and pushes to the AUR.
Unlike the shell-only LoonixTools, this one is compiled. The packages are per
-architecture (amd64 and x86_64), and they need the Plasma 6 and Qt 6
+architecture (amd64 and x86_64), and they need the Qt 6 and KDE Frameworks 6
development packages to build: Debian 13 (trixie) and current Fedora have
them. The Debian package's library dependencies are read off the binaries by
`dpkg-shlibdeps`; RPM does the same on its own.
The program uses Qt's private API, so a package only fits the Qt it was built
against. The `.deb` is therefore built twice, in Debian 13 and in Ubuntu 26.04
-(for Kubuntu), with a suffix on the version (`~deb13`, `~ubuntu26.04`), and each
+(for Ubuntu and Kubuntu), with a suffix on the version (`~deb13`, `~ubuntu26.04`), and each
gets an APT repository of its own: `deb/trixie` and `deb/resolute`. The RPM is
built on the current Fedora.
diff --git a/packaging/deb/control b/packaging/deb/control
index f984b48..bd4bed1 100644
--- a/packaging/deb/control
+++ b/packaging/deb/control
@@ -5,13 +5,13 @@ Priority: optional
Architecture: @ARCH@
Maintainer: Felitendo
Depends: @DEPENDS@, bash (>= 4.2), coreutils, grep, sed, mawk | gawk, systemd, polkitd | policykit-1, qml6-module-qtquick, qml6-module-qtquick-shapes, qml6-module-qtquick-effects, qml6-module-qtquick-window, qml6-module-qtqml-workerscript
-Recommends: gettext-base, kscreenlocker
+Recommends: gettext-base
Homepage: https://github.com/LoonixTools/face-unlock
-Description: face unlock for KDE Plasma
+Description: face unlock for Plasma, GNOME, Hyprland and Niri
Look at the screen and it unlocks, the way a phone does. The lock screen,
- sudo in a terminal and the admin password prompts of Plasma can take a face
- instead of a password. A bubble at the top of the screen, above the lock
- screen too, shows the face being looked for, recognised or refused.
+ sudo in a terminal and the admin password prompts can take a face instead
+ of a password, on KDE Plasma, GNOME, Hyprland and Niri. A bubble at the top
+ of the screen shows the face being looked for, recognised or refused.
.
A photo on a phone, a tablet or a glossy print is refused by its
reflection and its straight edges. The strict photo check also wants a sign
diff --git a/packaging/pages/index.html b/packaging/pages/index.html
index 9586455..24d6a0e 100644
--- a/packaging/pages/index.html
+++ b/packaging/pages/index.html
@@ -64,9 +64,9 @@
face-unlock
- Face ID for KDE Plasma: look at the screen and it unlocks. The lock screen,
- sudo and the admin prompts can take a face instead of a password, and a photo
- of somebody is not enough.
+ Face ID for Linux: look at the screen and it unlocks. The lock screen, sudo
+ and the admin prompts can take a face instead of a password, on KDE Plasma,
+ GNOME, Hyprland and Niri. A photo of somebody is not enough.
@@ -85,7 +85,7 @@ echo "deb [signed-by=/etc/apt/keyrings/face-unlock.gpg] @BASEURL@/deb/trixie ./"
sudo apt update
sudo apt install face-unlock
-
Kubuntu 26.04
+Ubuntu 26.04
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL @BASEURL@/KEY.gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/face-unlock.gpg
@@ -94,7 +94,7 @@ echo "deb [signed-by=/etc/apt/keyrings/face-unlock.gpg] @BASEURL@/deb/resolute .
sudo apt update
sudo apt install face-unlock
-Fedora 44 (KDE Plasma)
+Fedora 44
sudo curl -fsSL -o /etc/yum.repos.d/face-unlock.repo \
@BASEURL@/face-unlock.repo
sudo dnf install face-unlock
diff --git a/packaging/rpm/face-unlock.spec b/packaging/rpm/face-unlock.spec
index 133ed1e..428f055 100644
--- a/packaging/rpm/face-unlock.spec
+++ b/packaging/rpm/face-unlock.spec
@@ -5,7 +5,7 @@
Name: face-unlock
Version: %{upstream_version}
Release: 1%{?dist}
-Summary: Face unlock for KDE Plasma
+Summary: Face unlock for Plasma, GNOME, Hyprland and Niri
# The program is GPL; the two networks it ships are MIT (YuNet) and
# Apache-2.0 (SFace).
@@ -45,13 +45,12 @@ Requires: polkit
Requires: systemd
Requires: qt6-qtdeclarative
Recommends: /usr/bin/gettext
-Recommends: kscreenlocker
%description
Look at the screen and it unlocks, the way a phone does. The lock screen, sudo
-in a terminal and the admin password prompts of Plasma can take a face instead
-of a password. A bubble at the top of the screen, above the lock screen too,
-shows the face being looked for, recognised or refused.
+in a terminal and the admin password prompts can take a face instead of a
+password, on KDE Plasma, GNOME, Hyprland and Niri. A bubble at the top of the
+screen shows the face being looked for, recognised or refused.
A photo on a phone, a tablet or a glossy print is refused by its reflection and
its straight edges. The strict photo check also wants a sign of life (a blink,
diff --git a/po/de.po b/po/de.po
index 8610322..88e4de6 100644
--- a/po/de.po
+++ b/po/de.po
@@ -5,9 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.0\n"
-"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/"
-"issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-23 22:32+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: German\n"
@@ -32,10 +31,10 @@ msgstr "Prüfen mit: systemctl status %s"
#: src/face-unlock:67
msgid ""
"Setting up a face needs the camera picture on screen. Run this inside your "
-"Plasma session."
+"desktop session."
msgstr ""
"Zum Einrichten eines Gesichts muss das Kamerabild auf dem Bildschirm zu "
-"sehen sein. Starte das in deiner Plasma-Sitzung."
+"sehen sein. Starte das in deiner Desktop-Sitzung."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -60,8 +59,8 @@ msgstr "Es wurde kein Gesicht hinzugefügt."
msgid "First, set up your face."
msgstr "Richte zuerst dein Gesicht ein."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Einstellung konnte nicht gespeichert werden."
@@ -69,104 +68,104 @@ msgstr "Einstellung konnte nicht gespeichert werden."
msgid "Could not start the lock screen agent."
msgstr "Der Sperrbildschirm-Dienst konnte nicht gestartet werden."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
msgstr ""
"Keine systemd-Benutzersitzung, daher wurde der Sperrbildschirm-Dienst nicht "
"gestartet."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"Die Gesichtsentsperrung ist an. Sperre den Bildschirm und schau ihn an, um "
"es auszuprobieren."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Sie kann auch sudo und Admin-Abfragen übernehmen. Siehe Einstellungen."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Die Gesichtsentsperrung ist aus. Deine Gesichter bleiben erhalten; löschen "
"kannst du sie unter Gesichter."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Es ist noch kein Gesicht eingerichtet."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "an"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "aus"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s Aufnahmen, %s dazugelernt"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Welches Gesicht? Die IDs zeigt `%s faces`."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Gelöscht."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Aufruf: face-unlock [Befehl]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Befehle:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Gesichtsentsperrung einschalten"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Ausschalten (Gesichter bleiben erhalten)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Gesicht hinzufügen"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Gesichter auflisten"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Ein Gesicht löschen"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "In die Kamera schauen und sehen, was sie sieht"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Anzeigen, was eingeschaltet ist"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Diese Hilfe anzeigen"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Die Version anzeigen"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Ohne Befehl wird ein interaktives Menü angezeigt."
-#: src/face-unlock:203
+#: src/face-unlock:204
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -174,42 +173,42 @@ msgstr ""
"Starte das als dein eigener Benutzer, nicht als root. Wenn nötig, wird nach "
"deinem Passwort gefragt."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Unbekannter Befehl: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "nie"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "gerade eben"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "vor 1 Minute"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "vor %d Minuten"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "vor 1 Stunde"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "vor %d Stunden"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "vor 1 Tag"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "vor %d Tagen"
@@ -249,7 +248,7 @@ msgstr ""
msgid "The camera could not be used."
msgstr "Die Kamera konnte nicht benutzt werden."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Die Erkennungsmodelle fehlen. Installiere das Paket neu."
@@ -353,11 +352,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[j/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "AN"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "AUS"
@@ -398,7 +397,7 @@ msgstr "langsam"
msgid "%s seconds"
msgstr "%s Sekunden"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "automatisch"
@@ -418,8 +417,8 @@ msgstr "läuft nicht"
msgid "Turning face unlock on again starts it."
msgstr "Die Gesichtsentsperrung erneut einzuschalten startet ihn."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Gesichter"
@@ -443,32 +442,44 @@ msgstr "Kamera"
msgid "Lock screen"
msgstr "Sperrbildschirm"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Admin-Abfragen"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Foto-Prüfung"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "Pausiert"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "noch %d Minuten, oder bis das Passwort benutzt wird"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Letzte Entsperrung"
-#: src/lib/menu.sh:300
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "Der Sperrbildschirm-Dienst läuft nicht."
+
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME lässt andere Programme nicht über seinen Fenstern erscheinen, daher "
+"gibt es auf GNOME keine Bubble."
+
+#: src/lib/menu.sh:312
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -476,7 +487,7 @@ msgstr ""
"Entsperrt den Sperrbildschirm, wenn er dein Gesicht sieht. Aus: Dort geht "
"nur dein Passwort."
-#: src/lib/menu.sh:301
+#: src/lib/menu.sh:313
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -484,7 +495,7 @@ msgstr ""
"Scannt, wenn du auf dem Sperrbildschirm eine Taste drückst oder die Maus "
"bewegst, und wenn der Computer aufwacht."
-#: src/lib/menu.sh:302
+#: src/lib/menu.sh:314
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -492,7 +503,7 @@ msgstr ""
"Scannt, sobald der Bildschirm gesperrt wird. Normalerweise aus: Sperrst du "
"selbst, würde er gleich wieder entsperren."
-#: src/lib/menu.sh:303
+#: src/lib/menu.sh:315
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -500,26 +511,26 @@ msgstr ""
"sudo nimmt dein Gesicht statt des Passworts. Passt es nicht, tippst du wie "
"gewohnt dein Passwort."
-#: src/lib/menu.sh:304
+#: src/lib/menu.sh:316
msgid ""
-"The password windows of Plasma and apps, for example when you install "
+"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
msgstr ""
-"Die Passwort-Fenster von Plasma und Apps, zum Beispiel beim Installieren. "
-"Passt das Gesicht nicht, tippst du dein Passwort."
+"Die Passwort-Fenster deines Desktops und von Apps, zum Beispiel beim "
+"Installieren. Passt das Gesicht nicht, tippst du dein Passwort."
-#: src/lib/menu.sh:305
+#: src/lib/menu.sh:317
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Du musst blinzeln oder den Kopf leicht drehen. Das hält auch ausgedruckte "
"Fotos auf."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Keine Prüfung. Nur zum Ausprobieren einer Kamera."
-#: src/lib/menu.sh:307
+#: src/lib/menu.sh:319
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -527,22 +538,22 @@ msgstr ""
"Hält Fotos auf Handy, Tablet oder Hochglanzpapier auf. Blinzeln ist nicht "
"nötig. Ein matter Ausdruck kann durchkommen."
-#: src/lib/menu.sh:308
+#: src/lib/menu.sh:320
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Seltener Verwechslungen, aber mit Brille oder bei schlechtem Licht erkennt "
"es dich vielleicht nicht."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Erkennt dich leichter, aber auch jemanden, der dir sehr ähnlich sieht."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "Der Standard. Passt für die meisten."
-#: src/lib/menu.sh:311
+#: src/lib/menu.sh:323
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -550,7 +561,7 @@ msgstr ""
"Deine Augen müssen offen sein und auf den Bildschirm schauen. So entsperrt "
"es nicht, wenn du wegschaust oder schläfst."
-#: src/lib/menu.sh:312
+#: src/lib/menu.sh:324
msgid ""
"Automatic takes the first normal camera. After a change, set up your face "
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
@@ -559,11 +570,11 @@ msgstr ""
"neu einrichten. Eine Infrarot-Kamera braucht ihr Licht (linux-enable-ir-"
"emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Wie lange die Kamera nach deinem Gesicht sucht, bevor sie aufgibt."
-#: src/lib/menu.sh:314
+#: src/lib/menu.sh:326
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -571,7 +582,7 @@ msgstr ""
"Nach einem sicheren Treffer merkt es sich, wie du gerade aussiehst. So musst "
"du nach neuer Frisur oder Brille nichts neu einrichten."
-#: src/lib/menu.sh:315
+#: src/lib/menu.sh:327
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -579,82 +590,82 @@ msgstr ""
"Kein Scan bei zugeklapptem Laptop, zum Beispiel am Schreibtisch mit externem "
"Bildschirm."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Die Bubble oben am Bildschirm zeigt, was die Kamera gerade macht."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Eine kleine Pille mit einem Schloss, das aufgeht."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
"Eine Insel mit einem Gesicht, das sich umschaut, danach Ringe und ein Haken."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "Wie schnell sich die Bubble bewegt."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Zeigt die Bubble auch, wenn sudo oder eine Admin-Abfrage dein Gesicht scannt."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatisch (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(Infrarot)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(nicht angeschlossen)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Einstellungen"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ auswählen ←→ oder Leertaste: ändern q: zurück"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "für alle Nutzer, fragt nach deinem Passwort"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Hoch/Runter: wählen, Leertaste: an/aus, r: umbenennen, d: löschen, a: "
"hinzufügen, q: zurück"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Es ist noch kein Gesicht eingerichtet. Drück a, um eins hinzuzufügen."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Neuer Name:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "„%s“ löschen?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Gesichtsentsperrung ein- oder ausschalten"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Ausprobieren"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Beenden"
@@ -687,6 +698,14 @@ msgstr "Keine gültige Einstellung: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Dafür kann es nicht verwendet werden: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland startet den Sperrbildschirm-Dienst nicht von selbst. Füge diese "
+"Zeile in %s ein:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Mit dem Gesicht entsperren"
@@ -860,23 +879,23 @@ msgstr ""
msgid "The face could not be added (%1)."
msgstr "Das Gesicht konnte nicht hinzugefügt werden (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Gesichtsentsperrung für KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr "Gesichtsentsperrung für Sperrbildschirm, sudo und Admin-Abfragen"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Ein Gesicht einrichten."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Wie das neue Gesicht heißen soll."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Die Animationen der Bubble einmal abspielen."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Bubble-Stil für die Demo: full oder minimal."
@@ -898,27 +917,27 @@ msgstr ""
msgid "Face not recognised."
msgstr "Gesicht nicht erkannt."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Gesichtsentsperrung einrichten"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Gesichtsentsperrung"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Bestätige, dass du es bist"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Alles bereit"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "Die Einrichtung wurde nicht abgeschlossen"
-#: src/agent/qml/Enroll.qml:121
+#: src/agent/qml/Enroll.qml:126
msgid ""
"Look at the camera, then move your head slowly in a circle. Your face is "
"turned into numbers on this computer and never stored as a picture."
@@ -926,7 +945,7 @@ msgstr ""
"Schau in die Kamera und beweg dann den Kopf langsam im Kreis. Dein Gesicht "
"wird auf diesem Computer in Zahlen umgewandelt und nie als Bild gespeichert."
-#: src/agent/qml/Enroll.qml:123
+#: src/agent/qml/Enroll.qml:128
msgid ""
"Lock the screen and look at it to try it out. You can add a second look, "
"with glasses for example, from the menu."
@@ -934,26 +953,26 @@ msgstr ""
"Sperre den Bildschirm und schau ihn an, um es auszuprobieren. Einen zweiten "
"Look, zum Beispiel mit Brille, kannst du im Menü hinzufügen."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Name (optional)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Abbrechen"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Jetzt abschließen"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Nochmal versuchen"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Los geht's"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Fertig"
diff --git a/po/es.po b/po/es.po
index 8b4d546..f3424f3 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:55+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Spanish\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "El servicio de desbloqueo facial tiene que activarse una vez en este equipo. Para ello hace falta tu contraseña."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"El servicio de desbloqueo facial tiene que activarse una vez en este equipo. "
+"Para ello hace falta tu contraseña."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Compruébalo con: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Para configurar una cara, la imagen de la cámara tiene que verse en pantalla. Ejecuta esto dentro de tu sesión de Plasma."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Para configurar una cara, la imagen de la cámara tiene que verse en "
+"pantalla. Ejecuta esto dentro de tu sesión de escritorio."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -39,7 +47,8 @@ msgstr "La cara está configurada."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "El desbloqueo facial sigue desactivado. Actívalo con [1] o `%s enable`."
+msgstr ""
+"El desbloqueo facial sigue desactivado. Actívalo con [1] o `%s enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +58,8 @@ msgstr "No se añadió ninguna cara."
msgid "First, set up your face."
msgstr "Primero, configura tu cara."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "No se pudo guardar el ajuste."
@@ -58,137 +67,149 @@ msgstr "No se pudo guardar el ajuste."
msgid "Could not start the lock screen agent."
msgstr "No se pudo iniciar el agente de la pantalla de bloqueo."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "No hay sesión de usuario de systemd, así que no se inició el agente de la pantalla de bloqueo."
+msgstr ""
+"No hay sesión de usuario de systemd, así que no se inició el agente de la "
+"pantalla de bloqueo."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "El desbloqueo facial está activado. Bloquea la pantalla y mírala para probarlo."
+msgstr ""
+"El desbloqueo facial está activado. Bloquea la pantalla y mírala para "
+"probarlo."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
-msgstr "También funciona con sudo y las solicitudes de administrador. Consulta Ajustes."
+msgstr ""
+"También funciona con sudo y las solicitudes de administrador. Consulta "
+"Ajustes."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "El desbloqueo facial está desactivado. Tus caras se conservan; bórralas en Caras."
+msgstr ""
+"El desbloqueo facial está desactivado. Tus caras se conservan; bórralas en "
+"Caras."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Todavía no hay ninguna cara configurada."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "activado"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "desactivado"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s muestras, %s aprendidas"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "¿Qué cara? Consulta `%s faces` para ver los ID."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Borrado."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Uso: face-unlock [comando]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Comandos:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Activar el desbloqueo facial"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Desactivarlo (las caras se conservan)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Añadir una cara"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Listar las caras"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Borrar una cara"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Mirar a la cámara y ver lo que ve"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Mostrar qué está activado"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Mostrar esta ayuda"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Mostrar la versión"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Sin comando se muestra un menú interactivo."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Ejecuta esto con tu propio usuario, no como root. Pide tu contraseña cuando la necesita."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Ejecuta esto con tu propio usuario, no como root. Pide tu contraseña cuando "
+"la necesita."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Comando desconocido: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "nunca"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "ahora mismo"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "hace 1 minuto"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "hace %d minutos"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "hace 1 hora"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "hace %d horas"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "hace 1 día"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "hace %d días"
@@ -218,14 +239,17 @@ msgid "No face in view."
msgstr "No hay ninguna cara a la vista."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "El desbloqueo facial está en pausa tras demasiados intentos. Desbloquea una vez con tu contraseña."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"El desbloqueo facial está en pausa tras demasiados intentos. Desbloquea una "
+"vez con tu contraseña."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "No se pudo usar la cámara."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Faltan los modelos de reconocimiento. Reinstala el paquete."
@@ -317,19 +341,23 @@ msgid "Sign of life: %s"
msgstr "Señal de vida: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Demasiados intentos. El desbloqueo facial está en pausa hasta que desbloquees con tu contraseña."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Demasiados intentos. El desbloqueo facial está en pausa hasta que "
+"desbloquees con tu contraseña."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[s/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "ACTIVADO"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "DESACTIVADO"
@@ -370,7 +398,7 @@ msgstr "lenta"
msgid "%s seconds"
msgstr "%s segundos"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "automática"
@@ -390,8 +418,8 @@ msgstr "detenido"
msgid "Turning face unlock on again starts it."
msgstr "Al volver a activar el desbloqueo facial, se inicia."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Caras"
@@ -415,167 +443,235 @@ msgstr "Cámara"
msgid "Lock screen"
msgstr "Pantalla de bloqueo"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Solicitudes de administrador"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Detección de fotos"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "En pausa"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "%d minutos más, o hasta que se use la contraseña"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Último desbloqueo"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Desbloquea la pantalla de bloqueo cuando ve tu cara. Desactivado: ahí solo sirve tu contraseña."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "El agente de la pantalla de bloqueo no se está ejecutando."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Escanea cuando pulsas una tecla o mueves el ratón en la pantalla de bloqueo, y cuando el equipo se despierta."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME no deja que otros programas se muestren sobre sus ventanas, así que en "
+"GNOME no hay burbuja."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Escanea en cuanto se bloquea la pantalla. Desactivado por defecto: si la bloqueas tú, se desbloquearía enseguida."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Desbloquea la pantalla de bloqueo cuando ve tu cara. Desactivado: ahí solo "
+"sirve tu contraseña."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo usa tu cara en lugar de la contraseña. Si no coincide, escribes la contraseña como siempre."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Escanea cuando pulsas una tecla o mueves el ratón en la pantalla de bloqueo, "
+"y cuando el equipo se despierta."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Las ventanas de contraseña de Plasma y de las aplicaciones, por ejemplo al instalar software. Si no coincide, escribes la contraseña."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Escanea en cuanto se bloquea la pantalla. Desactivado por defecto: si la "
+"bloqueas tú, se desbloquearía enseguida."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Tienes que parpadear o girar un poco la cabeza. Esto también frena las fotos impresas."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo usa tu cara en lugar de la contraseña. Si no coincide, escribes la "
+"contraseña como siempre."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"Las ventanas de contraseña de tu escritorio y de las aplicaciones, por "
+"ejemplo al instalar software. Si no coincide, escribes la contraseña."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Tienes que parpadear o girar un poco la cabeza. Esto también frena las fotos "
+"impresas."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Sin comprobación. Solo para probar una cámara."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Frena fotos en un móvil, una tableta o papel brillante. No hace falta parpadear. Una foto impresa en papel mate puede pasar."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Frena fotos en un móvil, una tableta o papel brillante. No hace falta "
+"parpadear. Una foto impresa en papel mate puede pasar."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Menos coincidencias erróneas, pero puede que no te reconozca con gafas o con poca luz."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Menos coincidencias erróneas, pero puede que no te reconozca con gafas o con "
+"poca luz."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
-msgstr "Te reconoce con más facilidad, pero también a alguien que se parezca mucho a ti."
+msgstr ""
+"Te reconoce con más facilidad, pero también a alguien que se parezca mucho a "
+"ti."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "El valor por defecto. Adecuado para la mayoría."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Tus ojos tienen que estar abiertos y mirando a la pantalla. Así no se desbloquea mientras miras a otro lado o duermes."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Tus ojos tienen que estar abiertos y mirando a la pantalla. Así no se "
+"desbloquea mientras miras a otro lado o duermes."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Automática usa la primera cámara normal. Tras un cambio, vuelve a configurar tu cara. Una cámara infrarroja necesita su luz encendida (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Automática usa la primera cámara normal. Tras un cambio, vuelve a configurar "
+"tu cara. Una cámara infrarroja necesita su luz encendida (linux-enable-ir-"
+"emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Cuánto tiempo busca la cámara tu cara antes de rendirse."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Tras una coincidencia segura, recuerda tu aspecto actual. Así, un corte de pelo nuevo o unas gafas no piden configurar de nuevo."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Tras una coincidencia segura, recuerda tu aspecto actual. Así, un corte de "
+"pelo nuevo o unas gafas no piden configurar de nuevo."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Sin escaneo mientras el portátil está cerrado, por ejemplo en un escritorio con una pantalla externa."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Sin escaneo mientras el portátil está cerrado, por ejemplo en un escritorio "
+"con una pantalla externa."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
-msgstr "La burbuja en la parte superior de la pantalla muestra lo que hace la cámara."
+msgstr ""
+"La burbuja en la parte superior de la pantalla muestra lo que hace la cámara."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Una pequeña pastilla con un candado que se abre."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
-msgstr "Una isla con una cara que mira alrededor, luego anillos y una marca de verificación."
+msgstr ""
+"Una isla con una cara que mira alrededor, luego anillos y una marca de "
+"verificación."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "La velocidad a la que se mueve la burbuja."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "Muestra la burbuja también cuando sudo o una solicitud de administrador escanea tu cara."
+msgstr ""
+"Muestra la burbuja también cuando sudo o una solicitud de administrador "
+"escanea tu cara."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automática (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(infrarroja)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(no conectada)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Ajustes"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ elegir ←→ o Espacio: cambiar q: volver"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "para todos los usuarios, pide tu contraseña"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Arriba/Abajo: elegir, Espacio: activar/desactivar, r: renombrar, d: borrar, a: añadir, q: volver"
+msgstr ""
+"Arriba/Abajo: elegir, Espacio: activar/desactivar, r: renombrar, d: borrar, "
+"a: añadir, q: volver"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Todavía no hay ninguna cara configurada. Pulsa a para añadir una."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Nuevo nombre:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "¿Borrar «%s»?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Activar o desactivar el desbloqueo facial"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Probarlo"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Salir"
@@ -607,6 +703,14 @@ msgstr "Ajuste no válido: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "No se puede usar para este servicio: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland no inicia por sí solo el agente de la pantalla de bloqueo. Añade "
+"esta línea a %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Desbloquear con tu cara"
@@ -765,33 +869,38 @@ msgstr "Ha tardado demasiado. Inténtalo de nuevo, con buena luz."
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "El servicio de desbloqueo facial no está en marcha. Activa primero el desbloqueo facial."
+msgstr ""
+"El servicio de desbloqueo facial no está en marcha. Activa primero el "
+"desbloqueo facial."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
-msgstr "La cámara está ocupada con otro escaneo. Inténtalo de nuevo en un momento."
+msgstr ""
+"La cámara está ocupada con otro escaneo. Inténtalo de nuevo en un momento."
#: src/agent/enrollcontroller.cpp:205
msgid "The face could not be added (%1)."
msgstr "No se pudo añadir la cara (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Desbloqueo facial para KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr ""
+"Desbloqueo facial para la pantalla de bloqueo, sudo y las solicitudes de "
+"administrador"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Configurar una cara."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Cómo llamar a la nueva cara."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Reproducir una vez las animaciones de la burbuja."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Estilo de burbuja para la demo: full o minimal."
@@ -805,60 +914,70 @@ msgstr "Parpadea o gira un poco la cabeza."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "El desbloqueo facial está en pausa tras demasiados intentos. Usa tu contraseña."
+msgstr ""
+"El desbloqueo facial está en pausa tras demasiados intentos. Usa tu "
+"contraseña."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Cara no reconocida."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Configurar el desbloqueo facial"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Desbloqueo facial"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Confirma que eres tú"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Todo listo"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "La configuración no terminó"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Mira a la cámara y luego mueve la cabeza despacio en círculo. Tu cara se convierte en números en este equipo y nunca se guarda como imagen."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Mira a la cámara y luego mueve la cabeza despacio en círculo. Tu cara se "
+"convierte en números en este equipo y nunca se guarda como imagen."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Bloquea la pantalla y mírala para probarlo. Puedes añadir un segundo aspecto, con gafas por ejemplo, desde el menú."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Bloquea la pantalla y mírala para probarlo. Puedes añadir un segundo "
+"aspecto, con gafas por ejemplo, desde el menú."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Nombre (opcional)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Cancelar"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Terminar ahora"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Reintentar"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Empezar"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Hecho"
diff --git a/po/face-unlock.pot b/po/face-unlock.pot
index 5e43dc0..9b6b418 100644
--- a/po/face-unlock.pot
+++ b/po/face-unlock.pot
@@ -6,9 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
-"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/"
-"issues\n"
-"POT-Creation-Date: 2026-09-24 10:56+0200\n"
+"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -31,7 +30,7 @@ msgstr ""
#: src/face-unlock:67
msgid ""
"Setting up a face needs the camera picture on screen. Run this inside your "
-"Plasma session."
+"desktop session."
msgstr ""
#: src/face-unlock:71
@@ -55,8 +54,8 @@ msgstr ""
msgid "First, set up your face."
msgstr ""
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr ""
@@ -64,139 +63,139 @@ msgstr ""
msgid "Could not start the lock screen agent."
msgstr ""
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
msgstr ""
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr ""
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr ""
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr ""
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr ""
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr ""
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr ""
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr ""
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr ""
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr ""
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr ""
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr ""
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr ""
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr ""
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr ""
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr ""
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr ""
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr ""
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr ""
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr ""
-#: src/face-unlock:203
+#: src/face-unlock:204
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
msgstr ""
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr ""
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr ""
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr ""
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr ""
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr ""
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr ""
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr ""
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr ""
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr ""
@@ -234,7 +233,7 @@ msgstr ""
msgid "The camera could not be used."
msgstr ""
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr ""
@@ -336,11 +335,11 @@ msgstr ""
msgid "[y/N]"
msgstr ""
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr ""
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr ""
@@ -381,7 +380,7 @@ msgstr ""
msgid "%s seconds"
msgstr ""
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr ""
@@ -401,8 +400,8 @@ msgstr ""
msgid "Turning face unlock on again starts it."
msgstr ""
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr ""
@@ -426,189 +425,199 @@ msgstr ""
msgid "Lock screen"
msgstr ""
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr ""
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr ""
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr ""
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr ""
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr ""
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr ""
-#: src/lib/menu.sh:300
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr ""
+
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+
+#: src/lib/menu.sh:312
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
msgstr ""
-#: src/lib/menu.sh:301
+#: src/lib/menu.sh:313
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
msgstr ""
-#: src/lib/menu.sh:302
+#: src/lib/menu.sh:314
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
msgstr ""
-#: src/lib/menu.sh:303
+#: src/lib/menu.sh:315
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
msgstr ""
-#: src/lib/menu.sh:304
+#: src/lib/menu.sh:316
msgid ""
-"The password windows of Plasma and apps, for example when you install "
+"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
msgstr ""
-#: src/lib/menu.sh:305
+#: src/lib/menu.sh:317
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr ""
-#: src/lib/menu.sh:307
+#: src/lib/menu.sh:319
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
msgstr ""
-#: src/lib/menu.sh:308
+#: src/lib/menu.sh:320
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr ""
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr ""
-#: src/lib/menu.sh:311
+#: src/lib/menu.sh:323
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
msgstr ""
-#: src/lib/menu.sh:312
+#: src/lib/menu.sh:324
msgid ""
"Automatic takes the first normal camera. After a change, set up your face "
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
msgstr ""
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr ""
-#: src/lib/menu.sh:314
+#: src/lib/menu.sh:326
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
msgstr ""
-#: src/lib/menu.sh:315
+#: src/lib/menu.sh:327
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
msgstr ""
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr ""
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr ""
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr ""
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr ""
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr ""
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr ""
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr ""
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr ""
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr ""
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr ""
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr ""
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr ""
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr ""
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr ""
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr ""
@@ -640,6 +649,12 @@ msgstr ""
msgid "Not a service this can be used for: %s"
msgstr ""
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr ""
@@ -808,23 +823,23 @@ msgstr ""
msgid "The face could not be added (%1)."
msgstr ""
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr ""
-
-#: src/agent/main.cpp:88
-msgid "Set up a face."
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
#: src/agent/main.cpp:89
-msgid "What to call the new face."
+msgid "Set up a face."
msgstr ""
#: src/agent/main.cpp:90
+msgid "What to call the new face."
+msgstr ""
+
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr ""
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr ""
@@ -844,58 +859,58 @@ msgstr ""
msgid "Face not recognised."
msgstr ""
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr ""
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr ""
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr ""
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr ""
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr ""
-#: src/agent/qml/Enroll.qml:121
+#: src/agent/qml/Enroll.qml:126
msgid ""
"Look at the camera, then move your head slowly in a circle. Your face is "
"turned into numbers on this computer and never stored as a picture."
msgstr ""
-#: src/agent/qml/Enroll.qml:123
+#: src/agent/qml/Enroll.qml:128
msgid ""
"Lock the screen and look at it to try it out. You can add a second look, "
"with glasses for example, from the menu."
msgstr ""
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr ""
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr ""
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr ""
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr ""
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr ""
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 86a8f2e..3bd1b33 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:55+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: French\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "Le service de déverrouillage facial doit être activé une fois sur cet ordinateur. Cela demande votre mot de passe."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"Le service de déverrouillage facial doit être activé une fois sur cet "
+"ordinateur. Cela demande votre mot de passe."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,12 +29,17 @@ msgid "Check it with: systemctl status %s"
msgstr "Vérifiez avec : systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Pour configurer un visage, l'image de la caméra doit s'afficher à l'écran. Lancez ceci dans votre session Plasma."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Pour configurer un visage, l'image de la caméra doit s'afficher à l'écran. "
+"Lancez ceci dans votre session de bureau."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
-msgstr "La fenêtre de configuration est ouverte. Suivez les étapes qui s'y trouvent."
+msgstr ""
+"La fenêtre de configuration est ouverte. Suivez les étapes qui s'y trouvent."
#: src/face-unlock:80
msgid "The face is set up."
@@ -39,7 +48,9 @@ msgstr "Le visage est configuré."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "Le déverrouillage facial est encore désactivé. Activez-le avec [1] ou `%s enable`."
+msgstr ""
+"Le déverrouillage facial est encore désactivé. Activez-le avec [1] ou `%s "
+"enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +60,8 @@ msgstr "Aucun visage n'a été ajouté."
msgid "First, set up your face."
msgstr "Configurez d'abord votre visage."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Impossible d'enregistrer le réglage."
@@ -58,137 +69,149 @@ msgstr "Impossible d'enregistrer le réglage."
msgid "Could not start the lock screen agent."
msgstr "Impossible de démarrer l'agent de l'écran de verrouillage."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "Pas de session utilisateur systemd, l'agent de l'écran de verrouillage n'a donc pas été démarré."
+msgstr ""
+"Pas de session utilisateur systemd, l'agent de l'écran de verrouillage n'a "
+"donc pas été démarré."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "Le déverrouillage facial est activé. Verrouillez l'écran et regardez-le pour essayer."
+msgstr ""
+"Le déverrouillage facial est activé. Verrouillez l'écran et regardez-le pour "
+"essayer."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
-msgstr "Il fonctionne aussi pour sudo et les demandes d'administration. Voir Réglages."
+msgstr ""
+"Il fonctionne aussi pour sudo et les demandes d'administration. Voir "
+"Réglages."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "Le déverrouillage facial est désactivé. Vos visages sont conservés ; supprimez-les dans Visages."
+msgstr ""
+"Le déverrouillage facial est désactivé. Vos visages sont conservés ; "
+"supprimez-les dans Visages."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Aucun visage n'est encore configuré."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "activé"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "désactivé"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s échantillons, %s appris"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Quel visage ? Voir `%s faces` pour les identifiants."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Supprimé."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Utilisation : face-unlock [commande]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Commandes :"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Activer le déverrouillage facial"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Le désactiver (les visages sont conservés)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Ajouter un visage"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Lister les visages"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Supprimer un visage"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Regarder la caméra et voir ce qu'elle voit"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Afficher ce qui est activé"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Afficher cette aide"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Afficher la version"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Sans commande, un menu interactif s'affiche."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Lancez ceci avec votre propre utilisateur, pas en root. Le mot de passe est demandé quand il le faut."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Lancez ceci avec votre propre utilisateur, pas en root. Le mot de passe est "
+"demandé quand il le faut."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Commande inconnue : %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "jamais"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "à l'instant"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "il y a 1 minute"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "il y a %d minutes"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "il y a 1 heure"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "il y a %d heures"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "il y a 1 jour"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "il y a %d jours"
@@ -218,14 +241,17 @@ msgid "No face in view."
msgstr "Aucun visage visible."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "Le déverrouillage facial est en pause après trop d'essais. Déverrouillez une fois avec votre mot de passe."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"Le déverrouillage facial est en pause après trop d'essais. Déverrouillez une "
+"fois avec votre mot de passe."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "La caméra n'a pas pu être utilisée."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Les modèles de reconnaissance sont absents. Réinstallez le paquet."
@@ -252,7 +278,8 @@ msgstr "Une erreur s'est produite (%s)."
#: src/lib/daemon.sh:127
msgid "Look at the camera. Blink once, or turn your head a little."
-msgstr "Regardez la caméra. Clignez des yeux une fois ou tournez un peu la tête."
+msgstr ""
+"Regardez la caméra. Clignez des yeux une fois ou tournez un peu la tête."
#: src/lib/daemon.sh:137
msgid "Face found."
@@ -260,7 +287,8 @@ msgstr "Visage trouvé."
#: src/lib/daemon.sh:141
msgid "Recognised. Now blink once, or turn your head a little."
-msgstr "Reconnu. Clignez maintenant des yeux une fois ou tournez un peu la tête."
+msgstr ""
+"Reconnu. Clignez maintenant des yeux une fois ou tournez un peu la tête."
#: src/lib/daemon.sh:142
msgid "Look at the screen."
@@ -317,19 +345,23 @@ msgid "Sign of life: %s"
msgstr "Signe de vie : %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Trop d'essais. Le déverrouillage facial est en pause jusqu'à ce que vous déverrouilliez avec votre mot de passe."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Trop d'essais. Le déverrouillage facial est en pause jusqu'à ce que vous "
+"déverrouilliez avec votre mot de passe."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[o/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "ACTIVÉ"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "DÉSACTIVÉ"
@@ -370,7 +402,7 @@ msgstr "lent"
msgid "%s seconds"
msgstr "%s secondes"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "automatique"
@@ -390,8 +422,8 @@ msgstr "arrêté"
msgid "Turning face unlock on again starts it."
msgstr "Réactiver le déverrouillage facial le démarre."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Visages"
@@ -415,167 +447,235 @@ msgstr "Caméra"
msgid "Lock screen"
msgstr "Écran de verrouillage"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Demandes d'administration"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Contrôle anti-photo"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "En pause"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "encore %d minutes, ou jusqu'à l'utilisation du mot de passe"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Dernier déverrouillage"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Déverrouille l'écran de verrouillage quand il voit votre visage. Désactivé : seul votre mot de passe fonctionne."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "L'agent de l'écran de verrouillage ne tourne pas."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Scanne quand vous appuyez sur une touche ou bougez la souris sur l'écran de verrouillage, et au réveil de l'ordinateur."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME ne laisse pas d'autres programmes s'afficher au-dessus de ses "
+"fenêtres, il n'y a donc pas de bulle sous GNOME."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Scanne dès que l'écran se verrouille. Désactivé par défaut : si vous verrouillez vous-même, il se déverrouillerait aussitôt."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Déverrouille l'écran de verrouillage quand il voit votre visage. Désactivé : "
+"seul votre mot de passe fonctionne."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo prend votre visage au lieu du mot de passe. Sinon, vous tapez le mot de passe comme d'habitude."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Scanne quand vous appuyez sur une touche ou bougez la souris sur l'écran de "
+"verrouillage, et au réveil de l'ordinateur."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Les fenêtres de mot de passe de Plasma et des applications, par exemple pour installer un logiciel. Sinon, vous tapez le mot de passe."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Scanne dès que l'écran se verrouille. Désactivé par défaut : si vous "
+"verrouillez vous-même, il se déverrouillerait aussitôt."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Vous devez cligner des yeux ou tourner un peu la tête. Cela bloque aussi les photos imprimées."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo prend votre visage au lieu du mot de passe. Sinon, vous tapez le mot de "
+"passe comme d'habitude."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"Les fenêtres de mot de passe de votre bureau et des applications, par "
+"exemple pour installer un logiciel. Sinon, vous tapez le mot de passe."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Vous devez cligner des yeux ou tourner un peu la tête. Cela bloque aussi les "
+"photos imprimées."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Aucun contrôle. Seulement pour essayer une caméra."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Bloque les photos sur un téléphone, une tablette ou du papier brillant. Pas besoin de cligner des yeux. Une photo imprimée mate peut passer."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Bloque les photos sur un téléphone, une tablette ou du papier brillant. Pas "
+"besoin de cligner des yeux. Une photo imprimée mate peut passer."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Moins d'erreurs de correspondance, mais il peut ne pas vous reconnaître avec des lunettes ou sous une mauvaise lumière."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Moins d'erreurs de correspondance, mais il peut ne pas vous reconnaître avec "
+"des lunettes ou sous une mauvaise lumière."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
-msgstr "Vous reconnaît plus facilement, mais aussi quelqu'un qui vous ressemble beaucoup."
+msgstr ""
+"Vous reconnaît plus facilement, mais aussi quelqu'un qui vous ressemble "
+"beaucoup."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "La valeur par défaut. Convient à la plupart des gens."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Vos yeux doivent être ouverts et tournés vers l'écran. Ainsi, rien ne se déverrouille quand vous regardez ailleurs ou dormez."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Vos yeux doivent être ouverts et tournés vers l'écran. Ainsi, rien ne se "
+"déverrouille quand vous regardez ailleurs ou dormez."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Automatique prend la première caméra normale. Après un changement, reconfigurez votre visage. Une caméra infrarouge doit avoir sa lumière allumée (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Automatique prend la première caméra normale. Après un changement, "
+"reconfigurez votre visage. Une caméra infrarouge doit avoir sa lumière "
+"allumée (linux-enable-ir-emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Combien de temps la caméra cherche votre visage avant d'abandonner."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Après une correspondance sûre, il retient votre apparence actuelle. Une nouvelle coupe ou des lunettes ne demandent donc pas de nouvelle configuration."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Après une correspondance sûre, il retient votre apparence actuelle. Une "
+"nouvelle coupe ou des lunettes ne demandent donc pas de nouvelle "
+"configuration."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Pas de scan quand le portable est fermé, par exemple à un bureau avec un écran externe."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Pas de scan quand le portable est fermé, par exemple à un bureau avec un "
+"écran externe."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "La bulle en haut de l'écran montre ce que fait la caméra."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Une petite pilule avec un cadenas qui s'ouvre."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
-msgstr "Un îlot avec un visage qui regarde autour de lui, puis des anneaux et une coche."
+msgstr ""
+"Un îlot avec un visage qui regarde autour de lui, puis des anneaux et une "
+"coche."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "La vitesse à laquelle la bulle bouge."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "Affiche aussi la bulle quand sudo ou une demande d'administration scanne votre visage."
+msgstr ""
+"Affiche aussi la bulle quand sudo ou une demande d'administration scanne "
+"votre visage."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatique (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(infrarouge)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(non branchée)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Réglages"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ choisir ←→ ou Espace : changer q : retour"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "pour tous, demande votre mot de passe"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Haut/Bas : choisir, Espace : activer/désactiver, r : renommer, d : supprimer, a : ajouter, q : retour"
+msgstr ""
+"Haut/Bas : choisir, Espace : activer/désactiver, r : renommer, d : "
+"supprimer, a : ajouter, q : retour"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Aucun visage n'est encore configuré. Appuyez sur a pour en ajouter un."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Nouveau nom :"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Supprimer « %s » ?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Activer ou désactiver le déverrouillage facial"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Essayer"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Quitter"
@@ -591,7 +691,8 @@ msgstr "Il n'y a pas de configuration PAM pour %s sur ce système."
#: src/lib/system.sh:47
msgid "This needs root, and neither sudo, run0 nor doas is installed."
-msgstr "Il faut les droits root, mais ni sudo, ni run0, ni doas n'est installé."
+msgstr ""
+"Il faut les droits root, mais ni sudo, ni run0, ni doas n'est installé."
#: src/lib/system.sh:56
msgid "This command has to run as root."
@@ -607,6 +708,14 @@ msgstr "Réglage non valide : %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Ne peut pas servir pour ce service : %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland ne démarre pas l'agent de l'écran de verrouillage tout seul. "
+"Ajoutez cette ligne à %s :"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Déverrouiller avec votre visage"
@@ -757,7 +866,8 @@ msgstr "La caméra n'a pas pu être utilisée : %1"
#: src/agent/enrollcontroller.cpp:197
msgid "The face recognition models are missing. Reinstall the package."
-msgstr "Les modèles de reconnaissance faciale sont absents. Réinstallez le paquet."
+msgstr ""
+"Les modèles de reconnaissance faciale sont absents. Réinstallez le paquet."
#: src/agent/enrollcontroller.cpp:199
msgid "That took too long. Try again, in good light."
@@ -765,7 +875,9 @@ msgstr "Cela a pris trop de temps. Réessayez, avec une bonne lumière."
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "Le service de déverrouillage facial n'est pas lancé. Activez d'abord le déverrouillage facial."
+msgstr ""
+"Le service de déverrouillage facial n'est pas lancé. Activez d'abord le "
+"déverrouillage facial."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
@@ -775,23 +887,25 @@ msgstr "La caméra est occupée par un autre scan. Réessayez dans un instant."
msgid "The face could not be added (%1)."
msgstr "Le visage n'a pas pu être ajouté (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Déverrouillage facial pour KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr ""
+"Déverrouillage facial pour l'écran de verrouillage, sudo et les demandes "
+"d'administration"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Configurer un visage."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Le nom du nouveau visage."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Jouer une fois les animations de la bulle."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Style de bulle pour la démo : full ou minimal."
@@ -805,60 +919,71 @@ msgstr "Clignez des yeux ou tournez un peu la tête."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "Le déverrouillage facial est en pause après trop d'essais. Utilisez votre mot de passe."
+msgstr ""
+"Le déverrouillage facial est en pause après trop d'essais. Utilisez votre "
+"mot de passe."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Visage non reconnu."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Configurer le déverrouillage facial"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Déverrouillage facial"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Confirmez que c'est vous"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Tout est prêt"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "La configuration n'est pas terminée"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Regardez la caméra, puis bougez lentement la tête en cercle. Votre visage est transformé en nombres sur cet ordinateur et n'est jamais enregistré comme image."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Regardez la caméra, puis bougez lentement la tête en cercle. Votre visage "
+"est transformé en nombres sur cet ordinateur et n'est jamais enregistré "
+"comme image."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Verrouillez l'écran et regardez-le pour essayer. Vous pouvez ajouter une deuxième apparence, avec des lunettes par exemple, depuis le menu."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Verrouillez l'écran et regardez-le pour essayer. Vous pouvez ajouter une "
+"deuxième apparence, avec des lunettes par exemple, depuis le menu."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Nom (facultatif)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Annuler"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Terminer maintenant"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Réessayer"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Commencer"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Terminé"
diff --git a/po/it.po b/po/it.po
index 9eaf2a5..5fef2a0 100644
--- a/po/it.po
+++ b/po/it.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:55+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Italian\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "Il servizio di sblocco con il volto va attivato una volta su questo computer. Serve la tua password."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"Il servizio di sblocco con il volto va attivato una volta su questo "
+"computer. Serve la tua password."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Controlla con: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Per configurare un volto, l'immagine della fotocamera deve comparire sullo schermo. Esegui questo comando nella tua sessione Plasma."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Per configurare un volto, l'immagine della fotocamera deve comparire sullo "
+"schermo. Esegui questo comando nella tua sessione desktop."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -39,7 +47,8 @@ msgstr "Il volto è configurato."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "Lo sblocco con il volto è ancora disattivato. Attivalo con [1] o `%s enable`."
+msgstr ""
+"Lo sblocco con il volto è ancora disattivato. Attivalo con [1] o `%s enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +58,8 @@ msgstr "Nessun volto aggiunto."
msgid "First, set up your face."
msgstr "Per prima cosa, configura il tuo volto."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Impossibile salvare l'impostazione."
@@ -58,137 +67,147 @@ msgstr "Impossibile salvare l'impostazione."
msgid "Could not start the lock screen agent."
msgstr "Impossibile avviare l'agente della schermata di blocco."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "Nessuna sessione utente di systemd, quindi l'agente della schermata di blocco non è stato avviato."
+msgstr ""
+"Nessuna sessione utente di systemd, quindi l'agente della schermata di "
+"blocco non è stato avviato."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "Lo sblocco con il volto è attivo. Blocca lo schermo e guardalo per provarlo."
+msgstr ""
+"Lo sblocco con il volto è attivo. Blocca lo schermo e guardalo per provarlo."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
-msgstr "Funziona anche con sudo e le richieste di amministratore. Vedi Impostazioni."
+msgstr ""
+"Funziona anche con sudo e le richieste di amministratore. Vedi Impostazioni."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "Lo sblocco con il volto è disattivato. I tuoi volti restano salvati; eliminali in Volti."
+msgstr ""
+"Lo sblocco con il volto è disattivato. I tuoi volti restano salvati; "
+"eliminali in Volti."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Nessun volto ancora configurato."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "attivo"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "disattivo"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s campioni, %s appresi"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Quale volto? Vedi `%s faces` per gli ID."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Eliminato."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Uso: face-unlock [comando]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Comandi:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Attiva lo sblocco con il volto"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Disattivalo (i volti restano salvati)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Aggiungi un volto"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Elenca i volti"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Elimina un volto"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Guarda la fotocamera e vedi cosa vede"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Mostra cosa è attivo"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Mostra questo aiuto"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Mostra la versione"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Senza comando viene mostrato un menu interattivo."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Esegui questo con il tuo utente, non come root. Chiede la password quando serve."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Esegui questo con il tuo utente, non come root. Chiede la password quando "
+"serve."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Comando sconosciuto: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "mai"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "proprio ora"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 minuto fa"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d minuti fa"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 ora fa"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d ore fa"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 giorno fa"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d giorni fa"
@@ -218,14 +237,17 @@ msgid "No face in view."
msgstr "Nessun volto inquadrato."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "Lo sblocco con il volto è in pausa dopo troppi tentativi. Sblocca una volta con la tua password."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"Lo sblocco con il volto è in pausa dopo troppi tentativi. Sblocca una volta "
+"con la tua password."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "Impossibile usare la fotocamera."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Mancano i modelli di riconoscimento. Reinstalla il pacchetto."
@@ -252,7 +274,8 @@ msgstr "Qualcosa è andato storto (%s)."
#: src/lib/daemon.sh:127
msgid "Look at the camera. Blink once, or turn your head a little."
-msgstr "Guarda la fotocamera. Sbatti le palpebre una volta o gira un po' la testa."
+msgstr ""
+"Guarda la fotocamera. Sbatti le palpebre una volta o gira un po' la testa."
#: src/lib/daemon.sh:137
msgid "Face found."
@@ -317,19 +340,23 @@ msgid "Sign of life: %s"
msgstr "Segno di vita: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Troppi tentativi. Lo sblocco con il volto è in pausa finché non sblocchi con la tua password."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Troppi tentativi. Lo sblocco con il volto è in pausa finché non sblocchi con "
+"la tua password."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[s/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "ATTIVO"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "DISATTIVO"
@@ -370,7 +397,7 @@ msgstr "lenta"
msgid "%s seconds"
msgstr "%s secondi"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "automatica"
@@ -390,8 +417,8 @@ msgstr "non in esecuzione"
msgid "Turning face unlock on again starts it."
msgstr "Riattivare lo sblocco con il volto lo avvia."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Volti"
@@ -415,167 +442,231 @@ msgstr "Fotocamera"
msgid "Lock screen"
msgstr "Schermata di blocco"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Richieste di amministratore"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Controllo foto"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "In pausa"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "ancora per %d minuti, o finché non si usa la password"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Ultimo sblocco"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Sblocca la schermata di blocco quando vede il tuo volto. Disattivo: lì funziona solo la password."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "L'agente della schermata di blocco non è in esecuzione."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Esegue la scansione quando premi un tasto o muovi il mouse sulla schermata di blocco, e quando il computer si riattiva."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME non permette ad altri programmi di comparire sopra le sue finestre, "
+"quindi su GNOME non c'è la bolla."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Esegue la scansione appena lo schermo si blocca. Disattivo di norma: se lo blocchi tu, si sbloccherebbe subito."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Sblocca la schermata di blocco quando vede il tuo volto. Disattivo: lì "
+"funziona solo la password."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo usa il tuo volto al posto della password. Se non corrisponde, digiti la password come al solito."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Esegue la scansione quando premi un tasto o muovi il mouse sulla schermata "
+"di blocco, e quando il computer si riattiva."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Le finestre della password di Plasma e delle app, per esempio quando installi software. Se non corrisponde, digiti la password."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Esegue la scansione appena lo schermo si blocca. Disattivo di norma: se lo "
+"blocchi tu, si sbloccherebbe subito."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Devi sbattere le palpebre o girare un po' la testa. Questo ferma anche le foto stampate."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo usa il tuo volto al posto della password. Se non corrisponde, digiti la "
+"password come al solito."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"Le finestre della password del tuo desktop e delle app, per esempio quando "
+"installi software. Se non corrisponde, digiti la password."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Devi sbattere le palpebre o girare un po' la testa. Questo ferma anche le "
+"foto stampate."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Nessun controllo. Solo per provare una fotocamera."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Ferma le foto su un telefono, un tablet o carta lucida. Non serve sbattere le palpebre. Una foto stampata opaca può passare."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Ferma le foto su un telefono, un tablet o carta lucida. Non serve sbattere "
+"le palpebre. Una foto stampata opaca può passare."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Meno scambi di persona, ma potrebbe non riconoscerti con gli occhiali o con poca luce."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Meno scambi di persona, ma potrebbe non riconoscerti con gli occhiali o con "
+"poca luce."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Ti riconosce più facilmente, ma anche qualcuno che ti somiglia molto."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "Il valore predefinito. Va bene per la maggior parte delle persone."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "I tuoi occhi devono essere aperti e rivolti allo schermo. Così non si sblocca mentre guardi altrove o dormi."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"I tuoi occhi devono essere aperti e rivolti allo schermo. Così non si "
+"sblocca mentre guardi altrove o dormi."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Automatica usa la prima fotocamera normale. Dopo un cambio, configura di nuovo il tuo volto. Una fotocamera a infrarossi ha bisogno della sua luce (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Automatica usa la prima fotocamera normale. Dopo un cambio, configura di "
+"nuovo il tuo volto. Una fotocamera a infrarossi ha bisogno della sua luce "
+"(linux-enable-ir-emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Per quanto tempo la fotocamera cerca il tuo volto prima di arrendersi."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Dopo una corrispondenza sicura, ricorda il tuo aspetto attuale. Così un nuovo taglio di capelli o gli occhiali non richiedono una nuova configurazione."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Dopo una corrispondenza sicura, ricorda il tuo aspetto attuale. Così un "
+"nuovo taglio di capelli o gli occhiali non richiedono una nuova "
+"configurazione."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Nessuna scansione quando il portatile è chiuso, per esempio alla scrivania con uno schermo esterno."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Nessuna scansione quando il portatile è chiuso, per esempio alla scrivania "
+"con uno schermo esterno."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "La bolla in cima allo schermo mostra cosa sta facendo la fotocamera."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Una piccola pillola con un lucchetto che si apre."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Un'isola con un volto che si guarda intorno, poi anelli e una spunta."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "Quanto velocemente si muove la bolla."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "Mostra la bolla anche quando sudo o una richiesta di amministratore scansiona il tuo volto."
+msgstr ""
+"Mostra la bolla anche quando sudo o una richiesta di amministratore "
+"scansiona il tuo volto."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatica (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(infrarossi)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(non collegata)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Impostazioni"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ scegli ←→ o Spazio: cambia q: indietro"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "per tutti gli utenti, chiede la tua password"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Su/Giù: scegli, Spazio: attiva/disattiva, r: rinomina, d: elimina, a: aggiungi, q: indietro"
+msgstr ""
+"Su/Giù: scegli, Spazio: attiva/disattiva, r: rinomina, d: elimina, a: "
+"aggiungi, q: indietro"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Nessun volto ancora configurato. Premi a per aggiungerne uno."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Nuovo nome:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Eliminare «%s»?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Attiva o disattiva lo sblocco con il volto"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Provalo"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Esci"
@@ -591,7 +682,8 @@ msgstr "Su questo sistema non c'è una configurazione PAM per %s."
#: src/lib/system.sh:47
msgid "This needs root, and neither sudo, run0 nor doas is installed."
-msgstr "Servono i permessi di root, ma non è installato né sudo, né run0, né doas."
+msgstr ""
+"Servono i permessi di root, ma non è installato né sudo, né run0, né doas."
#: src/lib/system.sh:56
msgid "This command has to run as root."
@@ -607,6 +699,14 @@ msgstr "Impostazione non valida: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Non si può usare per questo servizio: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland non avvia da solo l'agente della schermata di blocco. Aggiungi "
+"questa riga a %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Sblocca con il volto"
@@ -765,33 +865,38 @@ msgstr "Ci è voluto troppo. Riprova con una buona luce."
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "Il servizio di sblocco con il volto non è in esecuzione. Attiva prima lo sblocco con il volto."
+msgstr ""
+"Il servizio di sblocco con il volto non è in esecuzione. Attiva prima lo "
+"sblocco con il volto."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
-msgstr "La fotocamera è occupata con un'altra scansione. Riprova tra un attimo."
+msgstr ""
+"La fotocamera è occupata con un'altra scansione. Riprova tra un attimo."
#: src/agent/enrollcontroller.cpp:205
msgid "The face could not be added (%1)."
msgstr "Impossibile aggiungere il volto (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Sblocco con il volto per KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr ""
+"Sblocco con il volto per la schermata di blocco, sudo e le richieste di "
+"amministratore"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Configura un volto."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Come chiamare il nuovo volto."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Riproduci una volta le animazioni della bolla."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Stile della bolla per la demo: full o minimal."
@@ -805,60 +910,71 @@ msgstr "Sbatti le palpebre o gira un po' la testa."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "Lo sblocco con il volto è in pausa dopo troppi tentativi. Usa la tua password."
+msgstr ""
+"Lo sblocco con il volto è in pausa dopo troppi tentativi. Usa la tua "
+"password."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Volto non riconosciuto."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Configura lo sblocco con il volto"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Sblocco con il volto"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Conferma che sei tu"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Tutto pronto"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "La configurazione non è terminata"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Guarda la fotocamera, poi muovi lentamente la testa in cerchio. Il tuo volto viene trasformato in numeri su questo computer e non viene mai salvato come immagine."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Guarda la fotocamera, poi muovi lentamente la testa in cerchio. Il tuo volto "
+"viene trasformato in numeri su questo computer e non viene mai salvato come "
+"immagine."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Blocca lo schermo e guardalo per provarlo. Dal menu puoi aggiungere un secondo aspetto, per esempio con gli occhiali."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Blocca lo schermo e guardalo per provarlo. Dal menu puoi aggiungere un "
+"secondo aspetto, per esempio con gli occhiali."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Nome (facoltativo)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Annulla"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Termina ora"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Riprova"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Iniziamo"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Fatto"
diff --git a/po/ja.po b/po/ja.po
index d34829b..9526b9f 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Japanese\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "顔認証のサービスを、このコンピューターで一度オンにする必要があります。パスワードが必要です。"
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"顔認証のサービスを、このコンピューターで一度オンにする必要があります。パス"
+"ワードが必要です。"
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "確認するには: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "顔を登録するには、カメラの映像を画面に表示する必要があります。Plasma セッションの中で実行してください。"
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"顔を登録するには、カメラの映像を画面に表示する必要があります。デスクトップの"
+"セッションの中で実行してください。"
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -49,8 +57,8 @@ msgstr "顔は追加されませんでした。"
msgid "First, set up your face."
msgstr "まず顔を登録してください。"
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "設定を保存できませんでした。"
@@ -58,137 +66,143 @@ msgstr "設定を保存できませんでした。"
msgid "Could not start the lock screen agent."
msgstr "ロック画面エージェントを起動できませんでした。"
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "systemd のユーザーセッションがないため、ロック画面エージェントは起動されませんでした。"
+msgstr ""
+"systemd のユーザーセッションがないため、ロック画面エージェントは起動されませ"
+"んでした。"
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr "顔認証はオンです。画面をロックして、画面を見て試してください。"
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "sudo や管理者の認証にも使えます。「設定」を参照してください。"
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr "顔認証はオフです。顔データは残っています。「顔」から削除できます。"
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "まだ顔が登録されていません。"
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "オン"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "オフ"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "サンプル %s 件、学習 %s 件"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "どの顔ですか? ID は `%s faces` で確認できます。"
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "削除しました。"
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "使い方: face-unlock [コマンド]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "コマンド:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "顔認証をオンにする"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "オフにする(顔データは残ります)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "顔を追加"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "顔の一覧"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "顔を削除"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "カメラを見て、カメラに映るものを確認する"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "オンになっている機能を表示"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "このヘルプを表示"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "バージョンを表示"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "コマンドなしで起動すると、対話式メニューが表示されます。"
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "root ではなく、自分のユーザーで実行してください。必要なときはパスワードを尋ねます。"
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"root ではなく、自分のユーザーで実行してください。必要なときはパスワードを尋ね"
+"ます。"
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "不明なコマンド: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "なし"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "たった今"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 分前"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d 分前"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 時間前"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d 時間前"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 日前"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d 日前"
@@ -218,14 +232,17 @@ msgid "No face in view."
msgstr "顔が見えません。"
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "試行回数が多すぎるため、顔認証を一時停止しています。一度パスワードでロックを解除してください。"
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"試行回数が多すぎるため、顔認証を一時停止しています。一度パスワードでロックを"
+"解除してください。"
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "カメラを使用できませんでした。"
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "認識モデルがありません。パッケージを再インストールしてください。"
@@ -317,19 +334,23 @@ msgid "Sign of life: %s"
msgstr "生体反応: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "試行回数が多すぎます。パスワードでロックを解除するまで、顔認証は一時停止します。"
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"試行回数が多すぎます。パスワードでロックを解除するまで、顔認証は一時停止しま"
+"す。"
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[y/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "オン"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "オフ"
@@ -370,7 +391,7 @@ msgstr "遅い"
msgid "%s seconds"
msgstr "%s 秒"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "自動"
@@ -390,8 +411,8 @@ msgstr "停止中"
msgid "Turning face unlock on again starts it."
msgstr "顔認証をもう一度オンにすると起動します。"
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "顔"
@@ -415,167 +436,224 @@ msgstr "カメラ"
msgid "Lock screen"
msgstr "ロック画面"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "管理者の認証"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "写真チェック"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "一時停止中"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "あと %d 分、またはパスワードが使われるまで"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "最後のロック解除"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "顔を認識するとロック画面を解除します。オフ: ロック画面ではパスワードだけが使えます。"
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "ロック画面エージェントが動いていません。"
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "ロック画面でキーを押すかマウスを動かしたとき、そしてコンピューターがスリープから復帰したときにスキャンします。"
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME はほかのプログラムを自分のウィンドウの上に表示させないため、GNOME では"
+"バブルは表示されません。"
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "画面がロックされるとすぐにスキャンします。既定はオフ: 自分でロックすると、すぐに解除されてしまうためです。"
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"顔を認識するとロック画面を解除します。オフ: ロック画面ではパスワードだけが使"
+"えます。"
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo でパスワードの代わりに顔を使います。一致しなければ、いつも通りパスワードを入力します。"
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"ロック画面でキーを押すかマウスを動かしたとき、そしてコンピューターがスリープ"
+"から復帰したときにスキャンします。"
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Plasma やアプリのパスワード画面です(ソフトウェアのインストール時など)。一致しなければパスワードを入力します。"
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"画面がロックされるとすぐにスキャンします。既定はオフ: 自分でロックすると、す"
+"ぐに解除されてしまうためです。"
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo でパスワードの代わりに顔を使います。一致しなければ、いつも通りパスワード"
+"を入力します。"
+
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"デスクトップやアプリのパスワード画面です(ソフトウェアのインストール時な"
+"ど)。一致しなければパスワードを入力します。"
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
msgstr "まばたきするか、少し顔を動かす必要があります。印刷した写真も防げます。"
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "チェックしません。カメラを試すときだけ使ってください。"
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "スマホ、タブレット、光沢紙に映った写真を防ぎます。まばたきは不要です。つや消しの印刷写真は通ることがあります。"
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"スマホ、タブレット、光沢紙に映った写真を防ぎます。まばたきは不要です。つや消"
+"しの印刷写真は通ることがあります。"
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "誤認識は減りますが、眼鏡をかけているときや暗いときに認識されないことがあります。"
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"誤認識は減りますが、眼鏡をかけているときや暗いときに認識されないことがありま"
+"す。"
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "認識されやすくなりますが、あなたによく似た人も認識されやすくなります。"
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "既定値です。ほとんどの人に適しています。"
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "目を開けて画面を見ている必要があります。よそ見や居眠りの間にロック解除されません。"
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"目を開けて画面を見ている必要があります。よそ見や居眠りの間にロック解除されま"
+"せん。"
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "「自動」は最初の通常のカメラを使います。変更したら顔を登録し直してください。赤外線カメラはライトをオンにする必要があります(linux-enable-ir-emitter)。"
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"「自動」は最初の通常のカメラを使います。変更したら顔を登録し直してください。"
+"赤外線カメラはライトをオンにする必要があります(linux-enable-ir-emitter)。"
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "カメラが顔を探してからあきらめるまでの時間です。"
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "確実に一致したとき、今の見た目を覚えます。髪型を変えたり眼鏡をかけたりしても、登録し直す必要はありません。"
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"確実に一致したとき、今の見た目を覚えます。髪型を変えたり眼鏡をかけたりして"
+"も、登録し直す必要はありません。"
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "ノートパソコンを閉じているときはスキャンしません。外部モニターにつないで机で使う場合などです。"
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"ノートパソコンを閉じているときはスキャンしません。外部モニターにつないで机で"
+"使う場合などです。"
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "画面上部のバブルに、カメラの状態が表示されます。"
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "鍵が開く小さなピルです。"
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "あたりを見回す顔のアイランド。そのあとリングとチェックマークが出ます。"
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "バブルが動く速さです。"
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "sudo や管理者の認証で顔をスキャンするときにもバブルを表示します。"
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "自動(%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(赤外線)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(未接続)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "設定"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ 選択 ←→ またはスペース: 変更 q: 戻る"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "全ユーザー共通、パスワードが必要"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "上/下: 選択、スペース: オン/オフ、r: 名前を変更、d: 削除、a: 追加、q: 戻る"
+msgstr ""
+"上/下: 選択、スペース: オン/オフ、r: 名前を変更、d: 削除、a: 追加、q: 戻る"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "まだ顔が登録されていません。a を押して追加してください。"
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "新しい名前:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "「%s」を削除しますか?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "顔認証のオン/オフ"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "試す"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "終了"
@@ -591,7 +669,8 @@ msgstr "このシステムには %s の PAM 設定がありません。"
#: src/lib/system.sh:47
msgid "This needs root, and neither sudo, run0 nor doas is installed."
-msgstr "root 権限が必要ですが、sudo も run0 も doas もインストールされていません。"
+msgstr ""
+"root 権限が必要ですが、sudo も run0 も doas もインストールされていません。"
#: src/lib/system.sh:56
msgid "This command has to run as root."
@@ -607,6 +686,14 @@ msgstr "無効な設定です: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "このサービスには使えません: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland はロック画面エージェントを自動では起動しません。%s に次の行を追加し"
+"てください:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "顔でロック解除"
@@ -775,23 +862,23 @@ msgstr "カメラは別のスキャン中です。少ししてからもう一度
msgid "The face could not be added (%1)."
msgstr "顔を追加できませんでした(%1)。"
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "KDE Plasma の顔認証"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr "ロック画面、sudo、管理者の認証のための顔認証"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "顔を登録します。"
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "新しい顔の名前。"
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "バブルのアニメーションを一度再生します。"
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "デモのバブルスタイル: full または minimal。"
@@ -805,60 +892,70 @@ msgstr "まばたきするか、少し顔を動かしてください。"
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "試行回数が多すぎるため、顔認証を一時停止しています。パスワードを使ってください。"
+msgstr ""
+"試行回数が多すぎるため、顔認証を一時停止しています。パスワードを使ってくださ"
+"い。"
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "顔を認識できませんでした。"
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "顔認証の設定"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "顔認証"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "本人確認"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "準備ができました"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "設定が完了しませんでした"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "カメラを見てから、ゆっくり頭を回して円を描いてください。顔はこのコンピューター上で数値に変換され、画像として保存されることはありません。"
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"カメラを見てから、ゆっくり頭を回して円を描いてください。顔はこのコンピュー"
+"ター上で数値に変換され、画像として保存されることはありません。"
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "画面をロックして、画面を見て試してください。眼鏡をかけた顔など、2 つ目の見た目をメニューから追加できます。"
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"画面をロックして、画面を見て試してください。眼鏡をかけた顔など、2 つ目の見た"
+"目をメニューから追加できます。"
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "名前(任意)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "キャンセル"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "今すぐ完了"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "もう一度"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "はじめる"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "完了"
diff --git a/po/ko.po b/po/ko.po
index 6bf43ec..40cfae7 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Korean\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "얼굴 잠금 해제 서비스를 이 컴퓨터에서 한 번 켜야 합니다. 이때 비밀번호가 필요합니다."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"얼굴 잠금 해제 서비스를 이 컴퓨터에서 한 번 켜야 합니다. 이때 비밀번호가 필요"
+"합니다."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "확인 방법: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "얼굴을 등록하려면 카메라 화면이 보여야 합니다. Plasma 세션 안에서 실행하세요."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"얼굴을 등록하려면 카메라 화면이 보여야 합니다. 데스크톱 세션 안에서 실행하세"
+"요."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -49,8 +57,8 @@ msgstr "얼굴이 추가되지 않았습니다."
msgid "First, set up your face."
msgstr "먼저 얼굴을 등록하세요."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "설정을 저장하지 못했습니다."
@@ -58,137 +66,142 @@ msgstr "설정을 저장하지 못했습니다."
msgid "Could not start the lock screen agent."
msgstr "잠금 화면 에이전트를 시작하지 못했습니다."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
msgstr "systemd 사용자 세션이 없어 잠금 화면 에이전트를 시작하지 않았습니다."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "얼굴 잠금 해제가 켜졌습니다. 화면을 잠그고 화면을 바라보며 사용해 보세요."
+msgstr ""
+"얼굴 잠금 해제가 켜졌습니다. 화면을 잠그고 화면을 바라보며 사용해 보세요."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "sudo와 관리자 인증 창에서도 쓸 수 있습니다. 설정을 참고하세요."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "얼굴 잠금 해제가 꺼졌습니다. 얼굴 데이터는 남아 있으며, 얼굴 메뉴에서 삭제할 수 있습니다."
+msgstr ""
+"얼굴 잠금 해제가 꺼졌습니다. 얼굴 데이터는 남아 있으며, 얼굴 메뉴에서 삭제할 "
+"수 있습니다."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "아직 등록된 얼굴이 없습니다."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "켜짐"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "꺼짐"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "샘플 %s개, 학습 %s개"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "어떤 얼굴인가요? ID는 `%s faces`에서 확인하세요."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "삭제했습니다."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "사용법: face-unlock [명령]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "명령:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "얼굴 잠금 해제 켜기"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "끄기 (얼굴 데이터는 유지)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "얼굴 추가"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "얼굴 목록"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "얼굴 삭제"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "카메라를 보고 카메라에 보이는 것을 확인"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "켜져 있는 기능 보기"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "이 도움말 보기"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "버전 보기"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "명령 없이 실행하면 대화형 메뉴가 나옵니다."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
msgstr "root가 아닌 본인 사용자로 실행하세요. 필요하면 비밀번호를 묻습니다."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "알 수 없는 명령: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "없음"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "방금"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1분 전"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d분 전"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1시간 전"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d시간 전"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1일 전"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d일 전"
@@ -218,14 +231,17 @@ msgid "No face in view."
msgstr "보이는 얼굴이 없습니다."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "시도가 너무 많아 얼굴 잠금 해제가 일시 중지되었습니다. 비밀번호로 한 번 잠금을 해제하세요."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"시도가 너무 많아 얼굴 잠금 해제가 일시 중지되었습니다. 비밀번호로 한 번 잠금"
+"을 해제하세요."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "카메라를 사용할 수 없었습니다."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "인식 모델이 없습니다. 패키지를 다시 설치하세요."
@@ -317,19 +333,23 @@ msgid "Sign of life: %s"
msgstr "생체 신호: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "시도가 너무 많습니다. 비밀번호로 잠금을 해제할 때까지 얼굴 잠금 해제가 일시 중지됩니다."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"시도가 너무 많습니다. 비밀번호로 잠금을 해제할 때까지 얼굴 잠금 해제가 일시 "
+"중지됩니다."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[y/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "켜짐"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "꺼짐"
@@ -370,7 +390,7 @@ msgstr "느리게"
msgid "%s seconds"
msgstr "%s초"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "자동"
@@ -390,8 +410,8 @@ msgstr "실행 중 아님"
msgid "Turning face unlock on again starts it."
msgstr "얼굴 잠금 해제를 다시 켜면 시작됩니다."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "얼굴"
@@ -415,167 +435,223 @@ msgstr "카메라"
msgid "Lock screen"
msgstr "잠금 화면"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "관리자 인증 창"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "사진 검사"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "일시 중지됨"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "%d분 더, 또는 비밀번호를 사용할 때까지"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "마지막 잠금 해제"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "얼굴을 보면 잠금 화면을 해제합니다. 꺼짐: 잠금 화면에서는 비밀번호만 됩니다."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "잠금 화면 에이전트가 실행 중이 아닙니다."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "잠금 화면에서 키를 누르거나 마우스를 움직일 때, 그리고 컴퓨터가 깨어날 때 스캔합니다."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME은 다른 프로그램이 자기 창 위에 표시되는 것을 허용하지 않으므로 GNOME에"
+"서는 버블이 없습니다."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "화면이 잠기자마자 스캔합니다. 기본값은 꺼짐: 직접 잠그면 곧바로 다시 풀려 버리기 때문입니다."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"얼굴을 보면 잠금 화면을 해제합니다. 꺼짐: 잠금 화면에서는 비밀번호만 됩니다."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo가 비밀번호 대신 얼굴을 사용합니다. 일치하지 않으면 평소처럼 비밀번호를 입력합니다."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"잠금 화면에서 키를 누르거나 마우스를 움직일 때, 그리고 컴퓨터가 깨어날 때 스"
+"캔합니다."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Plasma와 앱의 비밀번호 창입니다. 예를 들어 소프트웨어를 설치할 때입니다. 일치하지 않으면 비밀번호를 입력합니다."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"화면이 잠기자마자 스캔합니다. 기본값은 꺼짐: 직접 잠그면 곧바로 다시 풀려 버"
+"리기 때문입니다."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo가 비밀번호 대신 얼굴을 사용합니다. 일치하지 않으면 평소처럼 비밀번호를 "
+"입력합니다."
+
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"데스크톱과 앱의 비밀번호 창입니다. 예를 들어 소프트웨어를 설치할 때입니다. 일"
+"치하지 않으면 비밀번호를 입력합니다."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
msgstr "눈을 깜빡이거나 고개를 살짝 돌려야 합니다. 인쇄한 사진도 막아 줍니다."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "검사하지 않습니다. 카메라를 시험할 때만 쓰세요."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "휴대폰, 태블릿, 광택지에 있는 사진을 막습니다. 눈을 깜빡일 필요는 없습니다. 무광 인쇄 사진은 통과할 수 있습니다."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"휴대폰, 태블릿, 광택지에 있는 사진을 막습니다. 눈을 깜빡일 필요는 없습니다. "
+"무광 인쇄 사진은 통과할 수 있습니다."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "잘못 일치하는 경우가 줄지만, 안경을 쓰거나 조명이 나쁘면 알아보지 못할 수 있습니다."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"잘못 일치하는 경우가 줄지만, 안경을 쓰거나 조명이 나쁘면 알아보지 못할 수 있"
+"습니다."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "더 쉽게 알아보지만, 당신과 많이 닮은 사람도 알아볼 수 있습니다."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "기본값입니다. 대부분의 사람에게 알맞습니다."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "눈을 뜨고 화면을 보고 있어야 합니다. 그래서 다른 곳을 보거나 자는 동안에는 풀리지 않습니다."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"눈을 뜨고 화면을 보고 있어야 합니다. 그래서 다른 곳을 보거나 자는 동안에는 풀"
+"리지 않습니다."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "자동은 첫 번째 일반 카메라를 사용합니다. 바꾼 뒤에는 얼굴을 다시 등록하세요. 적외선 카메라는 조명을 켜야 합니다 (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"자동은 첫 번째 일반 카메라를 사용합니다. 바꾼 뒤에는 얼굴을 다시 등록하세요. "
+"적외선 카메라는 조명을 켜야 합니다 (linux-enable-ir-emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "카메라가 포기하기 전까지 얼굴을 찾는 시간입니다."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "확실히 일치하면 지금 모습을 기억합니다. 그래서 머리 모양이 바뀌거나 안경을 써도 다시 등록할 필요가 없습니다."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"확실히 일치하면 지금 모습을 기억합니다. 그래서 머리 모양이 바뀌거나 안경을 써"
+"도 다시 등록할 필요가 없습니다."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "노트북을 덮었을 때는 스캔하지 않습니다. 예를 들어 외부 모니터를 연결해 책상에서 쓸 때입니다."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"노트북을 덮었을 때는 스캔하지 않습니다. 예를 들어 외부 모니터를 연결해 책상에"
+"서 쓸 때입니다."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "화면 위쪽의 버블이 카메라가 하는 일을 보여 줍니다."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "자물쇠가 열리는 작은 알약입니다."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "주위를 둘러보는 얼굴이 있는 아일랜드, 그다음 링과 체크 표시입니다."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "버블이 움직이는 속도입니다."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "sudo나 관리자 인증 창이 얼굴을 스캔할 때도 버블을 보여 줍니다."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "자동 (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(적외선)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(연결 안 됨)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "설정"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ 선택 ←→ 또는 스페이스: 변경 q: 뒤로"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "모든 사용자에게 적용, 비밀번호 필요"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "위/아래: 선택, 스페이스: 켜기/끄기, r: 이름 바꾸기, d: 삭제, a: 추가, q: 뒤로"
+msgstr ""
+"위/아래: 선택, 스페이스: 켜기/끄기, r: 이름 바꾸기, d: 삭제, a: 추가, q: 뒤로"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "아직 등록된 얼굴이 없습니다. a를 눌러 추가하세요."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "새 이름:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "\"%s\" 항목을 삭제할까요?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "얼굴 잠금 해제 켜기/끄기"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "사용해 보기"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "끝내기"
@@ -591,7 +667,8 @@ msgstr "이 시스템에는 %s용 PAM 설정이 없습니다."
#: src/lib/system.sh:47
msgid "This needs root, and neither sudo, run0 nor doas is installed."
-msgstr "root 권한이 필요하지만 sudo, run0, doas 중 아무것도 설치되어 있지 않습니다."
+msgstr ""
+"root 권한이 필요하지만 sudo, run0, doas 중 아무것도 설치되어 있지 않습니다."
#: src/lib/system.sh:56
msgid "This command has to run as root."
@@ -607,6 +684,14 @@ msgstr "올바르지 않은 설정: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "이 서비스에는 사용할 수 없습니다: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland는 잠금 화면 에이전트를 스스로 시작하지 않습니다. %s에 다음 줄을 추가"
+"하세요:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "얼굴로 잠금 해제"
@@ -765,7 +850,8 @@ msgstr "시간이 너무 오래 걸렸습니다. 밝은 곳에서 다시 시도
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "얼굴 잠금 해제 서비스가 실행 중이 아닙니다. 먼저 얼굴 잠금 해제를 켜세요."
+msgstr ""
+"얼굴 잠금 해제 서비스가 실행 중이 아닙니다. 먼저 얼굴 잠금 해제를 켜세요."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
@@ -775,23 +861,23 @@ msgstr "카메라가 다른 스캔으로 사용 중입니다. 잠시 후 다시
msgid "The face could not be added (%1)."
msgstr "얼굴을 추가하지 못했습니다 (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "KDE Plasma용 얼굴 잠금 해제"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr "잠금 화면, sudo, 관리자 인증 창을 위한 얼굴 잠금 해제"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "얼굴을 등록합니다."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "새 얼굴의 이름."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "버블 애니메이션을 한 번 재생합니다."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "데모용 버블 스타일: full 또는 minimal."
@@ -805,60 +891,69 @@ msgstr "눈을 깜빡이거나 고개를 살짝 돌리세요."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "시도가 너무 많아 얼굴 잠금 해제가 일시 중지되었습니다. 비밀번호를 사용하세요."
+msgstr ""
+"시도가 너무 많아 얼굴 잠금 해제가 일시 중지되었습니다. 비밀번호를 사용하세요."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "얼굴을 인식하지 못했습니다."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "얼굴 잠금 해제 설정"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "얼굴 잠금 해제"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "본인 확인"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "모두 준비되었습니다"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "설정을 마치지 못했습니다"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "카메라를 본 다음 고개를 천천히 돌려 원을 그리세요. 얼굴은 이 컴퓨터에서 숫자로 바뀌며 사진으로 저장되지 않습니다."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"카메라를 본 다음 고개를 천천히 돌려 원을 그리세요. 얼굴은 이 컴퓨터에서 숫자"
+"로 바뀌며 사진으로 저장되지 않습니다."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "화면을 잠그고 화면을 바라보며 사용해 보세요. 안경을 쓴 모습 같은 두 번째 모습을 메뉴에서 추가할 수 있습니다."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"화면을 잠그고 화면을 바라보며 사용해 보세요. 안경을 쓴 모습 같은 두 번째 모습"
+"을 메뉴에서 추가할 수 있습니다."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "이름 (선택)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "취소"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "지금 완료"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "다시 시도"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "시작하기"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "완료"
diff --git a/po/nl.po b/po/nl.po
index f7887f3..0f872ad 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Dutch\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "De dienst voor gezichtsontgrendeling moet één keer op deze computer worden ingeschakeld. Daarvoor is je wachtwoord nodig."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"De dienst voor gezichtsontgrendeling moet één keer op deze computer worden "
+"ingeschakeld. Daarvoor is je wachtwoord nodig."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Controleer met: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Voor het instellen van een gezicht moet het camerabeeld op het scherm staan. Voer dit uit in je Plasma-sessie."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Voor het instellen van een gezicht moet het camerabeeld op het scherm staan. "
+"Voer dit uit in je bureaubladsessie."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -39,7 +47,8 @@ msgstr "Het gezicht is ingesteld."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "Gezichtsontgrendeling staat nog uit. Zet het aan met [1] of `%s enable`."
+msgstr ""
+"Gezichtsontgrendeling staat nog uit. Zet het aan met [1] of `%s enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +58,8 @@ msgstr "Er is geen gezicht toegevoegd."
msgid "First, set up your face."
msgstr "Stel eerst je gezicht in."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Kon de instelling niet opslaan."
@@ -58,137 +67,147 @@ msgstr "Kon de instelling niet opslaan."
msgid "Could not start the lock screen agent."
msgstr "Kon de agent voor het vergrendelscherm niet starten."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "Geen systemd-gebruikerssessie, dus de agent voor het vergrendelscherm is niet gestart."
+msgstr ""
+"Geen systemd-gebruikerssessie, dus de agent voor het vergrendelscherm is "
+"niet gestart."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "Gezichtsontgrendeling staat aan. Vergrendel het scherm en kijk ernaar om het te proberen."
+msgstr ""
+"Gezichtsontgrendeling staat aan. Vergrendel het scherm en kijk ernaar om het "
+"te proberen."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Het werkt ook voor sudo en beheerdersvragen. Zie Instellingen."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "Gezichtsontgrendeling staat uit. Je gezichten blijven bewaard; verwijder ze onder Gezichten."
+msgstr ""
+"Gezichtsontgrendeling staat uit. Je gezichten blijven bewaard; verwijder ze "
+"onder Gezichten."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Er is nog geen gezicht ingesteld."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "aan"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "uit"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s opnames, %s bijgeleerd"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Welk gezicht? Zie `%s faces` voor de ID's."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Verwijderd."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Gebruik: face-unlock [opdracht]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Opdrachten:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Gezichtsontgrendeling aanzetten"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Uitzetten (gezichten blijven bewaard)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Een gezicht toevoegen"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "De gezichten tonen"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Een gezicht verwijderen"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "In de camera kijken en zien wat hij ziet"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Tonen wat er aan staat"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Deze hulp tonen"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "De versie tonen"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Zonder opdracht verschijnt een interactief menu."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Voer dit uit als je eigen gebruiker, niet als root. Het vraagt om je wachtwoord als dat nodig is."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Voer dit uit als je eigen gebruiker, niet als root. Het vraagt om je "
+"wachtwoord als dat nodig is."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Onbekende opdracht: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "nooit"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "zojuist"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 minuut geleden"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d minuten geleden"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 uur geleden"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d uur geleden"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 dag geleden"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d dagen geleden"
@@ -218,14 +237,17 @@ msgid "No face in view."
msgstr "Geen gezicht in beeld."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "Gezichtsontgrendeling is gepauzeerd na te veel pogingen. Ontgrendel één keer met je wachtwoord."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"Gezichtsontgrendeling is gepauzeerd na te veel pogingen. Ontgrendel één keer "
+"met je wachtwoord."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "De camera kon niet worden gebruikt."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "De herkenningsmodellen ontbreken. Installeer het pakket opnieuw."
@@ -317,19 +339,23 @@ msgid "Sign of life: %s"
msgstr "Teken van leven: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Dat waren te veel pogingen. Gezichtsontgrendeling is gepauzeerd tot je met je wachtwoord ontgrendelt."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Dat waren te veel pogingen. Gezichtsontgrendeling is gepauzeerd tot je met "
+"je wachtwoord ontgrendelt."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[j/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "AAN"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "UIT"
@@ -370,7 +396,7 @@ msgstr "langzaam"
msgid "%s seconds"
msgstr "%s seconden"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "automatisch"
@@ -390,8 +416,8 @@ msgstr "draait niet"
msgid "Turning face unlock on again starts it."
msgstr "Gezichtsontgrendeling opnieuw aanzetten start hem."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Gezichten"
@@ -415,167 +441,228 @@ msgstr "Camera"
msgid "Lock screen"
msgstr "Vergrendelscherm"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Beheerdersvragen"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Fotocontrole"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "Gepauzeerd"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "nog %d minuten, of tot het wachtwoord wordt gebruikt"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Laatste ontgrendeling"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Ontgrendelt het vergrendelscherm als het je gezicht ziet. Uit: daar werkt alleen je wachtwoord."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "De agent voor het vergrendelscherm draait niet."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Scant als je op het vergrendelscherm een toets indrukt of de muis beweegt, en als de computer ontwaakt."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME laat andere programma's niet boven zijn vensters verschijnen, dus op "
+"GNOME is er geen bubbel."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Scant zodra het scherm vergrendelt. Standaard uit: vergrendel je zelf, dan zou het meteen weer ontgrendelen."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Ontgrendelt het vergrendelscherm als het je gezicht ziet. Uit: daar werkt "
+"alleen je wachtwoord."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo neemt je gezicht in plaats van het wachtwoord. Geen match: je typt zoals gewoonlijk je wachtwoord."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Scant als je op het vergrendelscherm een toets indrukt of de muis beweegt, "
+"en als de computer ontwaakt."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "De wachtwoordvensters van Plasma en apps, bijvoorbeeld bij het installeren van software. Geen match: je typt je wachtwoord."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Scant zodra het scherm vergrendelt. Standaard uit: vergrendel je zelf, dan "
+"zou het meteen weer ontgrendelen."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Je moet knipperen of je hoofd een beetje draaien. Dat houdt ook geprinte foto's tegen."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo neemt je gezicht in plaats van het wachtwoord. Geen match: je typt "
+"zoals gewoonlijk je wachtwoord."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"De wachtwoordvensters van je bureaublad en apps, bijvoorbeeld bij het "
+"installeren van software. Geen match: je typt je wachtwoord."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Je moet knipperen of je hoofd een beetje draaien. Dat houdt ook geprinte "
+"foto's tegen."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Helemaal geen controle. Alleen om een camera uit te proberen."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Houdt foto's op een telefoon, tablet of glanzend papier tegen. Knipperen is niet nodig. Een matte geprinte foto kan erdoor komen."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Houdt foto's op een telefoon, tablet of glanzend papier tegen. Knipperen is "
+"niet nodig. Een matte geprinte foto kan erdoor komen."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Minder verwisselingen, maar met een bril of bij slecht licht herkent het je misschien niet."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Minder verwisselingen, maar met een bril of bij slecht licht herkent het je "
+"misschien niet."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Herkent je makkelijker, maar ook iemand die veel op je lijkt."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "De standaard. Goed voor de meeste mensen."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Je ogen moeten open zijn en naar het scherm kijken. Zo ontgrendelt het niet als je wegkijkt of slaapt."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Je ogen moeten open zijn en naar het scherm kijken. Zo ontgrendelt het niet "
+"als je wegkijkt of slaapt."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Automatisch neemt de eerste gewone camera. Stel na een wissel je gezicht opnieuw in. Een infraroodcamera heeft zijn lampje nodig (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Automatisch neemt de eerste gewone camera. Stel na een wissel je gezicht "
+"opnieuw in. Een infraroodcamera heeft zijn lampje nodig (linux-enable-ir-"
+"emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Hoe lang de camera naar je gezicht zoekt voordat hij opgeeft."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Na een zekere match onthoudt het hoe je er nu uitziet. Een nieuw kapsel of een bril vraagt dus niet om opnieuw instellen."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Na een zekere match onthoudt het hoe je er nu uitziet. Een nieuw kapsel of "
+"een bril vraagt dus niet om opnieuw instellen."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Geen scan als de laptop dicht is, bijvoorbeeld aan een bureau met een extern scherm."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Geen scan als de laptop dicht is, bijvoorbeeld aan een bureau met een extern "
+"scherm."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "De bubbel boven aan het scherm laat zien wat de camera doet."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Een kleine pil met een slot dat opengaat."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Een eiland met een gezicht dat rondkijkt, daarna ringen en een vinkje."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "Hoe snel de bubbel beweegt."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "Toont de bubbel ook als sudo of een beheerdersvraag je gezicht scant."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatisch (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(infrarood)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(niet aangesloten)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Instellingen"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ kiezen ←→ of Spatie: wijzigen q: terug"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "voor alle gebruikers, vraagt om je wachtwoord"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Omhoog/Omlaag: kiezen, Spatie: aan/uit, r: hernoemen, d: verwijderen, a: toevoegen, q: terug"
+msgstr ""
+"Omhoog/Omlaag: kiezen, Spatie: aan/uit, r: hernoemen, d: verwijderen, a: "
+"toevoegen, q: terug"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Er is nog geen gezicht ingesteld. Druk op a om er een toe te voegen."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Nieuwe naam:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "“%s” verwijderen?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Gezichtsontgrendeling aan- of uitzetten"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Uitproberen"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Afsluiten"
@@ -591,7 +678,9 @@ msgstr "Er is op dit systeem geen PAM-configuratie voor %s."
#: src/lib/system.sh:47
msgid "This needs root, and neither sudo, run0 nor doas is installed."
-msgstr "Dit heeft root nodig, maar sudo, run0 en doas zijn geen van alle geïnstalleerd."
+msgstr ""
+"Dit heeft root nodig, maar sudo, run0 en doas zijn geen van alle "
+"geïnstalleerd."
#: src/lib/system.sh:56
msgid "This command has to run as root."
@@ -607,6 +696,14 @@ msgstr "Geen geldige instelling: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Hier kan het niet voor worden gebruikt: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland start de agent voor het vergrendelscherm niet zelf. Voeg deze regel "
+"toe aan %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Ontgrendelen met je gezicht"
@@ -757,7 +854,8 @@ msgstr "De camera kon niet worden gebruikt: %1"
#: src/agent/enrollcontroller.cpp:197
msgid "The face recognition models are missing. Reinstall the package."
-msgstr "De modellen voor gezichtsherkenning ontbreken. Installeer het pakket opnieuw."
+msgstr ""
+"De modellen voor gezichtsherkenning ontbreken. Installeer het pakket opnieuw."
#: src/agent/enrollcontroller.cpp:199
msgid "That took too long. Try again, in good light."
@@ -765,7 +863,9 @@ msgstr "Dat duurde te lang. Probeer het opnieuw, bij goed licht."
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "De dienst voor gezichtsontgrendeling draait niet. Zet eerst gezichtsontgrendeling aan."
+msgstr ""
+"De dienst voor gezichtsontgrendeling draait niet. Zet eerst "
+"gezichtsontgrendeling aan."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
@@ -775,23 +875,24 @@ msgstr "De camera is bezig met een andere scan. Probeer het zo opnieuw."
msgid "The face could not be added (%1)."
msgstr "Het gezicht kon niet worden toegevoegd (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Gezichtsontgrendeling voor KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr ""
+"Gezichtsontgrendeling voor het vergrendelscherm, sudo en beheerdersvragen"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Een gezicht instellen."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Hoe het nieuwe gezicht moet heten."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "De animaties van de bubbel één keer afspelen."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Bubbelstijl voor de demo: full of minimal."
@@ -805,60 +906,70 @@ msgstr "Knipper, of draai je hoofd een beetje."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "Gezichtsontgrendeling is gepauzeerd na te veel pogingen. Gebruik je wachtwoord."
+msgstr ""
+"Gezichtsontgrendeling is gepauzeerd na te veel pogingen. Gebruik je "
+"wachtwoord."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Gezicht niet herkend."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Gezichtsontgrendeling instellen"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Gezichtsontgrendeling"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Bevestig dat jij het bent"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Alles klaar"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "Het instellen is niet afgerond"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Kijk in de camera en beweeg dan je hoofd langzaam in een cirkel. Je gezicht wordt op deze computer omgezet in getallen en nooit als foto opgeslagen."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Kijk in de camera en beweeg dan je hoofd langzaam in een cirkel. Je gezicht "
+"wordt op deze computer omgezet in getallen en nooit als foto opgeslagen."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Vergrendel het scherm en kijk ernaar om het te proberen. In het menu kun je een tweede look toevoegen, bijvoorbeeld met bril."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Vergrendel het scherm en kijk ernaar om het te proberen. In het menu kun je "
+"een tweede look toevoegen, bijvoorbeeld met bril."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Naam (optioneel)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Annuleren"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Nu afronden"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Opnieuw proberen"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Aan de slag"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Klaar"
diff --git a/po/pl.po b/po/pl.po
index a38f5e5..e7100f1 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Polish\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "Usługę odblokowywania twarzą trzeba raz włączyć na tym komputerze. Potrzebne jest do tego twoje hasło."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"Usługę odblokowywania twarzą trzeba raz włączyć na tym komputerze. Potrzebne "
+"jest do tego twoje hasło."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Sprawdź poleceniem: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Do skonfigurowania twarzy obraz z kamery musi być widoczny na ekranie. Uruchom to w swojej sesji Plasmy."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Do skonfigurowania twarzy obraz z kamery musi być widoczny na ekranie. "
+"Uruchom to w swojej sesji pulpitu."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -39,7 +47,9 @@ msgstr "Twarz jest skonfigurowana."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "Odblokowywanie twarzą jest nadal wyłączone. Włącz je przez [1] lub `%s enable`."
+msgstr ""
+"Odblokowywanie twarzą jest nadal wyłączone. Włącz je przez [1] lub `%s "
+"enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +59,8 @@ msgstr "Nie dodano żadnej twarzy."
msgid "First, set up your face."
msgstr "Najpierw skonfiguruj swoją twarz."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Nie udało się zapisać ustawienia."
@@ -58,137 +68,147 @@ msgstr "Nie udało się zapisać ustawienia."
msgid "Could not start the lock screen agent."
msgstr "Nie udało się uruchomić agenta ekranu blokady."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "Brak sesji użytkownika systemd, więc agent ekranu blokady nie został uruchomiony."
+msgstr ""
+"Brak sesji użytkownika systemd, więc agent ekranu blokady nie został "
+"uruchomiony."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "Odblokowywanie twarzą jest włączone. Zablokuj ekran i spójrz na niego, aby wypróbować."
+msgstr ""
+"Odblokowywanie twarzą jest włączone. Zablokuj ekran i spójrz na niego, aby "
+"wypróbować."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Działa też dla sudo i okien administratora. Zobacz Ustawienia."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "Odblokowywanie twarzą jest wyłączone. Twoje twarze zostają zachowane; usuniesz je w Twarzach."
+msgstr ""
+"Odblokowywanie twarzą jest wyłączone. Twoje twarze zostają zachowane; "
+"usuniesz je w Twarzach."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Nie skonfigurowano jeszcze żadnej twarzy."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "wł."
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "wył."
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "próbki: %s, wyuczone: %s"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Która twarz? Identyfikatory pokazuje `%s faces`."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Usunięto."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Użycie: face-unlock [polecenie]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Polecenia:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Włącz odblokowywanie twarzą"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Wyłącz je (twarze zostają zachowane)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Dodaj twarz"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Pokaż listę twarzy"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Usuń twarz"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Spójrz w kamerę i zobacz, co widzi"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Pokaż, co jest włączone"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Pokaż tę pomoc"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Pokaż wersję"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Bez polecenia wyświetla się interaktywne menu."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Uruchom to jako swój użytkownik, nie jako root. Hasło zostanie zapytane, gdy będzie potrzebne."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Uruchom to jako swój użytkownik, nie jako root. Hasło zostanie zapytane, gdy "
+"będzie potrzebne."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Nieznane polecenie: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "nigdy"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "przed chwilą"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 minutę temu"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d min temu"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 godzinę temu"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d godz. temu"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 dzień temu"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d dni temu"
@@ -218,14 +238,17 @@ msgid "No face in view."
msgstr "Brak twarzy w kadrze."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "Odblokowywanie twarzą jest wstrzymane po zbyt wielu próbach. Odblokuj raz hasłem."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"Odblokowywanie twarzą jest wstrzymane po zbyt wielu próbach. Odblokuj raz "
+"hasłem."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "Nie udało się użyć kamery."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Brakuje modeli rozpoznawania. Zainstaluj pakiet ponownie."
@@ -317,19 +340,23 @@ msgid "Sign of life: %s"
msgstr "Oznaka życia: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "To było za dużo prób. Odblokowywanie twarzą jest wstrzymane, dopóki nie odblokujesz hasłem."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"To było za dużo prób. Odblokowywanie twarzą jest wstrzymane, dopóki nie "
+"odblokujesz hasłem."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[t/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "WŁ."
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "WYŁ."
@@ -370,7 +397,7 @@ msgstr "wolna"
msgid "%s seconds"
msgstr "%s s"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "automatyczna"
@@ -390,8 +417,8 @@ msgstr "nie działa"
msgid "Turning face unlock on again starts it."
msgstr "Ponowne włączenie odblokowywania twarzą ją uruchomi."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Twarze"
@@ -415,167 +442,229 @@ msgstr "Kamera"
msgid "Lock screen"
msgstr "Ekran blokady"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Okna administratora"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Wykrywanie zdjęć"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "Wstrzymane"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "jeszcze %d min lub do użycia hasła"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Ostatnie odblokowanie"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Odblokowuje ekran blokady, gdy widzi twoją twarz. Wyłączone: działa tam tylko hasło."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "Agent ekranu blokady nie działa."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Skanuje, gdy naciśniesz klawisz lub poruszysz myszą na ekranie blokady, oraz gdy komputer się wybudzi."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME nie pozwala innym programom wyświetlać się nad swoimi oknami, więc w "
+"GNOME nie ma dymka."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Skanuje od razu po zablokowaniu ekranu. Domyślnie wyłączone: gdy zablokujesz sam, od razu by się odblokował."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Odblokowuje ekran blokady, gdy widzi twoją twarz. Wyłączone: działa tam "
+"tylko hasło."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo przyjmuje twarz zamiast hasła. Gdy nie pasuje, wpisujesz hasło jak zwykle."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Skanuje, gdy naciśniesz klawisz lub poruszysz myszą na ekranie blokady, oraz "
+"gdy komputer się wybudzi."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Okna haseł Plasmy i aplikacji, na przykład przy instalowaniu programów. Gdy twarz nie pasuje, wpisujesz hasło."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Skanuje od razu po zablokowaniu ekranu. Domyślnie wyłączone: gdy zablokujesz "
+"sam, od razu by się odblokował."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Musisz mrugnąć albo lekko obrócić głowę. To zatrzymuje też wydrukowane zdjęcia."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo przyjmuje twarz zamiast hasła. Gdy nie pasuje, wpisujesz hasło jak "
+"zwykle."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"Okna haseł pulpitu i aplikacji, na przykład przy instalowaniu programów. Gdy "
+"twarz nie pasuje, wpisujesz hasło."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Musisz mrugnąć albo lekko obrócić głowę. To zatrzymuje też wydrukowane "
+"zdjęcia."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Bez żadnej kontroli. Tylko do wypróbowania kamery."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Zatrzymuje zdjęcia na telefonie, tablecie lub błyszczącym papierze. Nie trzeba mrugać. Matowy wydruk może przejść."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Zatrzymuje zdjęcia na telefonie, tablecie lub błyszczącym papierze. Nie "
+"trzeba mrugać. Matowy wydruk może przejść."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Mniej pomyłek, ale może cię nie rozpoznać w okularach albo przy słabym świetle."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Mniej pomyłek, ale może cię nie rozpoznać w okularach albo przy słabym "
+"świetle."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Łatwiej cię rozpoznaje, ale też kogoś bardzo do ciebie podobnego."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "Domyślna. Pasuje większości osób."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Twoje oczy muszą być otwarte i patrzeć na ekran. Dzięki temu nie odblokuje, gdy patrzysz w bok lub śpisz."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Twoje oczy muszą być otwarte i patrzeć na ekran. Dzięki temu nie odblokuje, "
+"gdy patrzysz w bok lub śpisz."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Automatyczna bierze pierwszą zwykłą kamerę. Po zmianie skonfiguruj twarz od nowa. Kamera na podczerwień potrzebuje włączonego światła (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Automatyczna bierze pierwszą zwykłą kamerę. Po zmianie skonfiguruj twarz od "
+"nowa. Kamera na podczerwień potrzebuje włączonego światła (linux-enable-ir-"
+"emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Jak długo kamera szuka twojej twarzy, zanim się podda."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Po pewnym dopasowaniu zapamiętuje, jak teraz wyglądasz. Nowa fryzura czy okulary nie wymagają więc ponownej konfiguracji."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Po pewnym dopasowaniu zapamiętuje, jak teraz wyglądasz. Nowa fryzura czy "
+"okulary nie wymagają więc ponownej konfiguracji."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Bez skanowania, gdy laptop jest zamknięty, na przykład przy biurku z zewnętrznym ekranem."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Bez skanowania, gdy laptop jest zamknięty, na przykład przy biurku z "
+"zewnętrznym ekranem."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Dymek u góry ekranu pokazuje, co robi kamera."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Mała pigułka z kłódką, która się otwiera."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Wyspa z twarzą, która się rozgląda, potem pierścienie i ptaszek."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "Jak szybko porusza się dymek."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "Pokazuje dymek także wtedy, gdy sudo lub okno administratora skanuje twarz."
+msgstr ""
+"Pokazuje dymek także wtedy, gdy sudo lub okno administratora skanuje twarz."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatyczna (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(podczerwień)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(niepodłączona)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Ustawienia"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ wybierz ←→ lub Spacja: zmień q: wstecz"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "dla wszystkich użytkowników, pyta o hasło"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Góra/Dół: wybierz, Spacja: wł./wył., r: zmień nazwę, d: usuń, a: dodaj, q: wstecz"
+msgstr ""
+"Góra/Dół: wybierz, Spacja: wł./wył., r: zmień nazwę, d: usuń, a: dodaj, q: "
+"wstecz"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Nie skonfigurowano jeszcze żadnej twarzy. Naciśnij a, aby dodać."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Nowa nazwa:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Usunąć „%s”?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Włącz lub wyłącz odblokowywanie twarzą"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Wypróbuj"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Zakończ"
@@ -591,7 +680,8 @@ msgstr "Na tym systemie nie ma konfiguracji PAM dla %s."
#: src/lib/system.sh:47
msgid "This needs root, and neither sudo, run0 nor doas is installed."
-msgstr "To wymaga roota, a nie jest zainstalowane ani sudo, ani run0, ani doas."
+msgstr ""
+"To wymaga roota, a nie jest zainstalowane ani sudo, ani run0, ani doas."
#: src/lib/system.sh:56
msgid "This command has to run as root."
@@ -607,6 +697,13 @@ msgstr "Nieprawidłowe ustawienie: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Nie można tego użyć dla tej usługi: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland nie uruchamia sam agenta ekranu blokady. Dodaj ten wiersz do %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Odblokowuj twarzą"
@@ -765,7 +862,9 @@ msgstr "To trwało za długo. Spróbuj ponownie przy dobrym świetle."
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "Usługa odblokowywania twarzą nie działa. Najpierw włącz odblokowywanie twarzą."
+msgstr ""
+"Usługa odblokowywania twarzą nie działa. Najpierw włącz odblokowywanie "
+"twarzą."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
@@ -775,23 +874,23 @@ msgstr "Kamera jest zajęta innym skanowaniem. Spróbuj ponownie za chwilę."
msgid "The face could not be added (%1)."
msgstr "Nie udało się dodać twarzy (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Odblokowywanie twarzą dla KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr "Odblokowywanie twarzą dla ekranu blokady, sudo i okien administratora"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Skonfiguruj twarz."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Jak nazwać nową twarz."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Odtwórz raz animacje dymka."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Styl dymka w demo: full lub minimal."
@@ -805,60 +904,70 @@ msgstr "Mrugnij albo lekko obróć głowę."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "Odblokowywanie twarzą jest wstrzymane po zbyt wielu próbach. Użyj hasła."
+msgstr ""
+"Odblokowywanie twarzą jest wstrzymane po zbyt wielu próbach. Użyj hasła."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Nie rozpoznano twarzy."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Skonfiguruj odblokowywanie twarzą"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Odblokowywanie twarzą"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Potwierdź, że to ty"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Wszystko gotowe"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "Konfiguracja nie została ukończona"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Spójrz w kamerę, a potem powoli zatocz głową koło. Twoja twarz jest zamieniana na liczby na tym komputerze i nigdy nie jest zapisywana jako obraz."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Spójrz w kamerę, a potem powoli zatocz głową koło. Twoja twarz jest "
+"zamieniana na liczby na tym komputerze i nigdy nie jest zapisywana jako "
+"obraz."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Zablokuj ekran i spójrz na niego, aby wypróbować. W menu możesz dodać drugi wygląd, na przykład w okularach."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Zablokuj ekran i spójrz na niego, aby wypróbować. W menu możesz dodać drugi "
+"wygląd, na przykład w okularach."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Nazwa (opcjonalnie)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Anuluj"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Zakończ teraz"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Spróbuj ponownie"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Zaczynamy"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Gotowe"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 5f7bce6..b20cc1e 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:55+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Brazilian Portuguese\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "O serviço de desbloqueio facial precisa ser ativado uma vez neste computador. Para isso, é preciso a sua senha."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"O serviço de desbloqueio facial precisa ser ativado uma vez neste "
+"computador. Para isso, é preciso a sua senha."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Verifique com: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Para configurar um rosto, a imagem da câmera precisa aparecer na tela. Execute isto dentro da sua sessão do Plasma."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Para configurar um rosto, a imagem da câmera precisa aparecer na tela. "
+"Execute isto dentro da sua sessão da área de trabalho."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -39,7 +47,8 @@ msgstr "O rosto está configurado."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "O desbloqueio facial ainda está desativado. Ative com [1] ou `%s enable`."
+msgstr ""
+"O desbloqueio facial ainda está desativado. Ative com [1] ou `%s enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +58,8 @@ msgstr "Nenhum rosto foi adicionado."
msgid "First, set up your face."
msgstr "Primeiro, configure o seu rosto."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Não foi possível salvar a configuração."
@@ -58,137 +67,148 @@ msgstr "Não foi possível salvar a configuração."
msgid "Could not start the lock screen agent."
msgstr "Não foi possível iniciar o agente da tela de bloqueio."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "Sem sessão de usuário do systemd, então o agente da tela de bloqueio não foi iniciado."
+msgstr ""
+"Sem sessão de usuário do systemd, então o agente da tela de bloqueio não foi "
+"iniciado."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "O desbloqueio facial está ativado. Bloqueie a tela e olhe para ela para testar."
+msgstr ""
+"O desbloqueio facial está ativado. Bloqueie a tela e olhe para ela para "
+"testar."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
-msgstr "Ele também funciona com sudo e pedidos de administrador. Veja Configurações."
+msgstr ""
+"Ele também funciona com sudo e pedidos de administrador. Veja Configurações."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "O desbloqueio facial está desativado. Seus rostos são mantidos; apague-os em Rostos."
+msgstr ""
+"O desbloqueio facial está desativado. Seus rostos são mantidos; apague-os em "
+"Rostos."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Nenhum rosto configurado ainda."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "ativado"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "desativado"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s amostras, %s aprendidas"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Qual rosto? Veja `%s faces` para os IDs."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Apagado."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Uso: face-unlock [comando]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Comandos:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Ativar o desbloqueio facial"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Desativar (os rostos são mantidos)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Adicionar um rosto"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Listar os rostos"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Apagar um rosto"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Olhar para a câmera e ver o que ela vê"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Mostrar o que está ativado"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Mostrar esta ajuda"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Mostrar a versão"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Sem comando, um menu interativo é exibido."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Execute isto com o seu próprio usuário, não como root. Ele pede a sua senha quando precisa."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Execute isto com o seu próprio usuário, não como root. Ele pede a sua senha "
+"quando precisa."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Comando desconhecido: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "nunca"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "agora mesmo"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "há 1 minuto"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "há %d minutos"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "há 1 hora"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "há %d horas"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "há 1 dia"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "há %d dias"
@@ -218,14 +238,17 @@ msgid "No face in view."
msgstr "Nenhum rosto à vista."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "O desbloqueio facial está pausado após tentativas demais. Desbloqueie uma vez com a sua senha."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"O desbloqueio facial está pausado após tentativas demais. Desbloqueie uma "
+"vez com a sua senha."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "Não foi possível usar a câmera."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Os modelos de reconhecimento estão faltando. Reinstale o pacote."
@@ -317,19 +340,23 @@ msgid "Sign of life: %s"
msgstr "Sinal de vida: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Tentativas demais. O desbloqueio facial está pausado até você desbloquear com a sua senha."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Tentativas demais. O desbloqueio facial está pausado até você desbloquear "
+"com a sua senha."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[s/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "ATIVADO"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "DESATIVADO"
@@ -370,7 +397,7 @@ msgstr "lenta"
msgid "%s seconds"
msgstr "%s segundos"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "automática"
@@ -390,8 +417,8 @@ msgstr "parado"
msgid "Turning face unlock on again starts it."
msgstr "Ativar o desbloqueio facial de novo o inicia."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Rostos"
@@ -415,167 +442,231 @@ msgstr "Câmera"
msgid "Lock screen"
msgstr "Tela de bloqueio"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Pedidos de administrador"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Detecção de foto"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "Pausado"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "por mais %d minutos, ou até a senha ser usada"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Último desbloqueio"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Desbloqueia a tela de bloqueio quando vê o seu rosto. Desativado: lá só a sua senha funciona."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "O agente da tela de bloqueio não está em execução."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Faz a leitura quando você aperta uma tecla ou mexe o mouse na tela de bloqueio, e quando o computador acorda."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"O GNOME não deixa outros programas aparecerem sobre as janelas dele, então "
+"no GNOME não há bolha."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Faz a leitura assim que a tela é bloqueada. Desativado por padrão: se você mesmo bloquear, ela desbloquearia logo em seguida."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Desbloqueia a tela de bloqueio quando vê o seu rosto. Desativado: lá só a "
+"sua senha funciona."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "O sudo usa o seu rosto em vez da senha. Se não corresponder, você digita a senha como sempre."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Faz a leitura quando você aperta uma tecla ou mexe o mouse na tela de "
+"bloqueio, e quando o computador acorda."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "As janelas de senha do Plasma e dos apps, por exemplo ao instalar programas. Se não corresponder, você digita a senha."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Faz a leitura assim que a tela é bloqueada. Desativado por padrão: se você "
+"mesmo bloquear, ela desbloquearia logo em seguida."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Você precisa piscar ou virar um pouco a cabeça. Isso também barra fotos impressas."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"O sudo usa o seu rosto em vez da senha. Se não corresponder, você digita a "
+"senha como sempre."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"As janelas de senha da sua área de trabalho e dos apps, por exemplo ao "
+"instalar programas. Se não corresponder, você digita a senha."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Você precisa piscar ou virar um pouco a cabeça. Isso também barra fotos "
+"impressas."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Nenhuma verificação. Só para testar uma câmera."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Barra fotos em celular, tablet ou papel brilhante. Não é preciso piscar. Uma foto impressa em papel fosco pode passar."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Barra fotos em celular, tablet ou papel brilhante. Não é preciso piscar. Uma "
+"foto impressa em papel fosco pode passar."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Menos confusões, mas talvez não reconheça você de óculos ou com pouca luz."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Menos confusões, mas talvez não reconheça você de óculos ou com pouca luz."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
-msgstr "Reconhece você com mais facilidade, mas também alguém muito parecido com você."
+msgstr ""
+"Reconhece você com mais facilidade, mas também alguém muito parecido com "
+"você."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "O padrão. Serve para a maioria das pessoas."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Seus olhos precisam estar abertos e voltados para a tela. Assim não desbloqueia enquanto você olha para outro lado ou dorme."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Seus olhos precisam estar abertos e voltados para a tela. Assim não "
+"desbloqueia enquanto você olha para outro lado ou dorme."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Automática usa a primeira câmera normal. Depois de trocar, configure o seu rosto de novo. Uma câmera infravermelha precisa da luz ligada (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Automática usa a primeira câmera normal. Depois de trocar, configure o seu "
+"rosto de novo. Uma câmera infravermelha precisa da luz ligada (linux-enable-"
+"ir-emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Quanto tempo a câmera procura o seu rosto antes de desistir."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Após uma correspondência segura, ele guarda a sua aparência atual. Assim, um corte de cabelo novo ou óculos não exigem nova configuração."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Após uma correspondência segura, ele guarda a sua aparência atual. Assim, um "
+"corte de cabelo novo ou óculos não exigem nova configuração."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Nenhuma leitura com o notebook fechado, por exemplo numa mesa com uma tela externa."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Nenhuma leitura com o notebook fechado, por exemplo numa mesa com uma tela "
+"externa."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "A bolha no topo da tela mostra o que a câmera está fazendo."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Uma pequena pílula com um cadeado que se abre."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Uma ilha com um rosto que olha em volta, depois anéis e um visto."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "A velocidade com que a bolha se move."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "Mostra a bolha também quando o sudo ou um pedido de administrador lê o seu rosto."
+msgstr ""
+"Mostra a bolha também quando o sudo ou um pedido de administrador lê o seu "
+"rosto."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automática (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(infravermelha)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(não conectada)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Configurações"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ escolher ←→ ou Espaço: mudar q: voltar"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "para todos os usuários, pede a sua senha"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Cima/Baixo: escolher, Espaço: ativar/desativar, r: renomear, d: apagar, a: adicionar, q: voltar"
+msgstr ""
+"Cima/Baixo: escolher, Espaço: ativar/desativar, r: renomear, d: apagar, a: "
+"adicionar, q: voltar"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Nenhum rosto configurado ainda. Aperte a para adicionar um."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Novo nome:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Apagar \"%s\"?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Ativar ou desativar o desbloqueio facial"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Testar"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Sair"
@@ -607,6 +698,14 @@ msgstr "Configuração inválida: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Não pode ser usado para este serviço: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"O Hyprland não inicia o agente da tela de bloqueio sozinho. Adicione esta "
+"linha a %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Desbloquear com o rosto"
@@ -757,7 +856,8 @@ msgstr "Não foi possível usar a câmera: %1"
#: src/agent/enrollcontroller.cpp:197
msgid "The face recognition models are missing. Reinstall the package."
-msgstr "Os modelos de reconhecimento facial estão faltando. Reinstale o pacote."
+msgstr ""
+"Os modelos de reconhecimento facial estão faltando. Reinstale o pacote."
#: src/agent/enrollcontroller.cpp:199
msgid "That took too long. Try again, in good light."
@@ -765,7 +865,9 @@ msgstr "Demorou demais. Tente de novo, com boa luz."
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "O serviço de desbloqueio facial não está em execução. Ative o desbloqueio facial primeiro."
+msgstr ""
+"O serviço de desbloqueio facial não está em execução. Ative o desbloqueio "
+"facial primeiro."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
@@ -775,23 +877,25 @@ msgstr "A câmera está ocupada com outra leitura. Tente de novo em instantes."
msgid "The face could not be added (%1)."
msgstr "Não foi possível adicionar o rosto (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Desbloqueio facial para o KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr ""
+"Desbloqueio facial para a tela de bloqueio, o sudo e os pedidos de "
+"administrador"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Configurar um rosto."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Como chamar o novo rosto."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Reproduzir as animações da bolha uma vez."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Estilo da bolha para a demonstração: full ou minimal."
@@ -805,60 +909,69 @@ msgstr "Pisque ou vire um pouco a cabeça."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "O desbloqueio facial está pausado após tentativas demais. Use a sua senha."
+msgstr ""
+"O desbloqueio facial está pausado após tentativas demais. Use a sua senha."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Rosto não reconhecido."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Configurar o desbloqueio facial"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Desbloqueio facial"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Confirme que é você"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Tudo pronto"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "A configuração não terminou"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Olhe para a câmera e depois mova a cabeça devagar em círculo. Seu rosto é transformado em números neste computador e nunca é salvo como imagem."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Olhe para a câmera e depois mova a cabeça devagar em círculo. Seu rosto é "
+"transformado em números neste computador e nunca é salvo como imagem."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Bloqueie a tela e olhe para ela para testar. Você pode adicionar uma segunda aparência, de óculos por exemplo, pelo menu."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Bloqueie a tela e olhe para ela para testar. Você pode adicionar uma segunda "
+"aparência, de óculos por exemplo, pelo menu."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Nome (opcional)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Cancelar"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Concluir agora"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Tentar de novo"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Começar"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Concluído"
diff --git a/po/ru.po b/po/ru.po
index 2039c01..f443dc8 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Russian\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "Службу разблокировки по лицу нужно один раз включить на этом компьютере. Для этого нужен ваш пароль."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"Службу разблокировки по лицу нужно один раз включить на этом компьютере. Для "
+"этого нужен ваш пароль."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Проверьте командой: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Для настройки лица изображение с камеры должно быть видно на экране. Запустите это в своём сеансе Plasma."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Для настройки лица изображение с камеры должно быть видно на экране. "
+"Запустите это в своём сеансе рабочего стола."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -39,7 +47,9 @@ msgstr "Лицо настроено."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "Разблокировка по лицу всё ещё выключена. Включите её через [1] или `%s enable`."
+msgstr ""
+"Разблокировка по лицу всё ещё выключена. Включите её через [1] или `%s "
+"enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +59,8 @@ msgstr "Лицо не добавлено."
msgid "First, set up your face."
msgstr "Сначала настройте своё лицо."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Не удалось сохранить настройку."
@@ -58,137 +68,147 @@ msgstr "Не удалось сохранить настройку."
msgid "Could not start the lock screen agent."
msgstr "Не удалось запустить агент экрана блокировки."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "Нет пользовательского сеанса systemd, поэтому агент экрана блокировки не запущен."
+msgstr ""
+"Нет пользовательского сеанса systemd, поэтому агент экрана блокировки не "
+"запущен."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "Разблокировка по лицу включена. Заблокируйте экран и посмотрите на него, чтобы попробовать."
+msgstr ""
+"Разблокировка по лицу включена. Заблокируйте экран и посмотрите на него, "
+"чтобы попробовать."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Она работает и для sudo, и для запросов администратора. См. Настройки."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "Разблокировка по лицу выключена. Ваши лица сохранены; удалить их можно в разделе Лица."
+msgstr ""
+"Разблокировка по лицу выключена. Ваши лица сохранены; удалить их можно в "
+"разделе Лица."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Ещё не настроено ни одного лица."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "вкл."
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "выкл."
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "образцов: %s, выучено: %s"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Какое лицо? Номера показывает `%s faces`."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Удалено."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Использование: face-unlock [команда]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Команды:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Включить разблокировку по лицу"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Выключить её (лица сохраняются)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Добавить лицо"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Показать список лиц"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Удалить лицо"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Посмотреть в камеру и увидеть, что она видит"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Показать, что включено"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Показать эту справку"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Показать версию"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Без команды открывается интерактивное меню."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Запускайте это от своего пользователя, не от root. Пароль будет запрошен, когда он понадобится."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Запускайте это от своего пользователя, не от root. Пароль будет запрошен, "
+"когда он понадобится."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Неизвестная команда: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "никогда"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "только что"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 минуту назад"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d мин назад"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 час назад"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d ч назад"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 день назад"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d дн. назад"
@@ -218,14 +238,17 @@ msgid "No face in view."
msgstr "Лица не видно."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "Разблокировка по лицу приостановлена после слишком многих попыток. Разблокируйте один раз паролем."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"Разблокировка по лицу приостановлена после слишком многих попыток. "
+"Разблокируйте один раз паролем."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "Не удалось использовать камеру."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Нет моделей распознавания. Переустановите пакет."
@@ -317,19 +340,23 @@ msgid "Sign of life: %s"
msgstr "Признак жизни: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Слишком много попыток. Разблокировка по лицу приостановлена, пока вы не разблокируете паролем."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Слишком много попыток. Разблокировка по лицу приостановлена, пока вы не "
+"разблокируете паролем."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[д/Н]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "ВКЛ"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "ВЫКЛ"
@@ -370,7 +397,7 @@ msgstr "медленная"
msgid "%s seconds"
msgstr "%s с"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "автоматически"
@@ -390,8 +417,8 @@ msgstr "не запущена"
msgid "Turning face unlock on again starts it."
msgstr "Повторное включение разблокировки по лицу запустит её."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Лица"
@@ -415,167 +442,230 @@ msgstr "Камера"
msgid "Lock screen"
msgstr "Экран блокировки"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Запросы администратора"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Проверка на фото"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "Приостановлено"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "ещё %d мин или до ввода пароля"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Последняя разблокировка"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Снимает блокировку экрана, когда видит ваше лицо. Выкл.: там работает только пароль."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "Агент экрана блокировки не запущен."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Сканирует, когда вы нажимаете клавишу или двигаете мышь на экране блокировки, и когда компьютер просыпается."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME не позволяет другим программам показываться поверх своих окон, поэтому "
+"в GNOME пузыря нет."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Сканирует сразу после блокировки экрана. По умолчанию выкл.: если вы блокируете сами, он тут же разблокировался бы."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Снимает блокировку экрана, когда видит ваше лицо. Выкл.: там работает только "
+"пароль."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo принимает ваше лицо вместо пароля. Не совпало: вы вводите пароль как обычно."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Сканирует, когда вы нажимаете клавишу или двигаете мышь на экране "
+"блокировки, и когда компьютер просыпается."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Окна ввода пароля Plasma и приложений, например при установке программ. Не совпало: вы вводите пароль."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Сканирует сразу после блокировки экрана. По умолчанию выкл.: если вы "
+"блокируете сами, он тут же разблокировался бы."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Нужно моргнуть или слегка повернуть голову. Это также останавливает распечатанные фото."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo принимает ваше лицо вместо пароля. Не совпало: вы вводите пароль как "
+"обычно."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"Окна ввода пароля рабочего стола и приложений, например при установке "
+"программ. Не совпало: вы вводите пароль."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Нужно моргнуть или слегка повернуть голову. Это также останавливает "
+"распечатанные фото."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Никакой проверки. Только чтобы опробовать камеру."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Останавливает фото на телефоне, планшете или глянцевой бумаге. Моргать не нужно. Матовое распечатанное фото может пройти."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Останавливает фото на телефоне, планшете или глянцевой бумаге. Моргать не "
+"нужно. Матовое распечатанное фото может пройти."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Меньше ошибочных совпадений, но может не узнать вас в очках или при плохом свете."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Меньше ошибочных совпадений, но может не узнать вас в очках или при плохом "
+"свете."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Узнаёт вас легче, но и того, кто очень на вас похож."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "По умолчанию. Подходит большинству."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Ваши глаза должны быть открыты и смотреть на экран. Так он не разблокируется, пока вы смотрите в сторону или спите."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Ваши глаза должны быть открыты и смотреть на экран. Так он не "
+"разблокируется, пока вы смотрите в сторону или спите."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Автоматически берётся первая обычная камера. После смены настройте лицо заново. Инфракрасной камере нужна включённая подсветка (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Автоматически берётся первая обычная камера. После смены настройте лицо "
+"заново. Инфракрасной камере нужна включённая подсветка (linux-enable-ir-"
+"emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Как долго камера ищет ваше лицо, прежде чем сдаться."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "После уверенного совпадения запоминает, как вы выглядите сейчас. Новая стрижка или очки не требуют новой настройки."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"После уверенного совпадения запоминает, как вы выглядите сейчас. Новая "
+"стрижка или очки не требуют новой настройки."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Без сканирования, когда ноутбук закрыт, например за столом с внешним монитором."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Без сканирования, когда ноутбук закрыт, например за столом с внешним "
+"монитором."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Пузырь вверху экрана показывает, что делает камера."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Маленькая таблетка с замком, который открывается."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Остров с лицом, которое оглядывается, затем кольца и галочка."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "Как быстро движется пузырь."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "Показывает пузырь и тогда, когда sudo или запрос администратора сканирует ваше лицо."
+msgstr ""
+"Показывает пузырь и тогда, когда sudo или запрос администратора сканирует "
+"ваше лицо."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "автоматически (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(инфракрасная)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(не подключена)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Настройки"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ выбор ←→ или Пробел: изменить q: назад"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "для всех пользователей, запрашивает пароль"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Вверх/Вниз: выбор, Пробел: вкл./выкл., r: переименовать, d: удалить, a: добавить, q: назад"
+msgstr ""
+"Вверх/Вниз: выбор, Пробел: вкл./выкл., r: переименовать, d: удалить, a: "
+"добавить, q: назад"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Ещё не настроено ни одного лица. Нажмите a, чтобы добавить."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Новое имя:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Удалить «%s»?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Включить или выключить разблокировку по лицу"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Попробовать"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Выход"
@@ -607,6 +697,13 @@ msgstr "Недопустимая настройка: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Для этой службы использовать нельзя: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland сам не запускает агент экрана блокировки. Добавьте эту строку в %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Разблокировать по лицу"
@@ -761,11 +858,14 @@ msgstr "Нет моделей распознавания лиц. Переуст
#: src/agent/enrollcontroller.cpp:199
msgid "That took too long. Try again, in good light."
-msgstr "Это заняло слишком много времени. Попробуйте ещё раз при хорошем свете."
+msgstr ""
+"Это заняло слишком много времени. Попробуйте ещё раз при хорошем свете."
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "Служба разблокировки по лицу не запущена. Сначала включите разблокировку по лицу."
+msgstr ""
+"Служба разблокировки по лицу не запущена. Сначала включите разблокировку по "
+"лицу."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
@@ -775,23 +875,24 @@ msgstr "Камера занята другим сканированием. По
msgid "The face could not be added (%1)."
msgstr "Не удалось добавить лицо (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Разблокировка по лицу для KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr ""
+"Разблокировка по лицу для экрана блокировки, sudo и запросов администратора"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Настроить лицо."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Как назвать новое лицо."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Один раз проиграть анимации пузыря."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Стиль пузыря для демо: full или minimal."
@@ -805,60 +906,71 @@ msgstr "Моргните или слегка поверните голову."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "Разблокировка по лицу приостановлена после слишком многих попыток. Введите пароль."
+msgstr ""
+"Разблокировка по лицу приостановлена после слишком многих попыток. Введите "
+"пароль."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Лицо не распознано."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Настройка разблокировки по лицу"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Разблокировка по лицу"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Подтвердите, что это вы"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Всё готово"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "Настройка не завершена"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Посмотрите в камеру, затем медленно поведите головой по кругу. Ваше лицо превращается в числа на этом компьютере и никогда не сохраняется как изображение."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Посмотрите в камеру, затем медленно поведите головой по кругу. Ваше лицо "
+"превращается в числа на этом компьютере и никогда не сохраняется как "
+"изображение."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Заблокируйте экран и посмотрите на него, чтобы попробовать. В меню можно добавить второй облик, например в очках."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Заблокируйте экран и посмотрите на него, чтобы попробовать. В меню можно "
+"добавить второй облик, например в очках."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Имя (необязательно)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Отмена"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Завершить сейчас"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Повторить"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Начать"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Готово"
diff --git a/po/tr.po b/po/tr.po
index 74a5537..a805fae 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Turkish\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "Yüzle kilit açma hizmetinin bu bilgisayarda bir kez açılması gerekiyor. Bunun için parolanız gerekli."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"Yüzle kilit açma hizmetinin bu bilgisayarda bir kez açılması gerekiyor. "
+"Bunun için parolanız gerekli."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Şununla kontrol edin: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Yüz kurmak için kamera görüntüsünün ekranda görünmesi gerekir. Bunu Plasma oturumunuzda çalıştırın."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Yüz kurmak için kamera görüntüsünün ekranda görünmesi gerekir. Bunu masaüstü "
+"oturumunuzda çalıştırın."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -49,8 +57,8 @@ msgstr "Hiç yüz eklenmedi."
msgid "First, set up your face."
msgstr "Önce yüzünüzü kurun."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Ayar kaydedilemedi."
@@ -58,137 +66,144 @@ msgstr "Ayar kaydedilemedi."
msgid "Could not start the lock screen agent."
msgstr "Kilit ekranı aracısı başlatılamadı."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "systemd kullanıcı oturumu yok, bu yüzden kilit ekranı aracısı başlatılmadı."
+msgstr ""
+"systemd kullanıcı oturumu yok, bu yüzden kilit ekranı aracısı başlatılmadı."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr "Yüzle kilit açma açık. Denemek için ekranı kilitleyin ve ona bakın."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "sudo ve yönetici istemlerinde de çalışabilir. Ayarlar'a bakın."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "Yüzle kilit açma kapalı. Yüzleriniz saklanıyor; Yüzler bölümünden silebilirsiniz."
+msgstr ""
+"Yüzle kilit açma kapalı. Yüzleriniz saklanıyor; Yüzler bölümünden "
+"silebilirsiniz."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Henüz hiç yüz kurulmadı."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "açık"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "kapalı"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s örnek, %s öğrenilen"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Hangi yüz? Kimlikler için `%s faces` komutuna bakın."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Silindi."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Kullanım: face-unlock [komut]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Komutlar:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Yüzle kilit açmayı aç"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Kapat (yüzler saklanır)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Yüz ekle"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Yüzleri listele"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Bir yüzü sil"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Kameraya bak ve onun ne gördüğünü gör"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Neyin açık olduğunu göster"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Bu yardımı göster"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Sürümü göster"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Komut verilmezse etkileşimli bir menü gösterilir."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Bunu root olarak değil, kendi kullanıcınızla çalıştırın. Gerektiğinde parolanızı sorar."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Bunu root olarak değil, kendi kullanıcınızla çalıştırın. Gerektiğinde "
+"parolanızı sorar."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Bilinmeyen komut: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "hiçbir zaman"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "az önce"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 dakika önce"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d dakika önce"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 saat önce"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d saat önce"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 gün önce"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d gün önce"
@@ -218,14 +233,17 @@ msgid "No face in view."
msgstr "Görünürde yüz yok."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "Çok fazla denemeden sonra yüzle kilit açma duraklatıldı. Bir kez parolanızla kilidi açın."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"Çok fazla denemeden sonra yüzle kilit açma duraklatıldı. Bir kez parolanızla "
+"kilidi açın."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "Kamera kullanılamadı."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Tanıma modelleri eksik. Paketi yeniden kurun."
@@ -317,19 +335,23 @@ msgid "Sign of life: %s"
msgstr "Canlılık işareti: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Çok fazla deneme oldu. Parolanızla kilidi açana kadar yüzle kilit açma duraklatıldı."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Çok fazla deneme oldu. Parolanızla kilidi açana kadar yüzle kilit açma "
+"duraklatıldı."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[e/H]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "AÇIK"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "KAPALI"
@@ -370,7 +392,7 @@ msgstr "yavaş"
msgid "%s seconds"
msgstr "%s saniye"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "otomatik"
@@ -390,8 +412,8 @@ msgstr "çalışmıyor"
msgid "Turning face unlock on again starts it."
msgstr "Yüzle kilit açmayı yeniden açmak onu başlatır."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Yüzler"
@@ -415,167 +437,227 @@ msgstr "Kamera"
msgid "Lock screen"
msgstr "Kilit ekranı"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Yönetici istemleri"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Fotoğraf denetimi"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "Duraklatıldı"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "%d dakika daha ya da parola kullanılana kadar"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Son kilit açma"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Yüzünüzü görünce kilit ekranını açar. Kapalı: orada yalnızca parolanız çalışır."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "Kilit ekranı aracısı çalışmıyor."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Kilit ekranında bir tuşa bastığınızda ya da fareyi oynattığınızda ve bilgisayar uyandığında tarar."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME başka programların kendi pencerelerinin üstünde görünmesine izin "
+"vermez, bu yüzden GNOME'da baloncuk yoktur."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Ekran kilitlenir kilitlenmez tarar. Varsayılan olarak kapalı: kendiniz kilitlerseniz hemen yeniden açılırdı."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Yüzünüzü görünce kilit ekranını açar. Kapalı: orada yalnızca parolanız "
+"çalışır."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo parola yerine yüzünüzü kullanır. Eşleşmezse parolayı her zamanki gibi yazarsınız."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Kilit ekranında bir tuşa bastığınızda ya da fareyi oynattığınızda ve "
+"bilgisayar uyandığında tarar."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Plasma ve uygulamaların parola pencereleri, örneğin yazılım kurarken. Eşleşmezse parolayı yazarsınız."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Ekran kilitlenir kilitlenmez tarar. Varsayılan olarak kapalı: kendiniz "
+"kilitlerseniz hemen yeniden açılırdı."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Göz kırpmanız ya da başınızı biraz çevirmeniz gerekir. Bu, basılı fotoğrafları da durdurur."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo parola yerine yüzünüzü kullanır. Eşleşmezse parolayı her zamanki gibi "
+"yazarsınız."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"Masaüstünüzün ve uygulamaların parola pencereleri, örneğin yazılım kurarken. "
+"Eşleşmezse parolayı yazarsınız."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Göz kırpmanız ya da başınızı biraz çevirmeniz gerekir. Bu, basılı "
+"fotoğrafları da durdurur."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Hiç denetim yok. Yalnızca bir kamerayı denemek için."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Telefon, tablet ya da parlak kâğıttaki fotoğrafları durdurur. Göz kırpmanız gerekmez. Mat basılı bir fotoğraf geçebilir."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Telefon, tablet ya da parlak kâğıttaki fotoğrafları durdurur. Göz kırpmanız "
+"gerekmez. Mat basılı bir fotoğraf geçebilir."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Daha az yanlış eşleşme, ama gözlükle ya da kötü ışıkta sizi tanımayabilir."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Daha az yanlış eşleşme, ama gözlükle ya da kötü ışıkta sizi tanımayabilir."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Sizi daha kolay tanır, ama size çok benzeyen birini de."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "Varsayılan. Çoğu kişi için uygun."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Gözleriniz açık ve ekrana dönük olmalı. Böylece başka yere bakarken ya da uyurken kilit açılmaz."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Gözleriniz açık ve ekrana dönük olmalı. Böylece başka yere bakarken ya da "
+"uyurken kilit açılmaz."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Otomatik, ilk normal kamerayı seçer. Değiştirdikten sonra yüzünüzü yeniden kurun. Kızılötesi kameranın ışığının açık olması gerekir (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Otomatik, ilk normal kamerayı seçer. Değiştirdikten sonra yüzünüzü yeniden "
+"kurun. Kızılötesi kameranın ışığının açık olması gerekir (linux-enable-ir-"
+"emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Kameranın vazgeçmeden önce yüzünüzü ne kadar aradığı."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Kesin bir eşleşmeden sonra şu anki görünüşünüzü hatırlar. Böylece yeni saç kesimi ya da gözlük yeniden kurulum gerektirmez."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Kesin bir eşleşmeden sonra şu anki görünüşünüzü hatırlar. Böylece yeni saç "
+"kesimi ya da gözlük yeniden kurulum gerektirmez."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
msgstr "Dizüstü kapalıyken tarama yok, örneğin harici ekranlı bir masada."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Ekranın üstündeki baloncuk kameranın ne yaptığını gösterir."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Açılan bir kilidi olan küçük bir hap."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
-msgstr "Etrafına bakan bir yüzü olan bir ada, ardından halkalar ve bir onay işareti."
+msgstr ""
+"Etrafına bakan bir yüzü olan bir ada, ardından halkalar ve bir onay işareti."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "Baloncuğun ne kadar hızlı hareket ettiği."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "sudo ya da bir yönetici istemi yüzünüzü taradığında da baloncuğu gösterir."
+msgstr ""
+"sudo ya da bir yönetici istemi yüzünüzü taradığında da baloncuğu gösterir."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "otomatik (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(kızılötesi)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(bağlı değil)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Ayarlar"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ seç ←→ ya da Boşluk: değiştir q: geri"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "tüm kullanıcılar için, parolanızı sorar"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Yukarı/Aşağı: seç, Boşluk: aç/kapat, r: yeniden adlandır, d: sil, a: ekle, q: geri"
+msgstr ""
+"Yukarı/Aşağı: seç, Boşluk: aç/kapat, r: yeniden adlandır, d: sil, a: ekle, "
+"q: geri"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Henüz hiç yüz kurulmadı. Eklemek için a tuşuna basın."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Yeni ad:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "\"%s\" silinsin mi?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Yüzle kilit açmayı aç ya da kapat"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Dene"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Çık"
@@ -607,6 +689,14 @@ msgstr "Geçerli bir ayar değil: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Bunun için kullanılamaz: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland kilit ekranı aracısını kendiliğinden başlatmaz. Bu satırı %s "
+"dosyasına ekleyin:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Yüzünüzle kilidi açın"
@@ -775,23 +865,23 @@ msgstr "Kamera başka bir taramayla meşgul. Birazdan yeniden deneyin."
msgid "The face could not be added (%1)."
msgstr "Yüz eklenemedi (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "KDE Plasma için yüzle kilit açma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr "Kilit ekranı, sudo ve yönetici istemleri için yüzle kilit açma"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Bir yüz kur."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Yeni yüzün adı."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Baloncuğun animasyonlarını bir kez oynat."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Demo için baloncuk stili: full ya da minimal."
@@ -805,60 +895,70 @@ msgstr "Göz kırpın ya da başınızı biraz çevirin."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "Çok fazla denemeden sonra yüzle kilit açma duraklatıldı. Parolanızı kullanın."
+msgstr ""
+"Çok fazla denemeden sonra yüzle kilit açma duraklatıldı. Parolanızı kullanın."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Yüz tanınmadı."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Yüzle kilit açmayı kur"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Yüzle kilit açma"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Siz olduğunuzu onaylayın"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Her şey hazır"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "Kurulum tamamlanmadı"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Kameraya bakın, sonra başınızı yavaşça bir daire çizerek hareket ettirin. Yüzünüz bu bilgisayarda sayılara dönüştürülür ve asla resim olarak kaydedilmez."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Kameraya bakın, sonra başınızı yavaşça bir daire çizerek hareket ettirin. "
+"Yüzünüz bu bilgisayarda sayılara dönüştürülür ve asla resim olarak "
+"kaydedilmez."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Denemek için ekranı kilitleyin ve ona bakın. Menüden ikinci bir görünüm, örneğin gözlüklü, ekleyebilirsiniz."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Denemek için ekranı kilitleyin ve ona bakın. Menüden ikinci bir görünüm, "
+"örneğin gözlüklü, ekleyebilirsiniz."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Ad (isteğe bağlı)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "İptal"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Şimdi bitir"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Yeniden dene"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Başlayalım"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Bitti"
diff --git a/po/uk.po b/po/uk.po
index 439d07d..53e8e5b 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Ukrainian\n"
@@ -16,8 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
-msgstr "Службу розблокування обличчям треба один раз увімкнути на цьому комп'ютері. Для цього потрібен ваш пароль."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
+msgstr ""
+"Службу розблокування обличчям треба один раз увімкнути на цьому комп'ютері. "
+"Для цього потрібен ваш пароль."
#: src/face-unlock:57
#, sh-printf-format
@@ -25,8 +29,12 @@ msgid "Check it with: systemctl status %s"
msgstr "Перевірте командою: systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "Для налаштування обличчя зображення з камери має бути видно на екрані. Запустіть це у своєму сеансі Plasma."
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr ""
+"Для налаштування обличчя зображення з камери має бути видно на екрані. "
+"Запустіть це у своєму сеансі робочого столу."
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -39,7 +47,9 @@ msgstr "Обличчя налаштовано."
#: src/face-unlock:83
#, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
-msgstr "Розблокування обличчям досі вимкнено. Увімкніть його через [1] або `%s enable`."
+msgstr ""
+"Розблокування обличчям досі вимкнено. Увімкніть його через [1] або `%s "
+"enable`."
#: src/face-unlock:87
msgid "No face was added."
@@ -49,8 +59,8 @@ msgstr "Обличчя не додано."
msgid "First, set up your face."
msgstr "Спершу налаштуйте своє обличчя."
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "Не вдалося зберегти налаштування."
@@ -58,137 +68,148 @@ msgstr "Не вдалося зберегти налаштування."
msgid "Could not start the lock screen agent."
msgstr "Не вдалося запустити агент екрана блокування."
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
-msgstr "Немає користувацького сеансу systemd, тому агент екрана блокування не запущено."
+msgstr ""
+"Немає користувацького сеансу systemd, тому агент екрана блокування не "
+"запущено."
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
-msgstr "Розблокування обличчям увімкнено. Заблокуйте екран і подивіться на нього, щоб спробувати."
+msgstr ""
+"Розблокування обличчям увімкнено. Заблокуйте екран і подивіться на нього, "
+"щоб спробувати."
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
-msgstr "Воно працює і для sudo, і для запитів адміністратора. Див. Налаштування."
+msgstr ""
+"Воно працює і для sudo, і для запитів адміністратора. Див. Налаштування."
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
-msgstr "Розблокування обличчям вимкнено. Ваші обличчя збережено; видалити їх можна в розділі Обличчя."
+msgstr ""
+"Розблокування обличчям вимкнено. Ваші обличчя збережено; видалити їх можна в "
+"розділі Обличчя."
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Ще не налаштовано жодного обличчя."
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "увімк."
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "вимк."
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "зразків: %s, вивчено: %s"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Яке обличчя? Номери показує `%s faces`."
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "Видалено."
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "Використання: face-unlock [команда]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "Команди:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "Увімкнути розблокування обличчям"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "Вимкнути його (обличчя зберігаються)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "Додати обличчя"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "Показати список облич"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "Видалити обличчя"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "Подивитися в камеру і побачити, що вона бачить"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "Показати, що увімкнено"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "Показати цю довідку"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "Показати версію"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "Без команди відкривається інтерактивне меню."
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
-msgstr "Запускайте це від свого користувача, не від root. Пароль буде запитано, коли він знадобиться."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
+msgstr ""
+"Запускайте це від свого користувача, не від root. Пароль буде запитано, коли "
+"він знадобиться."
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Невідома команда: %s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "ніколи"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "щойно"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 хвилину тому"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d хв тому"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 годину тому"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d год тому"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 день тому"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d дн. тому"
@@ -218,14 +239,17 @@ msgid "No face in view."
msgstr "Обличчя не видно."
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
-msgstr "Розблокування обличчям призупинено після надто багатьох спроб. Розблокуйте один раз паролем."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
+msgstr ""
+"Розблокування обличчям призупинено після надто багатьох спроб. Розблокуйте "
+"один раз паролем."
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "Не вдалося використати камеру."
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "Немає моделей розпізнавання. Перевстановіть пакунок."
@@ -317,19 +341,23 @@ msgid "Sign of life: %s"
msgstr "Ознака життя: %s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
-msgstr "Надто багато спроб. Розблокування обличчям призупинено, доки ви не розблокуєте паролем."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
+msgstr ""
+"Надто багато спроб. Розблокування обличчям призупинено, доки ви не "
+"розблокуєте паролем."
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
#: src/lib/menu.sh:141
msgid "[y/N]"
msgstr "[т/Н]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "УВІМК"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "ВИМК"
@@ -370,7 +398,7 @@ msgstr "повільна"
msgid "%s seconds"
msgstr "%s с"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "автоматично"
@@ -390,8 +418,8 @@ msgstr "не запущена"
msgid "Turning face unlock on again starts it."
msgstr "Повторне ввімкнення розблокування обличчям запустить її."
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "Обличчя"
@@ -415,167 +443,229 @@ msgstr "Камера"
msgid "Lock screen"
msgstr "Екран блокування"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "Запити адміністратора"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "Перевірка на фото"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "Призупинено"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "ще %d хв або до введення пароля"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "Останнє розблокування"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
-msgstr "Розблоковує екран блокування, коли бачить ваше обличчя. Вимк.: там працює лише пароль."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "Агент екрана блокування не запущено."
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
-msgstr "Сканує, коли ви натискаєте клавішу або рухаєте мишею на екрані блокування, і коли комп'ютер прокидається."
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr ""
+"GNOME не дозволяє іншим програмам показуватися поверх своїх вікон, тому в "
+"GNOME бульбашки немає."
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
-msgstr "Сканує одразу після блокування екрана. Типово вимк.: якщо ви блокуєте самі, він одразу б розблокувався."
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
+msgstr ""
+"Розблоковує екран блокування, коли бачить ваше обличчя. Вимк.: там працює "
+"лише пароль."
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
-msgstr "sudo приймає ваше обличчя замість пароля. Не збіглося: ви вводите пароль як зазвичай."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
+msgstr ""
+"Сканує, коли ви натискаєте клавішу або рухаєте мишею на екрані блокування, і "
+"коли комп'ютер прокидається."
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Вікна введення пароля Plasma і програм, наприклад під час встановлення програм. Не збіглося: ви вводите пароль."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
+msgstr ""
+"Сканує одразу після блокування екрана. Типово вимк.: якщо ви блокуєте самі, "
+"він одразу б розблокувався."
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
-msgstr "Треба кліпнути або трохи повернути голову. Це також зупиняє надруковані фото."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
+msgstr ""
+"sudo приймає ваше обличчя замість пароля. Не збіглося: ви вводите пароль як "
+"зазвичай."
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr ""
+"Вікна введення пароля робочого столу і програм, наприклад під час "
+"встановлення програм. Не збіглося: ви вводите пароль."
+
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
+msgstr ""
+"Треба кліпнути або трохи повернути голову. Це також зупиняє надруковані фото."
+
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "Жодної перевірки. Лише щоб випробувати камеру."
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
-msgstr "Зупиняє фото на телефоні, планшеті чи глянцевому папері. Кліпати не треба. Матове надруковане фото може пройти."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
+msgstr ""
+"Зупиняє фото на телефоні, планшеті чи глянцевому папері. Кліпати не треба. "
+"Матове надруковане фото може пройти."
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
-msgstr "Менше хибних збігів, але може не впізнати вас в окулярах або при поганому світлі."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
+msgstr ""
+"Менше хибних збігів, але може не впізнати вас в окулярах або при поганому "
+"світлі."
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Впізнає вас легше, але й того, хто дуже на вас схожий."
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "Типове значення. Підходить більшості."
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
-msgstr "Ваші очі мають бути розплющені й дивитися на екран. Так він не розблокується, коли ви дивитеся вбік або спите."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
+msgstr ""
+"Ваші очі мають бути розплющені й дивитися на екран. Так він не "
+"розблокується, коли ви дивитеся вбік або спите."
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "Автоматично береться перша звичайна камера. Після зміни налаштуйте обличчя знову. Інфрачервоній камері потрібне ввімкнене підсвічування (linux-enable-ir-emitter)."
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"Автоматично береться перша звичайна камера. Після зміни налаштуйте обличчя "
+"знову. Інфрачервоній камері потрібне ввімкнене підсвічування (linux-enable-"
+"ir-emitter)."
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "Як довго камера шукає ваше обличчя, перш ніж здатися."
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
-msgstr "Після впевненого збігу запам'ятовує, як ви виглядаєте зараз. Нова зачіска чи окуляри не потребують нового налаштування."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
+msgstr ""
+"Після впевненого збігу запам'ятовує, як ви виглядаєте зараз. Нова зачіска чи "
+"окуляри не потребують нового налаштування."
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
-msgstr "Без сканування, коли ноутбук закрито, наприклад за столом із зовнішнім монітором."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
+msgstr ""
+"Без сканування, коли ноутбук закрито, наприклад за столом із зовнішнім "
+"монітором."
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Бульбашка вгорі екрана показує, що робить камера."
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "Маленька пігулка із замком, що відкривається."
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Острів з обличчям, яке озирається, потім кільця і галочка."
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "Як швидко рухається бульбашка."
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
-msgstr "Показує бульбашку й тоді, коли sudo або запит адміністратора сканує ваше обличчя."
+msgstr ""
+"Показує бульбашку й тоді, коли sudo або запит адміністратора сканує ваше "
+"обличчя."
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "автоматично (%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(інфрачервона)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(не під'єднана)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "Налаштування"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ вибір ←→ або Пробіл: змінити q: назад"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "для всіх користувачів, запитує пароль"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
-msgstr "Вгору/Вниз: вибір, Пробіл: увімк./вимк., r: перейменувати, d: видалити, a: додати, q: назад"
+msgstr ""
+"Вгору/Вниз: вибір, Пробіл: увімк./вимк., r: перейменувати, d: видалити, a: "
+"додати, q: назад"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "Ще не налаштовано жодного обличчя. Натисніть a, щоб додати."
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "Нова назва:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Видалити «%s»?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "Увімкнути або вимкнути розблокування обличчям"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "Спробувати"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "Вийти"
@@ -607,6 +697,13 @@ msgstr "Неприпустиме налаштування: %s=%s"
msgid "Not a service this can be used for: %s"
msgstr "Для цієї служби використати не можна: %s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr ""
+"Hyprland сам не запускає агент екрана блокування. Додайте цей рядок до %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "Розблоковувати обличчям"
@@ -765,7 +862,9 @@ msgstr "Це тривало надто довго. Спробуйте ще ра
#: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first."
-msgstr "Служба розблокування обличчям не запущена. Спершу увімкніть розблокування обличчям."
+msgstr ""
+"Служба розблокування обличчям не запущена. Спершу увімкніть розблокування "
+"обличчям."
#: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment."
@@ -775,23 +874,24 @@ msgstr "Камера зайнята іншим скануванням. Спро
msgid "The face could not be added (%1)."
msgstr "Не вдалося додати обличчя (%1)."
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "Розблокування обличчям для KDE Plasma"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr ""
+"Розблокування обличчям для екрана блокування, sudo і запитів адміністратора"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "Налаштувати обличчя."
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "Як назвати нове обличчя."
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "Один раз програти анімації бульбашки."
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "Стиль бульбашки для демо: full або minimal."
@@ -805,60 +905,71 @@ msgstr "Кліпніть або трохи поверніть голову."
#: src/pam/pam_face_unlock.c:330
msgid "Face unlock is paused after too many tries. Use your password."
-msgstr "Розблокування обличчям призупинено після надто багатьох спроб. Введіть пароль."
+msgstr ""
+"Розблокування обличчям призупинено після надто багатьох спроб. Введіть "
+"пароль."
#: src/pam/pam_face_unlock.c:334
msgid "Face not recognised."
msgstr "Обличчя не розпізнано."
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "Налаштування розблокування обличчям"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "Розблокування обличчям"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "Підтвердьте, що це ви"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "Усе готово"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "Налаштування не завершено"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "Подивіться в камеру, потім повільно поведіть головою по колу. Ваше обличчя перетворюється на числа на цьому комп'ютері й ніколи не зберігається як зображення."
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"Подивіться в камеру, потім повільно поведіть головою по колу. Ваше обличчя "
+"перетворюється на числа на цьому комп'ютері й ніколи не зберігається як "
+"зображення."
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "Заблокуйте екран і подивіться на нього, щоб спробувати. У меню можна додати другий вигляд, наприклад в окулярах."
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"Заблокуйте екран і подивіться на нього, щоб спробувати. У меню можна додати "
+"другий вигляд, наприклад в окулярах."
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "Назва (необов'язково)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "Скасувати"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "Завершити зараз"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "Повторити"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "Почати"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "Готово"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 8f339b4..4a8af1f 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
-"POT-Creation-Date: 2026-09-24 10:46+0200\n"
+"POT-Creation-Date: 2026-09-25 09:29+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Chinese (simplified)\n"
@@ -16,7 +16,9 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: src/face-unlock:50
-msgid "Face unlock's service has to be switched on once for this computer. That needs your password."
+msgid ""
+"Face unlock's service has to be switched on once for this computer. That "
+"needs your password."
msgstr "人脸解锁服务需要在这台电脑上开启一次。这需要你的密码。"
#: src/face-unlock:57
@@ -25,8 +27,10 @@ msgid "Check it with: systemctl status %s"
msgstr "用以下命令检查:systemctl status %s"
#: src/face-unlock:67
-msgid "Setting up a face needs the camera picture on screen. Run this inside your Plasma session."
-msgstr "设置人脸需要在屏幕上显示摄像头画面。请在你的 Plasma 会话中运行。"
+msgid ""
+"Setting up a face needs the camera picture on screen. Run this inside your "
+"desktop session."
+msgstr "设置人脸需要在屏幕上显示摄像头画面。请在你的桌面会话中运行。"
#: src/face-unlock:71
msgid "The setup window is open. Follow it there."
@@ -49,8 +53,8 @@ msgstr "没有添加人脸。"
msgid "First, set up your face."
msgstr "请先设置你的人脸。"
-#: src/face-unlock:100 src/face-unlock:120 src/lib/menu.sh:434
-#: src/lib/menu.sh:438 src/lib/menu.sh:444 src/lib/menu.sh:446
+#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
+#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
msgid "Could not save the setting."
msgstr "无法保存设置。"
@@ -58,137 +62,139 @@ msgstr "无法保存设置。"
msgid "Could not start the lock screen agent."
msgstr "无法启动锁屏代理。"
-#: src/face-unlock:106
+#: src/face-unlock:107
msgid "No systemd user session, so the lock screen agent was not started."
msgstr "没有 systemd 用户会话,因此未启动锁屏代理。"
-#: src/face-unlock:113
+#: src/face-unlock:114
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr "人脸解锁已开启。锁定屏幕并看着它来试试。"
-#: src/face-unlock:115
+#: src/face-unlock:116
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "它也可以用于 sudo 和管理员授权。见“设置”。"
-#: src/face-unlock:130
+#: src/face-unlock:131
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr "人脸解锁已关闭。你的人脸会保留;可在“人脸”中删除。"
-#: src/face-unlock:144 src/lib/daemon.sh:109
+#: src/face-unlock:145 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "尚未设置任何人脸。"
-#: src/face-unlock:148 src/lib/menu.sh:180 src/lib/menu.sh:594
+#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
msgid "on"
msgstr "开"
-#: src/face-unlock:148 src/lib/menu.sh:182 src/lib/menu.sh:192
-#: src/lib/menu.sh:595
+#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
+#: src/lib/menu.sh:609
msgid "off"
msgstr "关"
-#: src/face-unlock:150 src/lib/menu.sh:612
+#: src/face-unlock:151 src/lib/menu.sh:626
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s 个样本,已学习 %s 个"
-#: src/face-unlock:156
+#: src/face-unlock:157
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "哪张人脸?用 `%s faces` 查看 ID。"
-#: src/face-unlock:160
+#: src/face-unlock:161
msgid "Deleted."
msgstr "已删除。"
-#: src/face-unlock:171
+#: src/face-unlock:172
msgid "Usage: face-unlock [command]"
msgstr "用法:face-unlock [命令]"
-#: src/face-unlock:173
+#: src/face-unlock:174
msgid "Commands:"
msgstr "命令:"
-#: src/face-unlock:174
+#: src/face-unlock:175
msgid "Turn face unlock on"
msgstr "开启人脸解锁"
-#: src/face-unlock:175
+#: src/face-unlock:176
msgid "Turn it off (faces are kept)"
msgstr "关闭(保留人脸)"
-#: src/face-unlock:176 src/lib/menu.sh:678
+#: src/face-unlock:177 src/lib/menu.sh:692
msgid "Add a face"
msgstr "添加人脸"
-#: src/face-unlock:177
+#: src/face-unlock:178
msgid "List the faces"
msgstr "列出人脸"
-#: src/face-unlock:178
+#: src/face-unlock:179
msgid "Delete a face"
msgstr "删除人脸"
-#: src/face-unlock:179
+#: src/face-unlock:180
msgid "Look at the camera and see what it sees"
msgstr "看着摄像头,查看它看到的画面"
-#: src/face-unlock:180
+#: src/face-unlock:181
msgid "Show what is on"
msgstr "显示已开启的功能"
-#: src/face-unlock:181
+#: src/face-unlock:182
msgid "Show this help"
msgstr "显示此帮助"
-#: src/face-unlock:182
+#: src/face-unlock:183
msgid "Show the version"
msgstr "显示版本"
-#: src/face-unlock:184
+#: src/face-unlock:185
msgid "Without a command an interactive menu is shown."
msgstr "不带命令时显示交互式菜单。"
-#: src/face-unlock:203
-msgid "Run this as your own user, not as root. It asks for your password when it needs to."
+#: src/face-unlock:204
+msgid ""
+"Run this as your own user, not as root. It asks for your password when it "
+"needs to."
msgstr "请以你自己的用户运行,不要用 root。需要时会询问你的密码。"
-#: src/face-unlock:221 src/lib/system.sh:89
+#: src/face-unlock:222 src/lib/system.sh:89
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "未知命令:%s"
-#: src/lib/common.sh:160
+#: src/lib/common.sh:169
msgid "never"
msgstr "从未"
-#: src/lib/common.sh:170
+#: src/lib/common.sh:179
msgid "just now"
msgstr "刚刚"
-#: src/lib/common.sh:172
+#: src/lib/common.sh:181
msgid "1 minute ago"
msgstr "1 分钟前"
-#: src/lib/common.sh:175
+#: src/lib/common.sh:184
#, sh-printf-format
msgid "%d minutes ago"
msgstr "%d 分钟前"
-#: src/lib/common.sh:177
+#: src/lib/common.sh:186
msgid "1 hour ago"
msgstr "1 小时前"
-#: src/lib/common.sh:180
+#: src/lib/common.sh:189
#, sh-printf-format
msgid "%d hours ago"
msgstr "%d 小时前"
-#: src/lib/common.sh:182
+#: src/lib/common.sh:191
msgid "1 day ago"
msgstr "1 天前"
-#: src/lib/common.sh:185
+#: src/lib/common.sh:194
#, sh-printf-format
msgid "%d days ago"
msgstr "%d 天前"
@@ -218,14 +224,15 @@ msgid "No face in view."
msgstr "画面中没有人脸。"
#: src/lib/daemon.sh:108
-msgid "Face unlock is paused after too many tries. Unlock once with your password."
+msgid ""
+"Face unlock is paused after too many tries. Unlock once with your password."
msgstr "尝试次数过多,人脸解锁已暂停。请用密码解锁一次。"
#: src/lib/daemon.sh:110
msgid "The camera could not be used."
msgstr "无法使用摄像头。"
-#: src/lib/daemon.sh:111 src/lib/menu.sh:259
+#: src/lib/daemon.sh:111 src/lib/menu.sh:262
msgid "The recognition models are missing. Reinstall the package."
msgstr "缺少识别模型。请重新安装软件包。"
@@ -317,7 +324,9 @@ msgid "Sign of life: %s"
msgstr "活体迹象:%s"
#: src/lib/daemon.sh:173
-msgid "That was too many tries. Face unlock is paused until you unlock with your password."
+msgid ""
+"That was too many tries. Face unlock is paused until you unlock with your "
+"password."
msgstr "尝试次数过多。人脸解锁已暂停,直到你用密码解锁。"
#. TRANSLATORS: the letter after "[" is the key for yes. y works too.
@@ -325,11 +334,11 @@ msgstr "尝试次数过多。人脸解锁已暂停,直到你用密码解锁。
msgid "[y/N]"
msgstr "[y/N]"
-#: src/lib/menu.sh:172 src/lib/menu.sh:497
+#: src/lib/menu.sh:172 src/lib/menu.sh:509
msgid "ON"
msgstr "开启"
-#: src/lib/menu.sh:174 src/lib/menu.sh:498
+#: src/lib/menu.sh:174 src/lib/menu.sh:510
msgid "OFF"
msgstr "关闭"
@@ -370,7 +379,7 @@ msgstr "慢"
msgid "%s seconds"
msgstr "%s 秒"
-#: src/lib/menu.sh:202 src/lib/menu.sh:409
+#: src/lib/menu.sh:202 src/lib/menu.sh:421
msgid "automatic"
msgstr "自动"
@@ -390,8 +399,8 @@ msgstr "未运行"
msgid "Turning face unlock on again starts it."
msgstr "重新开启人脸解锁即可启动它。"
-#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:590
-#: src/lib/menu.sh:679
+#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
+#: src/lib/menu.sh:693
msgid "Faces"
msgstr "人脸"
@@ -415,167 +424,201 @@ msgstr "摄像头"
msgid "Lock screen"
msgstr "锁屏"
-#: src/lib/menu.sh:249
+#: src/lib/menu.sh:252
msgid "sudo"
msgstr "sudo"
-#: src/lib/menu.sh:250 src/lib/menu.sh
+#: src/lib/menu.sh:253 src/lib/menu.sh
msgid "Admin prompts"
msgstr "管理员授权"
-#: src/lib/menu.sh:251 src/lib/menu.sh
+#: src/lib/menu.sh:254 src/lib/menu.sh
msgid "Photo check"
msgstr "照片检测"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
msgid "Paused"
msgstr "已暂停"
-#: src/lib/menu.sh:254
+#: src/lib/menu.sh:257
#, sh-printf-format
msgid "for %d more minutes, or until the password is used"
msgstr "还有 %d 分钟,或直到使用密码"
-#: src/lib/menu.sh:256
+#: src/lib/menu.sh:259
msgid "Last unlock"
msgstr "上次解锁"
-#: src/lib/menu.sh:300
-msgid "Unlocks the lock screen when it sees your face. Off: only your password works there."
+#: src/lib/menu.sh:265
+msgid "The lock screen agent is not running."
+msgstr "锁屏代理没有运行。"
+
+#: src/lib/menu.sh:308
+msgid ""
+"GNOME does not let other programs show above its windows, so there is no "
+"bubble on GNOME."
+msgstr "GNOME 不允许其他程序显示在它的窗口之上,所以 GNOME 上没有气泡。"
+
+#: src/lib/menu.sh:312
+msgid ""
+"Unlocks the lock screen when it sees your face. Off: only your password "
+"works there."
msgstr "看到你的脸时解锁锁屏。关闭:锁屏只能用密码。"
-#: src/lib/menu.sh:301
-msgid "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up."
+#: src/lib/menu.sh:313
+msgid ""
+"Scans when you press a key or move the mouse on the lock screen, and when "
+"the computer wakes up."
msgstr "在锁屏上按键或移动鼠标时,以及电脑唤醒时扫描。"
-#: src/lib/menu.sh:302
-msgid "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away."
+#: src/lib/menu.sh:314
+msgid ""
+"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
+"it would unlock again right away."
msgstr "屏幕一锁定就扫描。默认关闭:如果是你自己锁的屏,它会马上又解锁。"
-#: src/lib/menu.sh:303
-msgid "sudo takes your face instead of the password. No match: you type the password as usual."
+#: src/lib/menu.sh:315
+msgid ""
+"sudo takes your face instead of the password. No match: you type the "
+"password as usual."
msgstr "sudo 用你的脸代替密码。不匹配时,照常输入密码。"
-#: src/lib/menu.sh:304
-msgid "The password windows of Plasma and apps, for example when you install software. No match: you type the password."
-msgstr "Plasma 和应用的密码窗口,例如安装软件时。不匹配时,输入密码即可。"
+#: src/lib/menu.sh:316
+msgid ""
+"The password windows of your desktop and apps, for example when you install "
+"software. No match: you type the password."
+msgstr "桌面和应用的密码窗口,例如安装软件时。不匹配时,输入密码即可。"
-#: src/lib/menu.sh:305
-msgid "You have to blink or turn your head a little. This also stops printed photos."
+#: src/lib/menu.sh:317
+msgid ""
+"You have to blink or turn your head a little. This also stops printed photos."
msgstr "你需要眨眼或稍微转头。这也能挡住打印的照片。"
-#: src/lib/menu.sh:306
+#: src/lib/menu.sh:318
msgid "No check at all. Only for trying out a camera."
msgstr "完全不检测。仅用于试用摄像头。"
-#: src/lib/menu.sh:307
-msgid "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through."
+#: src/lib/menu.sh:319
+msgid ""
+"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
+"A matte printed photo can get through."
msgstr "挡住手机、平板或光面纸上的照片。无需眨眼。哑光纸打印的照片可能会通过。"
-#: src/lib/menu.sh:308
-msgid "Fewer wrong matches, but it may not know you with glasses or in bad light."
+#: src/lib/menu.sh:320
+msgid ""
+"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr "误认更少,但戴眼镜或光线不好时可能认不出你。"
-#: src/lib/menu.sh:309
+#: src/lib/menu.sh:321
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "更容易认出你,但也更容易认出和你长得很像的人。"
-#: src/lib/menu.sh:310
+#: src/lib/menu.sh:322
msgid "The default. Right for most people."
msgstr "默认值。适合大多数人。"
-#: src/lib/menu.sh:311
-msgid "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep."
+#: src/lib/menu.sh:323
+msgid ""
+"Your eyes have to be open and on the screen. So it does not unlock while you "
+"look away or sleep."
msgstr "你的眼睛必须睁开并看着屏幕。这样你看向别处或睡着时不会解锁。"
-#: src/lib/menu.sh:312
-msgid "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)."
-msgstr "“自动”会使用第一个普通摄像头。更换后请重新设置人脸。红外摄像头需要打开它的补光灯(linux-enable-ir-emitter)。"
+#: src/lib/menu.sh:324
+msgid ""
+"Automatic takes the first normal camera. After a change, set up your face "
+"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
+msgstr ""
+"“自动”会使用第一个普通摄像头。更换后请重新设置人脸。红外摄像头需要打开它的补"
+"光灯(linux-enable-ir-emitter)。"
-#: src/lib/menu.sh:313
+#: src/lib/menu.sh:325
msgid "How long the camera looks for your face before it gives up."
msgstr "摄像头寻找你的脸多久后放弃。"
-#: src/lib/menu.sh:314
-msgid "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup."
+#: src/lib/menu.sh:326
+msgid ""
+"After a sure match it keeps how you look now. So a new haircut or glasses "
+"need no new setup."
msgstr "确定匹配后,会记住你现在的样子。所以换了发型或戴上眼镜也无需重新设置。"
-#: src/lib/menu.sh:315
-msgid "No scan while the laptop is closed, for example at a desk with an external screen."
+#: src/lib/menu.sh:327
+msgid ""
+"No scan while the laptop is closed, for example at a desk with an external "
+"screen."
msgstr "笔记本合上时不扫描,例如在接了外接显示器的桌前。"
-#: src/lib/menu.sh:316
+#: src/lib/menu.sh:328
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "屏幕顶部的气泡显示摄像头正在做什么。"
-#: src/lib/menu.sh:317
+#: src/lib/menu.sh:329
msgid "A small pill with a lock that opens."
msgstr "一个带锁的小药丸,锁会打开。"
-#: src/lib/menu.sh:318
+#: src/lib/menu.sh:330
msgid "An island with a face that looks around, then rings and a tick."
msgstr "一个岛,里面有一张四处张望的脸,然后是圆环和一个对勾。"
-#: src/lib/menu.sh:319
+#: src/lib/menu.sh:331
msgid "How fast the bubble moves."
msgstr "气泡移动的速度。"
-#: src/lib/menu.sh:320
+#: src/lib/menu.sh:332
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "sudo 或管理员授权扫描你的脸时也显示气泡。"
-#: src/lib/menu.sh:405
+#: src/lib/menu.sh:417
#, sh-printf-format
msgid "automatic (%s)"
msgstr "自动(%s)"
-#: src/lib/menu.sh:415
+#: src/lib/menu.sh:427
msgid "(infrared)"
msgstr "(红外)"
-#: src/lib/menu.sh:419
+#: src/lib/menu.sh:431
msgid "(not connected)"
msgstr "(未连接)"
-#: src/lib/menu.sh:494 src/lib/menu.sh:680
+#: src/lib/menu.sh:506 src/lib/menu.sh:694
msgid "Settings"
msgstr "设置"
-#: src/lib/menu.sh:495
+#: src/lib/menu.sh:507
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ 选择 ←→ 或空格:更改 q:返回"
-#: src/lib/menu.sh:496
+#: src/lib/menu.sh:508
msgid "for all users, asks for your password"
msgstr "对所有用户生效,需要你的密码"
#. TRANSLATORS: keep the letters, they are the keys.
-#: src/lib/menu.sh:592
+#: src/lib/menu.sh:606
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr "上/下:选择,空格:开/关,r:重命名,d:删除,a:添加,q:返回"
-#: src/lib/menu.sh:593
+#: src/lib/menu.sh:607
msgid "No face is set up yet. Press a to add one."
msgstr "尚未设置任何人脸。按 a 添加。"
-#: src/lib/menu.sh:639
+#: src/lib/menu.sh:653
msgid "New name:"
msgstr "新名称:"
-#: src/lib/menu.sh:646
+#: src/lib/menu.sh:660
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "删除“%s”?"
-#: src/lib/menu.sh:677
+#: src/lib/menu.sh:691
msgid "Turn face unlock on or off"
msgstr "开启或关闭人脸解锁"
-#: src/lib/menu.sh:681
+#: src/lib/menu.sh:695
msgid "Try it"
msgstr "试一试"
-#: src/lib/menu.sh:682
+#: src/lib/menu.sh:696
msgid "Quit"
msgstr "退出"
@@ -607,6 +650,12 @@ msgstr "无效的设置:%s=%s"
msgid "Not a service this can be used for: %s"
msgstr "不能用于此服务:%s"
+#: src/lib/system.sh:131
+#, sh-printf-format
+msgid ""
+"Hyprland does not start the lock screen agent by itself. Add this line to %s:"
+msgstr "Hyprland 不会自动启动锁屏代理。请把这一行加入 %s:"
+
#: src/lib/menu.sh
msgid "Unlock with your face"
msgstr "用人脸解锁"
@@ -775,23 +824,23 @@ msgstr "摄像头正忙于另一次扫描。请稍后重试。"
msgid "The face could not be added (%1)."
msgstr "无法添加人脸(%1)。"
-#: src/agent/main.cpp:85
-msgid "Face unlock for KDE Plasma"
-msgstr "KDE Plasma 人脸解锁"
+#: src/agent/main.cpp:86
+msgid "Face unlock for the lock screen, sudo and admin prompts"
+msgstr "用于锁屏、sudo 和管理员授权的人脸解锁"
-#: src/agent/main.cpp:88
+#: src/agent/main.cpp:89
msgid "Set up a face."
msgstr "设置一张人脸。"
-#: src/agent/main.cpp:89
+#: src/agent/main.cpp:90
msgid "What to call the new face."
msgstr "新人脸的名称。"
-#: src/agent/main.cpp:90
+#: src/agent/main.cpp:91
msgid "Play the bubble's animations once."
msgstr "播放一次气泡动画。"
-#: src/agent/main.cpp:92
+#: src/agent/main.cpp:93
msgid "Bubble style for the demo: full or minimal."
msgstr "演示用的气泡样式:full 或 minimal。"
@@ -811,54 +860,61 @@ msgstr "尝试次数过多,人脸解锁已暂停。请使用密码。"
msgid "Face not recognised."
msgstr "未识别出人脸。"
-#: src/agent/qml/Enroll.qml:22
+#: src/agent/qml/Enroll.qml:27
msgid "Set up Face Unlock"
msgstr "设置人脸解锁"
-#: src/agent/qml/Enroll.qml:105
+#: src/agent/qml/Enroll.qml:110
msgid "Face Unlock"
msgstr "人脸解锁"
-#: src/agent/qml/Enroll.qml:106
+#: src/agent/qml/Enroll.qml:111
msgid "Confirm it is you"
msgstr "确认是你本人"
-#: src/agent/qml/Enroll.qml:107
+#: src/agent/qml/Enroll.qml:112
msgid "You are all set"
msgstr "一切就绪"
-#: src/agent/qml/Enroll.qml:108
+#: src/agent/qml/Enroll.qml:113
msgid "Setup did not finish"
msgstr "设置未完成"
-#: src/agent/qml/Enroll.qml:121
-msgid "Look at the camera, then move your head slowly in a circle. Your face is turned into numbers on this computer and never stored as a picture."
-msgstr "看着摄像头,然后慢慢转动头部画圈。你的脸会在这台电脑上转换为数字,绝不会以图片形式保存。"
+#: src/agent/qml/Enroll.qml:126
+msgid ""
+"Look at the camera, then move your head slowly in a circle. Your face is "
+"turned into numbers on this computer and never stored as a picture."
+msgstr ""
+"看着摄像头,然后慢慢转动头部画圈。你的脸会在这台电脑上转换为数字,绝不会以图"
+"片形式保存。"
-#: src/agent/qml/Enroll.qml:123
-msgid "Lock the screen and look at it to try it out. You can add a second look, with glasses for example, from the menu."
-msgstr "锁定屏幕并看着它来试试。你可以在菜单中添加第二种样貌,比如戴眼镜的样子。"
+#: src/agent/qml/Enroll.qml:128
+msgid ""
+"Lock the screen and look at it to try it out. You can add a second look, "
+"with glasses for example, from the menu."
+msgstr ""
+"锁定屏幕并看着它来试试。你可以在菜单中添加第二种样貌,比如戴眼镜的样子。"
-#: src/agent/qml/Enroll.qml:157
+#: src/agent/qml/Enroll.qml:162
msgid "Name (optional)"
msgstr "名称(可选)"
-#: src/agent/qml/Enroll.qml:172
+#: src/agent/qml/Enroll.qml:177
msgid "Cancel"
msgstr "取消"
-#: src/agent/qml/Enroll.qml:178
+#: src/agent/qml/Enroll.qml:183
msgid "Finish now"
msgstr "立即完成"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Try again"
msgstr "重试"
-#: src/agent/qml/Enroll.qml:183
+#: src/agent/qml/Enroll.qml:188
msgid "Get started"
msgstr "开始"
-#: src/agent/qml/Enroll.qml:188
+#: src/agent/qml/Enroll.qml:193
msgid "Done"
msgstr "完成"
diff --git a/res/applications/io.github.loonixtools.face-unlock-agent.desktop b/res/applications/io.github.loonixtools.face-unlock-agent.desktop
index d563fb7..f82b83c 100644
--- a/res/applications/io.github.loonixtools.face-unlock-agent.desktop
+++ b/res/applications/io.github.loonixtools.face-unlock-agent.desktop
@@ -1,19 +1,19 @@
[Desktop Entry]
Type=Application
Name=Face Unlock
-Name[de]=Plasma-Gesichtsentsperrung
-Name[fr]=Déverrouillage facial Plasma
-Name[es]=Desbloqueo facial de Plasma
-Name[it]=Sblocco con il volto di Plasma
-Name[pt_BR]=Desbloqueio facial do Plasma
-Name[nl]=Plasma-gezichtsontgrendeling
-Name[pl]=Odblokowywanie twarzą w Plasmie
-Name[ru]=Разблокировка по лицу для Plasma
-Name[uk]=Розблокування обличчям для Plasma
-Name[tr]=Plasma yüzle kilit açma
-Name[zh_CN]=Plasma 人脸解锁
-Name[ja]=Plasma 顔認証
-Name[ko]=Plasma 얼굴 잠금 해제
+Name[de]=Gesichtsentsperrung
+Name[fr]=Déverrouillage facial
+Name[es]=Desbloqueo facial
+Name[it]=Sblocco con il volto
+Name[pt_BR]=Desbloqueio facial
+Name[nl]=Gezichtsontgrendeling
+Name[pl]=Odblokowywanie twarzą
+Name[ru]=Разблокировка по лицу
+Name[uk]=Розблокування обличчям
+Name[tr]=Yüzle kilit açma
+Name[zh_CN]=人脸解锁
+Name[ja]=顔認証
+Name[ko]=얼굴 잠금 해제
Comment=Unlocks the lock screen, sudo and admin prompts with your face
Comment[de]=Entsperrt Sperrbildschirm, sudo und Admin-Abfragen mit deinem Gesicht
Comment[fr]=Déverrouille l'écran de verrouillage, sudo et les demandes d'administration avec votre visage
@@ -31,7 +31,6 @@ Comment[ko]=얼굴로 잠금 화면, sudo, 관리자 인증 창의 잠금을 해
Exec=@LIBEXECDIR@/face-unlock-agent
Icon=face-unlock
NoDisplay=true
-OnlyShowIn=KDE;
# KWin only lets a program show above the lock screen when its desktop file
# asks for it by name. This is that file.
X-KDE-Wayland-Interfaces=kde_lockscreen_overlay_v1
diff --git a/res/systemd/face-unlock-agent.service b/res/systemd/face-unlock-agent.service
index fb6dd2c..bcc3e82 100644
--- a/res/systemd/face-unlock-agent.service
+++ b/res/systemd/face-unlock-agent.service
@@ -1,10 +1,10 @@
[Unit]
-Description=Face unlock for KDE Plasma (lock screen and bubble)
+Description=Face unlock (lock screen and bubble)
Documentation=man:face-unlock(1)
PartOf=graphical-session.target
After=graphical-session.target
-# Plasma on Wayland. The bubble is a layer-shell surface, and there is no such
-# thing on X11.
+# Wayland only: the bubble is a layer-shell surface, and the lock screen is
+# watched through the compositor.
ConditionEnvironment=WAYLAND_DISPLAY
[Service]
diff --git a/res/systemd/face-unlockd.service b/res/systemd/face-unlockd.service
index 58da616..cfc7113 100644
--- a/res/systemd/face-unlockd.service
+++ b/res/systemd/face-unlockd.service
@@ -1,5 +1,5 @@
[Unit]
-Description=Face unlock for KDE Plasma
+Description=Face unlock
Documentation=man:face-unlock(1)
Requires=face-unlockd.socket
After=face-unlockd.socket
diff --git a/res/systemd/face-unlockd.socket b/res/systemd/face-unlockd.socket
index d3fdac3..dd20d5b 100644
--- a/res/systemd/face-unlockd.socket
+++ b/res/systemd/face-unlockd.socket
@@ -1,5 +1,5 @@
[Unit]
-Description=Face unlock for KDE Plasma (socket)
+Description=Face unlock (socket)
Documentation=man:face-unlock(1)
[Socket]
diff --git a/src/agent/agentsocket.cpp b/src/agent/agentsocket.cpp
index b0e36e1..3130187 100644
--- a/src/agent/agentsocket.cpp
+++ b/src/agent/agentsocket.cpp
@@ -51,6 +51,13 @@ QString AgentSocket::path()
return QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation) + QStringLiteral("/face-unlock/agent.socket");
}
+bool AgentSocket::running()
+{
+ QLocalSocket probe;
+ probe.connectToServer(path());
+ return probe.waitForConnected(500);
+}
+
bool AgentSocket::listen()
{
const QString p = path();
diff --git a/src/agent/agentsocket.h b/src/agent/agentsocket.h
index d85d52c..4b8045a 100644
--- a/src/agent/agentsocket.h
+++ b/src/agent/agentsocket.h
@@ -22,6 +22,10 @@ public:
explicit AgentSocket(QObject *parent = nullptr);
bool listen();
+ // Whether another agent already listens here. Hyprland without a systemd
+ // session starts the agent from its own config, and that must not make
+ // two of them.
+ static bool running();
static QString path();
Q_SIGNALS:
diff --git a/src/agent/bubblewindow.cpp b/src/agent/bubblewindow.cpp
index 9094e8d..977e255 100644
--- a/src/agent/bubblewindow.cpp
+++ b/src/agent/bubblewindow.cpp
@@ -101,7 +101,8 @@ void BubbleWindow::allowOverLockscreen()
return;
}
if (!m_overlay->isActive()) {
- if (!warned) {
+ // Only KWin has the protocol. Anywhere else there is nothing to fix.
+ if (!warned && qEnvironmentVariable("XDG_CURRENT_DESKTOP").split(u':').contains(u"KDE")) {
warned = true;
qWarning("KWin does not let this program show above the lock screen; is its desktop file installed?");
}
diff --git a/src/agent/bubblewindow.h b/src/agent/bubblewindow.h
index 0318cf8..3f66c2d 100644
--- a/src/agent/bubblewindow.h
+++ b/src/agent/bubblewindow.h
@@ -11,6 +11,10 @@
// file lists the interface, which the one installed with this does. The
// request has to be made for every new surface role, before it is mapped, so
// it is repeated each time the window is shown again.
+//
+// Other compositors have no such thing. On Hyprland and Niri the lock screen
+// covers the bubble, which shows again with the tick once it is gone. GNOME
+// has no layer-shell at all, so there is no bubble there (see main.cpp).
#pragma once
diff --git a/src/agent/inputwatcher.cpp b/src/agent/inputwatcher.cpp
index 5d01760..9b74682 100644
--- a/src/agent/inputwatcher.cpp
+++ b/src/agent/inputwatcher.cpp
@@ -2,6 +2,10 @@
#include "inputwatcher.h"
+#include
+#include
+#include
+#include
#include
#include
#include
@@ -54,6 +58,111 @@ private:
bool m_fired = false;
};
+namespace
+{
+const QString MutterService = QStringLiteral("org.gnome.Mutter.IdleMonitor");
+const QString MutterPath = QStringLiteral("/org/gnome/Mutter/IdleMonitor/Core");
+} // namespace
+
+// GNOME's way: a watch that fires once nothing was touched for the calm,
+// then one that fires at the next input. Each fires once and is gone.
+class MutterIdle : public QObject
+{
+ Q_OBJECT
+public:
+ MutterIdle(std::function input, QObject *parent)
+ : QObject(parent)
+ , m_input(std::move(input))
+ {
+ QDBusConnection::sessionBus().connect(MutterService, MutterPath, MutterService, QStringLiteral("WatchFired"), this, SLOT(onFired(uint)));
+ }
+ ~MutterIdle() override
+ {
+ stop();
+ }
+
+ void watch(int calmMs)
+ {
+ stop();
+ const int generation = m_generation;
+ if (calmMs <= 0) {
+ addWatch(QStringLiteral("AddUserActiveWatch"), {}, generation, &m_active);
+ return;
+ }
+ // Already calm for that long (the scan itself took a while): the
+ // idle watch would wait for the next calm, so go straight on.
+ call(QStringLiteral("GetIdletime"), {}, [this, generation, calmMs](const QDBusMessage &reply) {
+ if (generation != m_generation) {
+ return;
+ }
+ if (reply.arguments().value(0).toULongLong() >= quint64(calmMs)) {
+ addWatch(QStringLiteral("AddUserActiveWatch"), {}, generation, &m_active);
+ } else {
+ addWatch(QStringLiteral("AddIdleWatch"), {QVariant::fromValue(quint64(calmMs))}, generation, &m_idle);
+ }
+ });
+ }
+
+ void stop()
+ {
+ ++m_generation;
+ remove(m_idle);
+ remove(m_active);
+ m_idle = m_active = 0;
+ }
+
+private Q_SLOTS:
+ void onFired(uint id)
+ {
+ if (id != 0 && id == m_idle) {
+ remove(m_idle);
+ m_idle = 0;
+ addWatch(QStringLiteral("AddUserActiveWatch"), {}, m_generation, &m_active);
+ } else if (id != 0 && id == m_active) {
+ m_active = 0;
+ m_input();
+ }
+ }
+
+private:
+ template
+ void call(const QString &method, const QVariantList &args, Done done)
+ {
+ QDBusMessage msg = QDBusMessage::createMethodCall(MutterService, MutterPath, MutterService, method);
+ msg.setArguments(args);
+ auto *watcher = new QDBusPendingCallWatcher(QDBusConnection::sessionBus().asyncCall(msg), this);
+ connect(watcher, &QDBusPendingCallWatcher::finished, this, [watcher, done] {
+ watcher->deleteLater();
+ done(watcher->reply());
+ });
+ }
+
+ void addWatch(const QString &method, const QVariantList &args, int generation, uint *slot)
+ {
+ call(method, args, [this, generation, slot](const QDBusMessage &reply) {
+ const uint id = reply.arguments().value(0).toUInt();
+ if (generation != m_generation) {
+ // Stopped in the meantime.
+ remove(id);
+ return;
+ }
+ *slot = id;
+ });
+ }
+
+ void remove(uint id)
+ {
+ if (id != 0) {
+ call(QStringLiteral("RemoveWatch"), {QVariant::fromValue(id)}, [](const QDBusMessage &) { });
+ }
+ }
+
+ std::function m_input;
+ int m_generation = 0;
+ uint m_idle = 0;
+ uint m_active = 0;
+};
+
InputWatcher::InputWatcher(QObject *parent)
: QObject(parent)
, m_notifier(std::make_unique())
@@ -64,10 +173,21 @@ InputWatcher::~InputWatcher() = default;
void InputWatcher::watch(int calmMs)
{
- m_notification.reset();
+ stop();
auto *wayland = qGuiApp->nativeInterface();
if (!m_notifier->isActive() || !wayland || !wayland->seat()) {
- qWarning("no ext_idle_notifier_v1, so no telling when somebody comes back");
+ if (!m_mutter && QDBusConnection::sessionBus().interface()->isServiceRegistered(MutterService)) {
+ m_mutter = new MutterIdle(
+ [this] {
+ QMetaObject::invokeMethod(this, &InputWatcher::input, Qt::QueuedConnection);
+ },
+ this);
+ }
+ if (m_mutter) {
+ m_mutter->watch(calmMs);
+ } else {
+ qWarning("no ext_idle_notifier_v1 and no Mutter IdleMonitor, so no telling when somebody comes back");
+ }
return;
}
// Version 1 has only the notification that inhibitors hold back.
@@ -84,4 +204,9 @@ void InputWatcher::watch(int calmMs)
void InputWatcher::stop()
{
m_notification.reset();
+ if (m_mutter) {
+ m_mutter->stop();
+ }
}
+
+#include "inputwatcher.moc"
diff --git a/src/agent/inputwatcher.h b/src/agent/inputwatcher.h
index b637cbe..81c82a6 100644
--- a/src/agent/inputwatcher.h
+++ b/src/agent/inputwatcher.h
@@ -5,7 +5,8 @@
// From ext_idle_notifier_v1, like KIdleTime, but with the input notification
// of version 2. KIdleTime's own honours idle inhibitors: with a video playing
// or an app keeping the screen on, no key reached it and the lock screen never
-// scanned.
+// scanned. GNOME has no ext_idle_notifier_v1; there it is Mutter's own
+// IdleMonitor on the session bus, which knows nothing of inhibitors either.
#pragma once
@@ -15,6 +16,7 @@
class IdleNotifier;
class IdleNotification;
+class MutterIdle;
class InputWatcher : public QObject
{
@@ -34,4 +36,5 @@ Q_SIGNALS:
private:
std::unique_ptr m_notifier;
std::unique_ptr m_notification;
+ MutterIdle *m_mutter = nullptr;
};
diff --git a/src/agent/lockcontroller.cpp b/src/agent/lockcontroller.cpp
index 8a85781..09f4e11 100644
--- a/src/agent/lockcontroller.cpp
+++ b/src/agent/lockcontroller.cpp
@@ -7,11 +7,7 @@
#include "userconfig.h"
#include
-#include
-#include
-#include
#include
-#include
namespace
{
@@ -37,14 +33,7 @@ LockController::LockController(BubbleController *bubble, UserConfig *config, QOb
arm(0);
});
connect(&m_input, &InputWatcher::input, this, &LockController::onResume);
-
- QDBusConnection session = QDBusConnection::sessionBus();
- session.connect(QStringLiteral("org.freedesktop.ScreenSaver"),
- QStringLiteral("/ScreenSaver"),
- QStringLiteral("org.freedesktop.ScreenSaver"),
- QStringLiteral("ActiveChanged"),
- this,
- SLOT(onActiveChanged(bool)));
+ connect(&m_lock, &LockWatcher::lockedChanged, this, &LockController::onLockedChanged);
QDBusConnection::systemBus().connect(QStringLiteral("org.freedesktop.login1"),
QStringLiteral("/org/freedesktop/login1"),
@@ -52,28 +41,14 @@ LockController::LockController(BubbleController *bubble, UserConfig *config, QOb
QStringLiteral("PrepareForSleep"),
this,
SLOT(onPrepareForSleep(bool)));
-
- // Started while the screen is already locked (the agent restarted).
- const QDBusMessage get = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.ScreenSaver"),
- QStringLiteral("/ScreenSaver"),
- QStringLiteral("org.freedesktop.ScreenSaver"),
- QStringLiteral("GetActive"));
- auto *watcher = new QDBusPendingCallWatcher(session.asyncCall(get), this);
- connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, watcher] {
- watcher->deleteLater();
- const QDBusPendingReply reply = *watcher;
- if (reply.isValid() && reply.value()) {
- onActiveChanged(true);
- }
- });
}
-void LockController::onActiveChanged(bool active)
+void LockController::onLockedChanged(bool locked)
{
- if (active == m_locked) {
+ if (locked == m_locked) {
return;
}
- if (!active) {
+ if (!locked) {
m_locked = false;
m_armTimer.stop();
m_input.stop();
@@ -189,7 +164,7 @@ void LockController::onScanFinished(const QJsonObject &result)
// moment to go, and the bubble stays above the desktop, so the rings
// and the tick play on over it.
m_bubble->succeeded();
- unlock();
+ m_lock.unlock();
return;
}
@@ -207,30 +182,3 @@ void LockController::onScanFinished(const QJsonObject &result)
}
arm(CalmBeforeRetryMs);
}
-
-void LockController::unlock()
-{
- if (!m_locked) {
- return;
- }
- // "auto" is the caller's own session, or for a program outside any
- // session (this one runs as a user service) the session on the display.
- const QDBusMessage call = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.login1"),
- QStringLiteral("/org/freedesktop/login1/session/auto"),
- QStringLiteral("org.freedesktop.login1.Session"),
- QStringLiteral("Unlock"));
- auto *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(call), this);
- connect(watcher, &QDBusPendingCallWatcher::finished, this, [watcher] {
- watcher->deleteLater();
- const QDBusPendingReply<> reply = *watcher;
- if (reply.isError()) {
- qWarning("logind would not unlock: %s; trying loginctl", qPrintable(reply.error().message()));
- const QString id = qEnvironmentVariable("XDG_SESSION_ID");
- QStringList args{QStringLiteral("unlock-session")};
- if (!id.isEmpty()) {
- args << id;
- }
- QProcess::startDetached(QStringLiteral("loginctl"), args);
- }
- });
-}
diff --git a/src/agent/lockcontroller.h b/src/agent/lockcontroller.h
index eb871db..cb8a1ff 100644
--- a/src/agent/lockcontroller.h
+++ b/src/agent/lockcontroller.h
@@ -4,22 +4,20 @@
//
// When the screen locks, this waits for somebody to come back: a key, the
// mouse, the lid opening, the machine waking from sleep. Then it scans, and
-// when the face matches it asks logind to unlock the session, which is the
-// same request `loginctl unlock-session` makes and which Plasma's screen
-// locker has always honoured.
+// when the face matches it unlocks the session the way that desktop's lock
+// screen wants it (see LockWatcher).
//
// Why not a PAM module in the lock screen, like fingerprints? Plasma runs its
// fingerprint stack in parallel with the password, but only starts it once per
// lock, gives up for good the first time it fails, and labels it "scan your
-// fingerprint". Doing it from here means scanning again every time somebody
-// sits back down, no wrong label, and a bubble that knows what is going on.
-// It does not lower the bar either: any program running as this user can
-// already unlock this user's session through logind. Face data and the
-// decision stay with the daemon, which runs as root.
+// fingerprint". GNOME's, hyprlock's and swaylock's only ask once the password
+// is typed. Doing it from here means scanning again every time somebody sits
+// back down, no wrong label, and a bubble that knows what is going on.
#pragma once
#include "inputwatcher.h"
+#include "lockwatcher.h"
#include
#include
@@ -42,7 +40,7 @@ public:
}
private Q_SLOTS:
- void onActiveChanged(bool active);
+ void onLockedChanged(bool locked);
void onPrepareForSleep(bool sleeping);
private:
@@ -51,7 +49,6 @@ private:
void onResume();
void startScan(const QString &why);
void onScanFinished(const QJsonObject &result);
- void unlock();
void warmUp();
BubbleController *m_bubble;
@@ -62,4 +59,5 @@ private:
QPointer m_scan;
QTimer m_armTimer;
InputWatcher m_input;
+ LockWatcher m_lock;
};
diff --git a/src/agent/lockwatcher.cpp b/src/agent/lockwatcher.cpp
new file mode 100644
index 0000000..2e0a63a
--- /dev/null
+++ b/src/agent/lockwatcher.cpp
@@ -0,0 +1,268 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "lockwatcher.h"
+
+#include "wayland.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+namespace
+{
+const QString Login1 = QStringLiteral("org.freedesktop.login1");
+const QString SessionInterface = QStringLiteral("org.freedesktop.login1.Session");
+const QString Properties = QStringLiteral("org.freedesktop.DBus.Properties");
+
+constexpr int PollMs = 1000;
+
+// The lock screens that unlock on SIGUSR1.
+bool isLocker(const QByteArray &name)
+{
+ return name == "hyprlock" || name == "swaylock";
+}
+
+QByteArray readFile(const QString &path)
+{
+ QFile f(path);
+ return f.open(QIODevice::ReadOnly) ? f.readAll() : QByteArray();
+}
+
+pid_t parentOf(pid_t pid)
+{
+ // The fields after the name in brackets, which can hold anything.
+ const QByteArray stat = readFile(QStringLiteral("/proc/%1/stat").arg(pid));
+ const qsizetype close = stat.lastIndexOf(')');
+ return close < 0 ? 0 : pid_t(stat.mid(close + 2).split(' ').value(1).toInt());
+}
+
+// The lock screens of this user on this display. Another session of the same
+// user has a display of its own, and its lock screen is left alone. A child
+// of a lock screen (swaylock checks the password in one) is left out: killed
+// by the signal before its parent unlocks, it would take the parent down
+// with it, and the screen would stay locked.
+QList findLockers()
+{
+ QList found;
+ DIR *proc = ::opendir("/proc");
+ if (!proc) {
+ return found;
+ }
+ QByteArray display = qgetenv("WAYLAND_DISPLAY");
+ if (display.isEmpty()) {
+ display = "wayland-0";
+ }
+ const uid_t me = ::getuid();
+ while (dirent *entry = ::readdir(proc)) {
+ const pid_t pid = pid_t(atoi(entry->d_name));
+ struct stat st;
+ if (pid <= 0 || ::fstatat(::dirfd(proc), entry->d_name, &st, 0) != 0 || st.st_uid != me) {
+ continue;
+ }
+ const QString dir = QStringLiteral("/proc/%1/").arg(pid);
+ if (!isLocker(readFile(dir + QStringLiteral("comm")).trimmed())) {
+ continue;
+ }
+ bool sameDisplay = true;
+ for (const QByteArray &var : readFile(dir + QStringLiteral("environ")).split('\0')) {
+ if (var.startsWith("WAYLAND_DISPLAY=")) {
+ sameDisplay = var.mid(16) == display;
+ break;
+ }
+ }
+ if (sameDisplay) {
+ found.append(pid);
+ }
+ }
+ ::closedir(proc);
+ QList top;
+ for (const pid_t pid : std::as_const(found)) {
+ if (!found.contains(parentOf(pid))) {
+ top.append(pid);
+ }
+ }
+ return top;
+}
+} // namespace
+
+LockWatcher::LockWatcher(QObject *parent)
+ : QObject(parent)
+{
+ QDBusConnection session = QDBusConnection::sessionBus();
+ session.connect(QStringLiteral("org.freedesktop.ScreenSaver"),
+ QStringLiteral("/ScreenSaver"),
+ QStringLiteral("org.freedesktop.ScreenSaver"),
+ QStringLiteral("ActiveChanged"),
+ this,
+ SLOT(onScreenSaver(bool)));
+
+ // Started while the screen is already locked (the agent restarted).
+ QDBusMessage get = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.ScreenSaver"),
+ QStringLiteral("/ScreenSaver"),
+ QStringLiteral("org.freedesktop.ScreenSaver"),
+ QStringLiteral("GetActive"));
+ get.setAutoStartService(false);
+ auto *watcher = new QDBusPendingCallWatcher(session.asyncCall(get), this);
+ connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, watcher] {
+ watcher->deleteLater();
+ const QDBusPendingReply reply = *watcher;
+ if (reply.isValid() && reply.value()) {
+ onScreenSaver(true);
+ }
+ });
+
+ findSession();
+
+ if (Wayland::hasGlobal("ext_session_lock_manager_v1")) {
+ connect(&m_poll, &QTimer::timeout, this, &LockWatcher::pollLockers);
+ m_poll.start(PollMs);
+ // Not from here: nobody is connected yet to hear about a lock screen
+ // that is already up.
+ QTimer::singleShot(0, this, &LockWatcher::pollLockers);
+ }
+}
+
+void LockWatcher::onScreenSaver(bool active)
+{
+ m_screenSaver = active;
+ update();
+}
+
+void LockWatcher::findSession()
+{
+ // Niri and some others hand their session on to user services. Without
+ // it, "auto" is the session on the display.
+ const QString id = qEnvironmentVariable("XDG_SESSION_ID");
+ if (!id.isEmpty()) {
+ QDBusMessage call = QDBusMessage::createMethodCall(Login1,
+ QStringLiteral("/org/freedesktop/login1"),
+ QStringLiteral("org.freedesktop.login1.Manager"),
+ QStringLiteral("GetSession"));
+ call << id;
+ auto *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(call), this);
+ connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, watcher] {
+ watcher->deleteLater();
+ const QDBusPendingReply reply = *watcher;
+ watchSession(reply.isValid() ? reply.value().path() : QStringLiteral("/org/freedesktop/login1/session/auto"));
+ });
+ return;
+ }
+ QDBusMessage call = QDBusMessage::createMethodCall(Login1, QStringLiteral("/org/freedesktop/login1/session/auto"), Properties, QStringLiteral("Get"));
+ call << SessionInterface << QStringLiteral("Id");
+ auto *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(call), this);
+ connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, watcher] {
+ watcher->deleteLater();
+ const QDBusPendingReply reply = *watcher;
+ if (!reply.isValid()) {
+ qWarning("logind knows no session for this agent: %s", qPrintable(reply.error().message()));
+ return;
+ }
+ // The signals come from the session's real path, not from "auto".
+ QDBusMessage call = QDBusMessage::createMethodCall(Login1,
+ QStringLiteral("/org/freedesktop/login1"),
+ QStringLiteral("org.freedesktop.login1.Manager"),
+ QStringLiteral("GetSession"));
+ call << reply.value().variant().toString();
+ auto *next = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(call), this);
+ connect(next, &QDBusPendingCallWatcher::finished, this, [this, next] {
+ next->deleteLater();
+ const QDBusPendingReply path = *next;
+ if (path.isValid()) {
+ watchSession(path.value().path());
+ }
+ });
+ });
+}
+
+void LockWatcher::watchSession(const QString &path)
+{
+ m_session = path;
+ QDBusConnection::systemBus().connect(Login1,
+ path,
+ Properties,
+ QStringLiteral("PropertiesChanged"),
+ this,
+ SLOT(onSessionProperties(QString, QVariantMap, QStringList)));
+ readLockedHint();
+}
+
+void LockWatcher::readLockedHint()
+{
+ QDBusMessage call = QDBusMessage::createMethodCall(Login1, m_session, Properties, QStringLiteral("Get"));
+ call << SessionInterface << QStringLiteral("LockedHint");
+ auto *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(call), this);
+ connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, watcher] {
+ watcher->deleteLater();
+ const QDBusPendingReply reply = *watcher;
+ if (reply.isValid()) {
+ m_lockedHint = reply.value().variant().toBool();
+ update();
+ }
+ });
+}
+
+void LockWatcher::onSessionProperties(const QString &interface, const QVariantMap &changed, const QStringList &invalidated)
+{
+ if (interface != SessionInterface) {
+ return;
+ }
+ if (changed.contains(QStringLiteral("LockedHint"))) {
+ m_lockedHint = changed.value(QStringLiteral("LockedHint")).toBool();
+ update();
+ } else if (invalidated.contains(QStringLiteral("LockedHint"))) {
+ readLockedHint();
+ }
+}
+
+void LockWatcher::pollLockers()
+{
+ m_lockerRunning = !findLockers().isEmpty();
+ update();
+}
+
+void LockWatcher::update()
+{
+ const bool locked = m_screenSaver || m_lockedHint || m_lockerRunning;
+ if (locked != m_locked) {
+ m_locked = locked;
+ Q_EMIT lockedChanged(locked);
+ }
+}
+
+void LockWatcher::unlock()
+{
+ // Looked up again rather than taken from the last poll: a second is
+ // long enough for a pid to belong to something else.
+ for (const pid_t pid : findLockers()) {
+ ::kill(pid, SIGUSR1);
+ }
+
+ const QDBusMessage call = QDBusMessage::createMethodCall(Login1,
+ m_session.isEmpty() ? QStringLiteral("/org/freedesktop/login1/session/auto") : m_session,
+ SessionInterface,
+ QStringLiteral("Unlock"));
+ auto *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(call), this);
+ connect(watcher, &QDBusPendingCallWatcher::finished, this, [watcher] {
+ watcher->deleteLater();
+ const QDBusPendingReply<> reply = *watcher;
+ if (reply.isError()) {
+ qWarning("logind would not unlock: %s; trying loginctl", qPrintable(reply.error().message()));
+ const QString id = qEnvironmentVariable("XDG_SESSION_ID");
+ QStringList args{QStringLiteral("unlock-session")};
+ if (!id.isEmpty()) {
+ args << id;
+ }
+ QProcess::startDetached(QStringLiteral("loginctl"), args);
+ }
+ });
+}
diff --git a/src/agent/lockwatcher.h b/src/agent/lockwatcher.h
new file mode 100644
index 0000000..0400e39
--- /dev/null
+++ b/src/agent/lockwatcher.h
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// Whether the screen is locked, and how to unlock it, on each desktop.
+//
+// Plasma org.freedesktop.ScreenSaver and logind's LockedHint. Unlocked
+// through logind.
+// GNOME logind's LockedHint. Unlocked through logind.
+// Niri logind's LockedHint, which niri sets for any lock screen.
+// Hyprland sets no LockedHint, so the lock screen is looked for among this
+// user's processes (hyprlock, swaylock) once a second. Only on
+// compositors where the lock screen is a program of its own
+// (ext-session-lock).
+//
+// hyprlock and swaylock do not listen to logind. They unlock on SIGUSR1.
+//
+// None of this lowers the bar: any program running as this user can already
+// ask logind to unlock the session, or send its own lock screen a signal. The
+// face data and the decision stay with the daemon, which runs as root.
+
+#pragma once
+
+#include
+#include
+#include
+
+#include
+
+class LockWatcher : public QObject
+{
+ Q_OBJECT
+public:
+ explicit LockWatcher(QObject *parent = nullptr);
+
+ bool locked() const
+ {
+ return m_locked;
+ }
+ void unlock();
+
+Q_SIGNALS:
+ void lockedChanged(bool locked);
+
+private Q_SLOTS:
+ void onScreenSaver(bool active);
+ void onSessionProperties(const QString &interface, const QVariantMap &changed, const QStringList &invalidated);
+
+private:
+ void findSession();
+ void watchSession(const QString &path);
+ void readLockedHint();
+ void pollLockers();
+ void update();
+
+ bool m_screenSaver = false;
+ bool m_lockedHint = false;
+ bool m_lockerRunning = false;
+ bool m_locked = false;
+ QString m_session;
+ QTimer m_poll;
+};
diff --git a/src/agent/main.cpp b/src/agent/main.cpp
index d664ebc..172b95b 100644
--- a/src/agent/main.cpp
+++ b/src/agent/main.cpp
@@ -14,6 +14,7 @@
#include "enrollcontroller.h"
#include "lockcontroller.h"
#include "userconfig.h"
+#include "wayland.h"
#include "buildconfig.h"
@@ -82,7 +83,7 @@ int main(int argc, char **argv)
KLocalizedString::setApplicationDomain(FU_NAME);
QCommandLineParser parser;
- parser.setApplicationDescription(i18n("Face unlock for KDE Plasma"));
+ parser.setApplicationDescription(i18n("Face unlock for the lock screen, sudo and admin prompts"));
parser.addHelpOption();
parser.addVersionOption();
const QCommandLineOption enrollOpt(QStringLiteral("enroll"), i18n("Set up a face."));
@@ -110,14 +111,28 @@ int main(int argc, char **argv)
config.overrideStyle(parser.value(styleOpt));
}
BubbleController bubble(&config);
- BubbleWindow window(&engine, &bubble);
+ // The bubble floats above everything as a layer-shell surface. GNOME has
+ // none, and a normal window cannot stay on top or pick its place, so
+ // there it does without.
+ std::unique_ptr window;
+ if (Wayland::hasGlobal("zwlr_layer_shell_v1")) {
+ window = std::make_unique(&engine, &bubble);
+ }
if (parser.isSet(demoOpt)) {
+ if (!window) {
+ qWarning("this desktop has no layer-shell, so there is no bubble to show");
+ return 1;
+ }
scheduleDemo(&bubble);
return app.exec();
}
AgentSocket socket;
+ if (AgentSocket::running()) {
+ qInfo("an agent is already running in this session");
+ return 0;
+ }
socket.listen();
QObject::connect(&socket, &AgentSocket::scanEvent, &bubble, &BubbleController::daemonEvent);
diff --git a/src/agent/qml/Enroll.qml b/src/agent/qml/Enroll.qml
index 4a2b988..6b46667 100644
--- a/src/agent/qml/Enroll.qml
+++ b/src/agent/qml/Enroll.qml
@@ -13,10 +13,15 @@ Window {
required property var controller
+ // One fixed size: the layout needs no more room, and tiling compositors
+ // (Hyprland, Niri) float a window that cannot be resized instead of
+ // stretching it over half the screen.
width: 520
height: 680
- minimumWidth: 460
- minimumHeight: 620
+ minimumWidth: width
+ maximumWidth: width
+ minimumHeight: height
+ maximumHeight: height
visible: true
color: Theme.panel
title: i18n("Set up Face Unlock")
diff --git a/src/agent/wayland.cpp b/src/agent/wayland.cpp
new file mode 100644
index 0000000..d0efc91
--- /dev/null
+++ b/src/agent/wayland.cpp
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "wayland.h"
+
+#include
+#include
+#include
+
+#include
+
+namespace
+{
+void onGlobal(void *data, wl_registry *, uint32_t, const char *interface, uint32_t)
+{
+ static_cast *>(data)->insert(QByteArray(interface));
+}
+
+void onGlobalRemove(void *, wl_registry *, uint32_t)
+{
+}
+
+const wl_registry_listener listener = {onGlobal, onGlobalRemove};
+
+const QSet &globals()
+{
+ static QSet names;
+ static bool asked = false;
+ if (asked) {
+ return names;
+ }
+ asked = true;
+
+ auto *app = qGuiApp ? qGuiApp->nativeInterface() : nullptr;
+ wl_display *display = app ? app->display() : nullptr;
+ if (!display) {
+ return names;
+ }
+ wl_event_queue *queue = wl_display_create_queue(display);
+ auto *wrapped = static_cast(wl_proxy_create_wrapper(display));
+ wl_proxy_set_queue(reinterpret_cast(wrapped), queue);
+ wl_registry *registry = wl_display_get_registry(wrapped);
+ wl_registry_add_listener(registry, &listener, &names);
+ wl_display_roundtrip_queue(display, queue);
+ wl_registry_destroy(registry);
+ wl_proxy_wrapper_destroy(wrapped);
+ wl_event_queue_destroy(queue);
+ return names;
+}
+} // namespace
+
+bool Wayland::hasGlobal(const char *interface)
+{
+ return globals().contains(QByteArray(interface));
+}
diff --git a/src/agent/wayland.h b/src/agent/wayland.h
new file mode 100644
index 0000000..fbbdf1d
--- /dev/null
+++ b/src/agent/wayland.h
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// What the compositor offers. Not every desktop has everything: GNOME has no
+// layer-shell (so no bubble) and no ext-idle-notify, and only compositors
+// whose lock screen is a program of its own have ext-session-lock.
+
+#pragma once
+
+namespace Wayland
+{
+// Whether the compositor announces this interface, for example
+// "zwlr_layer_shell_v1". Asked once, on an event queue of its own, so Qt's
+// own handling of the connection is not disturbed.
+bool hasGlobal(const char *interface);
+} // namespace Wayland
diff --git a/src/daemon/main.cpp b/src/daemon/main.cpp
index 98429fd..330aa0d 100644
--- a/src/daemon/main.cpp
+++ b/src/daemon/main.cpp
@@ -71,7 +71,7 @@ int main(int argc, char **argv)
qSetMessagePattern(QStringLiteral("%{if-warning}warning: %{endif}%{if-critical}error: %{endif}%{message}"));
QCommandLineParser parser;
- parser.setApplicationDescription(QStringLiteral("Face unlock daemon for KDE Plasma"));
+ parser.setApplicationDescription(QStringLiteral("Face unlock daemon"));
parser.addHelpOption();
parser.addVersionOption();
const QCommandLineOption socketOpt(QStringLiteral("socket"), QStringLiteral("Listen here instead of the system socket."), QStringLiteral("path"),
diff --git a/src/daemon/polkit.h b/src/daemon/polkit.h
index e1a80bd..b6e0d93 100644
--- a/src/daemon/polkit.h
+++ b/src/daemon/polkit.h
@@ -4,9 +4,9 @@
//
// Adding a face is adding a way in, so it asks for the password first, the
// same way a phone asks for its code before it sets up a face. The question
-// goes to the polkit agent of the person's own session (on Plasma, the
-// familiar password dialog), which is why the daemon never sees the
-// password.
+// goes to the polkit agent of the person's own session (the desktop's usual
+// password dialog), which is why the daemon never sees the password.
+// Hyprland and Niri have none of their own: one has to be running there.
#pragma once
diff --git a/src/face-unlock b/src/face-unlock
index 1b58495..3a67b05 100644
--- a/src/face-unlock
+++ b/src/face-unlock
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# face-unlock: face unlock for KDE Plasma
+# face-unlock: face unlock for Plasma, GNOME, Hyprland and Niri
#
# Look at the screen and it unlocks, the way a phone does. The lock screen,
# sudo in a terminal and the admin password prompts can all take a face
@@ -64,7 +64,7 @@ fu_do_setup() {
fu_ensure_service || return 1
if [[ -z ${WAYLAND_DISPLAY:-} && -z ${DISPLAY:-} ]]; then
- fu_bad "$(fu_msg "Setting up a face needs the camera picture on screen. Run this inside your Plasma session.")"
+ fu_bad "$(fu_msg "Setting up a face needs the camera picture on screen. Run this inside your desktop session.")"
return 1
fi
@@ -102,6 +102,7 @@ fu_do_enable() {
if fu_agent_available; then
fu_agent_enable || fu_bad "$(fu_msg "Could not start the lock screen agent.")"
+ fu_agent_autostarts || fu_agent_hint
else
fu_note "$(fu_msg "No systemd user session, so the lock screen agent was not started.")"
fi
diff --git a/src/lib/common.sh b/src/lib/common.sh
index 74bcc26..303189a 100644
--- a/src/lib/common.sh
+++ b/src/lib/common.sh
@@ -31,6 +31,15 @@ FU_SYSCONFIG="${FU_SYSCONFIG:-/etc/${FU_NAME}/config}"
FU_UNIT_SOCKET="face-unlockd.socket"
FU_UNIT_AGENT="face-unlock-agent.service"
+# The desktop this runs in: plasma, gnome, hyprland, niri or other.
+case ":${XDG_CURRENT_DESKTOP:-}:" in
+ *:KDE:*) FU_DESKTOP=plasma ;;
+ *:GNOME:*) FU_DESKTOP=gnome ;;
+ *:Hyprland:*) FU_DESKTOP=hyprland ;;
+ *:niri:*) FU_DESKTOP=niri ;;
+ *) FU_DESKTOP=other ;;
+esac
+
# ---------------------------------------------------------------------------
# Translations
# ---------------------------------------------------------------------------
diff --git a/src/lib/menu.sh b/src/lib/menu.sh
index 0d96caa..816016e 100644
--- a/src/lib/menu.sh
+++ b/src/lib/menu.sh
@@ -211,7 +211,7 @@ fu_value_label() {
# fu_ui_status
# Shared by the `status` subcommand and the menu header.
fu_ui_status() {
- local names='' i camera
+ local names='' i camera agent=yes
fu_config_load
fu_status_load
@@ -246,6 +246,9 @@ fu_ui_status() {
_fu_row "$(fu_msg "Camera")" "$camera"
_fu_row "$(fu_msg "Lock screen")" "$(_fu_small_onoff "$( [[ $CFG_ENABLED == yes && $CFG_LOCK == yes ]] && echo yes || echo no)")"
+ if [[ $CFG_ENABLED == yes && $CFG_LOCK == yes ]] && fu_agent_available && ! fu_agent_running; then
+ agent=no
+ fi
_fu_row "$(fu_msg "sudo")" "$(_fu_small_onoff "$(fu_pam_enabled sudo && echo yes || echo no)")"
_fu_row "$(fu_msg "Admin prompts")" "$(_fu_small_onoff "$(fu_pam_enabled polkit-1 && echo yes || echo no)")"
_fu_row "$(fu_msg "Photo check")" "$(fu_value_label Liveness "$CFG_LIVENESS")"
@@ -258,6 +261,10 @@ fu_ui_status() {
if [[ $FU_ST_MODELS != true ]]; then
printf '\n %s%s%s\n' "$FU_C_RED" "$(fu_msg "The recognition models are missing. Reinstall the package.")" "$FU_C_RESET"
fi
+ if [[ $agent == no ]]; then
+ printf '\n %s%s%s\n' "$FU_C_YELLOW" "$(fu_msg "The lock screen agent is not running.")" "$FU_C_RESET"
+ fu_agent_autostarts || fu_agent_hint
+ fi
}
# ---------------------------------------------------------------------------
@@ -269,7 +276,8 @@ fu_ui_status() {
# heading, with only the label after it
# type bool, choice (steps through the choices) or camera
# needs a bool setting this one does nothing without; it is dimmed while
-# that is off
+# that is off. Layers is no setting: whether the desktop can show
+# the bubble at all (GNOME cannot).
FU_SETTINGS=(
"group|Lock screen"
"user|LockScreen|bool|yes|Unlock with your face"
@@ -287,7 +295,7 @@ FU_SETTINGS=(
"sys|Adapt|bool|yes|Learn from every unlock"
"sys|SkipLidClosed|bool|yes|Not when the lid is closed"
"group|Bubble"
- "user|Bubble|bool|yes|Show the bubble"
+ "user|Bubble|bool|yes|Show the bubble||Layers"
"user|BubbleStyle|choice|full|Style|full,minimal|Bubble"
"user|AnimationSpeed|choice|normal|Animation speed|slow,normal,fast|Bubble"
"user|BubbleForPrompts|bool|yes|Also for sudo and admin prompts||Bubble"
@@ -296,12 +304,16 @@ FU_SETTINGS=(
# fu_setting_help
# What a setting does, shown under the list for the selected one.
fu_setting_help() {
+ if [[ $FU_DESKTOP == gnome && $1 =~ ^(Bubble|BubbleStyle|AnimationSpeed|BubbleForPrompts)$ ]]; then
+ fu_msg "GNOME does not let other programs show above its windows, so there is no bubble on GNOME."
+ return
+ fi
case "$1:$2" in
LockScreen:*) fu_msg "Unlocks the lock screen when it sees your face. Off: only your password works there." ;;
ScanOnWake:*) fu_msg "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up." ;;
ScanOnLock:*) fu_msg "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away." ;;
sudo:*) fu_msg "sudo takes your face instead of the password. No match: you type the password as usual." ;;
- polkit-1:*) fu_msg "The password windows of Plasma and apps, for example when you install software. No match: you type the password." ;;
+ polkit-1:*) fu_msg "The password windows of your desktop and apps, for example when you install software. No match: you type the password." ;;
Liveness:heavy) fu_msg "You have to blink or turn your head a little. This also stops printed photos." ;;
Liveness:off) fu_msg "No check at all. Only for trying out a camera." ;;
Liveness:*) fu_msg "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through." ;;
@@ -511,6 +523,8 @@ fu_ui_settings() {
values[i]="$FU_SETTING_VALUE"
current[${keys[i]}]="$FU_SETTING_VALUE"
done
+ current[Layers]=yes
+ [[ $FU_DESKTOP == gnome ]] && current[Layers]=no current[Bubble]=no
dirty=0
fi
diff --git a/src/lib/system.sh b/src/lib/system.sh
index adb24ce..f4cb828 100644
--- a/src/lib/system.sh
+++ b/src/lib/system.sh
@@ -117,6 +117,21 @@ fu_agent_enable() {
systemctl --user enable --now "$FU_UNIT_AGENT" > /dev/null 2>&1
}
+# fu_agent_autostarts
+# Whether the agent's service starts with the session. It is wanted by
+# graphical-session.target, which Hyprland only reaches when it runs under
+# uwsm. Plasma, GNOME and niri-session always do.
+fu_agent_autostarts() {
+ [[ $FU_DESKTOP != hyprland ]] || systemctl --user is-active --quiet graphical-session.target
+}
+
+# fu_agent_hint
+fu_agent_hint() {
+ # shellcheck disable=SC2088 # shown to the user, not a path to open
+ fu_note "$(fu_msg "Hyprland does not start the lock screen agent by itself. Add this line to %s:" "~/.config/hypr/hyprland.conf")"
+ fu_say " exec-once = systemctl --user start $FU_UNIT_AGENT"
+}
+
fu_agent_disable() {
systemctl --user disable --now "$FU_UNIT_AGENT" > /dev/null 2>&1 || true
}