lock: add option to require password for poweroff/reboot (#2085)

This commit is contained in:
end-4
2025-10-03 01:02:03 +02:00
parent 027f9a1793
commit 42913816ce
4 changed files with 152 additions and 96 deletions
@@ -6,8 +6,11 @@ import Quickshell.Services.Pam
Scope {
id: root
enum ActionEnum { Unlock, Poweroff, Reboot }
signal shouldReFocus()
signal unlocked()
signal unlocked(targetAction: var)
signal failed()
// These properties are in the context and not individual lock surfaces
@@ -15,16 +18,31 @@ Scope {
property string currentText: ""
property bool unlockInProgress: false
property bool showFailure: false
property var targetAction: LockContext.ActionEnum.Unlock
function resetTargetAction() {
root.targetAction = LockContext.ActionEnum.Unlock;
}
function clearText() {
root.currentText = "";
}
function resetClearTimer() {
passwordClearTimer.restart();
}
function reset() {
root.resetTargetAction();
root.clearText();
root.unlockInProgress = false;
}
Timer {
id: passwordClearTimer
interval: 10000
onTriggered: {
root.currentText = "";
root.reset();
}
}
@@ -55,24 +73,14 @@ Scope {
// pam_unix won't send any important messages so all we need is the completion status.
onCompleted: result => {
if (result == PamResult.Success) {
root.unlocked();
if (Config.options.lock.unlockKeyring) root.unlockKeyring();
root.unlocked(root.targetAction);
} else {
root.showFailure = true;
root.clearText();
root.unlockInProgress = false;
GlobalStates.screenUnlockFailed = true;
root.showFailure = true;
}
root.currentText = "";
root.unlockInProgress = false;
}
}
function unlockKeyring() {
Quickshell.execDetached({
environment: ({
UNLOCK_PASSWORD: root.currentText
}),
command: ["bash", "-c", Quickshell.shellPath("scripts/keyring/unlock.sh")]
})
}
}