From 3e1a194d47e372dc165b5c1b38af0d28fbc7c332 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Fri, 8 Mar 2024 03:42:49 -0800 Subject: [PATCH] feat: add lockscreen example --- lockscreen/AuthContext.qml | 43 +++++++++++++++++++++++++++++++ lockscreen/Lockscreen.qml | 51 +++++++++++++++++++++++++++++++++++++ lockscreen/README.md | 10 ++++++++ lockscreen/image.png | Bin 0 -> 22081 bytes lockscreen/shell.qml | 38 +++++++++++++++++++++++++++ lockscreen/test.qml | 18 +++++++++++++ 6 files changed, 160 insertions(+) create mode 100644 lockscreen/AuthContext.qml create mode 100644 lockscreen/Lockscreen.qml create mode 100644 lockscreen/README.md create mode 100644 lockscreen/image.png create mode 100644 lockscreen/shell.qml create mode 100644 lockscreen/test.qml diff --git a/lockscreen/AuthContext.qml b/lockscreen/AuthContext.qml new file mode 100644 index 0000000..f5c5745 --- /dev/null +++ b/lockscreen/AuthContext.qml @@ -0,0 +1,43 @@ +import QtQuick +import Quickshell +import Quickshell.Io + +QtObject { + property int status: AuthContext.Status.FirstLogin + signal unlocked(); + + enum Status { + FirstLogin, + Authenticating, + LoginFailed + } + + property string password + + property var pamtester: Process { + property bool failed: true + + command: ["pamtester", "login", Quickshell.env("USER"), "authenticate"] + + onStarted: this.write(`${password}\n`) + + stdout: SplitParser { + // fails go to stderr + onRead: pamtester.failed = false + } + + onExited: { + if (failed) { + status = AuthContext.Status.LoginFailed; + } else { + unlocked(); + } + } + } + + function tryLogin(password: string) { + this.password = password + status = AuthContext.Status.Authenticating; + pamtester.running = true; + } +} diff --git a/lockscreen/Lockscreen.qml b/lockscreen/Lockscreen.qml new file mode 100644 index 0000000..83693f1 --- /dev/null +++ b/lockscreen/Lockscreen.qml @@ -0,0 +1,51 @@ +import QtQuick +import QtQuick.Controls.Basic + +Item { + required property AuthContext context + + Item { + anchors.centerIn: parent + scale: 2 + + TextField { + id: entryBox + anchors.centerIn: parent + width: 300 + + enabled: context.status != AuthContext.Status.Authenticating + focus: true + horizontalAlignment: TextInput.AlignHCenter + echoMode: TextInput.Password + inputMethodHints: Qt.ImhSensitiveData + placeholderText: "Enter password" + + onAccepted: { + if (text != "") context.tryLogin(text) + } + + onEnabledChanged: { + if (enabled) text = "" + } + } + + Text { + id: status + color: "white" + + anchors { + horizontalCenter: entryBox.horizontalCenter + top: entryBox.bottom + topMargin: 20 + } + + text: { + switch (context.status) { + case AuthContext.Status.FirstLogin: return "" + case AuthContext.Status.Authenticating: return "Authenticating" + case AuthContext.Status.LoginFailed: return "Login Failed" + } + } + } + } +} diff --git a/lockscreen/README.md b/lockscreen/README.md new file mode 100644 index 0000000..dfed773 --- /dev/null +++ b/lockscreen/README.md @@ -0,0 +1,10 @@ +# Lockscreen + +This is a barebones lockscreen with a password input box. +Note that you MUST have `pamtester` installed or you won't be able to log in. + +You can run the lockscreen with `quickshell -c shell.qml`. + +You can run the lockscreen in test mode (as a window) with `quickshell -c test.qml`. + +![](./image.png) diff --git a/lockscreen/image.png b/lockscreen/image.png new file mode 100644 index 0000000000000000000000000000000000000000..956c8aac5bc2bfd1af34a1fc74d45ea3dd008fc2 GIT binary patch literal 22081 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 literal 0 HcmV?d00001 diff --git a/lockscreen/shell.qml b/lockscreen/shell.qml new file mode 100644 index 0000000..2a36ac8 --- /dev/null +++ b/lockscreen/shell.qml @@ -0,0 +1,38 @@ +import QtQuick +import QtQuick.Controls.Basic +import Quickshell +import Quickshell.Wayland + +ShellRoot { + AuthContext { + id: authContext + onUnlocked: lock.locked = false + } + + SessionLock { + id: lock + locked: true + + onLockedChanged: { + if (!locked) Qt.quit(); + } + + SessionLockSurface { + // You probably want to replace this with an image. + color: "#303030" + + // For your own sanity you should probably keep this + // while working on the lockscreen. + Button { + text: "Help! I misconfigured my lockscreen!" + onClicked: lock.locked = false + } + + Lockscreen { + anchors.fill: parent + context: authContext + } + } + } + +} diff --git a/lockscreen/test.qml b/lockscreen/test.qml new file mode 100644 index 0000000..2917665 --- /dev/null +++ b/lockscreen/test.qml @@ -0,0 +1,18 @@ +import QtQuick +import Quickshell + +ShellRoot { + AuthContext { + id: authContext + onUnlocked: Qt.quit() + } + + FloatingWindow { + color: "#303030" + + Lockscreen { + anchors.fill: parent + context: authContext + } + } +}