1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-14 17:52:10 -04:00

settings: re-work auth detection bindings

This commit is contained in:
bbedward
2026-04-13 09:46:17 -04:00
parent e6ed6a1cc2
commit 8d415e9568
3 changed files with 241 additions and 365 deletions

View File

@@ -556,24 +556,24 @@ Singleton {
property bool enableFprint: false property bool enableFprint: false
property int maxFprintTries: 15 property int maxFprintTries: 15
property bool fprintdAvailable: false readonly property bool fprintdAvailable: Processes.fprintdAvailable
property bool lockFingerprintCanEnable: false readonly property bool lockFingerprintCanEnable: Processes.lockFingerprintCanEnable
property bool lockFingerprintReady: false readonly property bool lockFingerprintReady: Processes.lockFingerprintReady
property string lockFingerprintReason: "probe_failed" readonly property string lockFingerprintReason: Processes.lockFingerprintReason
property bool greeterFingerprintCanEnable: false readonly property bool greeterFingerprintCanEnable: Processes.greeterFingerprintCanEnable
property bool greeterFingerprintReady: false readonly property bool greeterFingerprintReady: Processes.greeterFingerprintReady
property string greeterFingerprintReason: "probe_failed" readonly property string greeterFingerprintReason: Processes.greeterFingerprintReason
property string greeterFingerprintSource: "none" readonly property string greeterFingerprintSource: Processes.greeterFingerprintSource
property bool enableU2f: false property bool enableU2f: false
property string u2fMode: "or" property string u2fMode: "or"
property bool u2fAvailable: false readonly property bool u2fAvailable: Processes.u2fAvailable
property bool lockU2fCanEnable: false readonly property bool lockU2fCanEnable: Processes.lockU2fCanEnable
property bool lockU2fReady: false readonly property bool lockU2fReady: Processes.lockU2fReady
property string lockU2fReason: "probe_failed" readonly property string lockU2fReason: Processes.lockU2fReason
property bool greeterU2fCanEnable: false readonly property bool greeterU2fCanEnable: Processes.greeterU2fCanEnable
property bool greeterU2fReady: false readonly property bool greeterU2fReady: Processes.greeterU2fReady
property string greeterU2fReason: "probe_failed" readonly property string greeterU2fReason: Processes.greeterU2fReason
property string greeterU2fSource: "none" readonly property string greeterU2fSource: Processes.greeterU2fSource
property string lockScreenActiveMonitor: "all" property string lockScreenActiveMonitor: "all"
property string lockScreenInactiveColor: "#000000" property string lockScreenInactiveColor: "#000000"
property int lockScreenNotificationMode: 0 property int lockScreenNotificationMode: 0
@@ -1063,7 +1063,6 @@ Singleton {
function refreshAuthAvailability() { function refreshAuthAvailability() {
if (isGreeterMode) if (isGreeterMode)
return; return;
Processes.settingsRoot = root;
Processes.detectAuthCapabilities(); Processes.detectAuthCapabilities();
} }

View File

@@ -25,16 +25,10 @@ Singleton {
property string fingerprintProbeOutput: "" property string fingerprintProbeOutput: ""
property int fingerprintProbeExitCode: 0 property int fingerprintProbeExitCode: 0
property bool fingerprintProbeStreamFinished: false property bool fingerprintProbeFinalized: false
property bool fingerprintProbeExited: false
property string fingerprintProbeState: "probe_failed"
property string pamSupportProbeOutput: "" property string pamProbeOutput: ""
property bool pamSupportProbeStreamFinished: false property bool pamProbeFinalized: false
property bool pamSupportProbeExited: false
property int pamSupportProbeExitCode: 0
property bool pamFprintSupportDetected: false
property bool pamU2fSupportDetected: false
readonly property string homeDir: Quickshell.env("HOME") || "" readonly property string homeDir: Quickshell.env("HOME") || ""
readonly property string u2fKeysPath: homeDir ? homeDir + "/.config/Yubico/u2f_keys" : "" readonly property string u2fKeysPath: homeDir ? homeDir + "/.config/Yubico/u2f_keys" : ""
@@ -54,40 +48,189 @@ Singleton {
readonly property var forcedFprintAvailable: envFlag("DMS_FORCE_FPRINT_AVAILABLE") readonly property var forcedFprintAvailable: envFlag("DMS_FORCE_FPRINT_AVAILABLE")
readonly property var forcedU2fAvailable: envFlag("DMS_FORCE_U2F_AVAILABLE") readonly property var forcedU2fAvailable: envFlag("DMS_FORCE_U2F_AVAILABLE")
property bool authApplyRunning: false
property bool authApplyQueued: false
property bool authApplyRerunRequested: false
property bool authApplyTerminalFallbackFromPrecheck: false
property string authApplyStdout: ""
property string authApplyStderr: ""
property string authApplySudoProbeStderr: ""
property string authApplyTerminalFallbackStderr: ""
function detectQtTools() { // --- Derived auth probe state ---
qtToolsDetectionProcess.running = true;
readonly property bool pamFprintSupportDetected: pamProbeFinalized && pamProbeOutput.includes("pam_fprintd.so:true")
readonly property bool pamU2fSupportDetected: pamProbeFinalized && pamProbeOutput.includes("pam_u2f.so:true")
readonly property string fingerprintProbeState: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable ? "ready" : "probe_failed";
if (!fingerprintProbeFinalized)
return "probe_failed";
return parseFingerprintProbe(fingerprintProbeExitCode, fingerprintProbeOutput, pamFprintSupportDetected);
} }
function detectAuthCapabilities() { // --- Lock fingerprint capabilities ---
if (!settingsRoot)
return;
readonly property bool lockFingerprintCanEnable: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable;
switch (fingerprintProbeState) {
case "ready":
case "missing_enrollment":
return true;
default:
return false;
}
}
readonly property bool lockFingerprintReady: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable;
return fingerprintProbeState === "ready";
}
readonly property string lockFingerprintReason: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable ? "ready" : "probe_failed";
return fingerprintProbeState;
}
// --- Greeter fingerprint capabilities ---
readonly property bool greeterFingerprintCanEnable: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable;
if (greeterPamHasFprint)
return fingerprintProbeState !== "missing_reader";
switch (fingerprintProbeState) {
case "ready":
case "missing_enrollment":
return true;
default:
return false;
}
}
readonly property bool greeterFingerprintReady: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable;
return fingerprintProbeState === "ready";
}
readonly property string greeterFingerprintReason: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable ? "ready" : "probe_failed";
if (greeterPamHasFprint) {
switch (fingerprintProbeState) {
case "ready":
return "configured_externally";
case "missing_enrollment":
return "missing_enrollment";
case "missing_reader":
return "missing_reader";
default:
return "probe_failed";
}
}
return fingerprintProbeState;
}
readonly property string greeterFingerprintSource: {
if (forcedFprintAvailable !== null)
return forcedFprintAvailable ? "dms" : "none";
if (greeterPamHasFprint)
return "pam";
switch (fingerprintProbeState) {
case "ready":
case "missing_enrollment":
return "dms";
default:
return "none";
}
}
// --- Lock U2F capabilities ---
readonly property bool lockU2fReady: {
if (forcedU2fAvailable !== null)
return forcedU2fAvailable;
return lockU2fCustomConfigDetected || homeU2fKeysDetected;
}
readonly property bool lockU2fCanEnable: {
if (forcedU2fAvailable !== null)
return forcedU2fAvailable;
return lockU2fReady || pamU2fSupportDetected;
}
readonly property string lockU2fReason: {
if (forcedU2fAvailable !== null)
return forcedU2fAvailable ? "ready" : "probe_failed";
if (lockU2fReady)
return "ready";
if (lockU2fCanEnable)
return "missing_key_registration";
return "missing_pam_support";
}
// --- Greeter U2F capabilities ---
readonly property bool greeterU2fReady: {
if (forcedU2fAvailable !== null)
return forcedU2fAvailable;
if (greeterPamHasU2f)
return true;
return homeU2fKeysDetected;
}
readonly property bool greeterU2fCanEnable: {
if (forcedU2fAvailable !== null)
return forcedU2fAvailable;
if (greeterPamHasU2f)
return true;
return greeterU2fReady || pamU2fSupportDetected;
}
readonly property string greeterU2fReason: {
if (forcedU2fAvailable !== null)
return forcedU2fAvailable ? "ready" : "probe_failed";
if (greeterPamHasU2f)
return "configured_externally";
if (greeterU2fReady)
return "ready";
if (greeterU2fCanEnable)
return "missing_key_registration";
return "missing_pam_support";
}
readonly property string greeterU2fSource: {
if (forcedU2fAvailable !== null)
return forcedU2fAvailable ? "dms" : "none";
if (greeterPamHasU2f)
return "pam";
if (greeterU2fCanEnable)
return "dms";
return "none";
}
// --- Aggregates ---
readonly property bool fprintdAvailable: lockFingerprintReady || greeterFingerprintReady
readonly property bool u2fAvailable: lockU2fReady || greeterU2fReady
// --- Auth detection ---
readonly property var _fprintProbeCommand: ["sh", "-c", "if command -v fprintd-list >/dev/null 2>&1; then fprintd-list \"${USER:-$(id -un)}\" 2>&1; else printf '__missing_command__\\n'; exit 127; fi"]
readonly property var _pamProbeCommand: ["sh", "-c", "for module in pam_fprintd.so pam_u2f.so; do found=false; for dir in /usr/lib64/security /usr/lib/security /lib/security /lib/x86_64-linux-gnu/security /usr/lib/x86_64-linux-gnu/security /usr/lib/aarch64-linux-gnu/security /run/current-system/sw/lib/security; do if [ -f \"$dir/$module\" ]; then found=true; break; fi; done; printf '%s:%s\\n' \"$module\" \"$found\"; done"]
function detectAuthCapabilities() {
if (forcedFprintAvailable === null) { if (forcedFprintAvailable === null) {
fingerprintProbeOutput = ""; fingerprintProbeFinalized = false;
fingerprintProbeStreamFinished = false; Proc.runCommand("fprint-probe", _fprintProbeCommand, (output, exitCode) => {
fingerprintProbeExited = false; fingerprintProbeOutput = output || "";
fingerprintProbeProcess.running = true; fingerprintProbeExitCode = exitCode;
} else { fingerprintProbeFinalized = true;
fingerprintProbeState = forcedFprintAvailable ? "ready" : "probe_failed"; }, 0);
} }
pamFprintSupportDetected = false; pamProbeFinalized = false;
pamU2fSupportDetected = false; Proc.runCommand("pam-probe", _pamProbeCommand, (output, _exitCode) => {
pamSupportProbeOutput = ""; pamProbeOutput = output || "";
pamSupportProbeStreamFinished = false; pamProbeFinalized = true;
pamSupportProbeExited = false; }, 0);
pamSupportDetectionProcess.running = true;
recomputeAuthCapabilities();
} }
function detectFprintd() { function detectFprintd() {
@@ -98,9 +241,16 @@ Singleton {
detectAuthCapabilities(); detectAuthCapabilities();
} }
function checkPluginSettings() { // --- Auth apply pipeline ---
pluginSettingsCheckProcess.running = true;
} property bool authApplyRunning: false
property bool authApplyQueued: false
property bool authApplyRerunRequested: false
property bool authApplyTerminalFallbackFromPrecheck: false
property string authApplyStdout: ""
property string authApplyStderr: ""
property string authApplySudoProbeStderr: ""
property string authApplyTerminalFallbackStderr: ""
function scheduleAuthApply() { function scheduleAuthApply() {
if (!settingsRoot || settingsRoot.isGreeterMode) if (!settingsRoot || settingsRoot.isGreeterMode)
@@ -146,6 +296,8 @@ Singleton {
authApplyDebounce.restart(); authApplyDebounce.restart();
} }
// --- PAM parsing helpers ---
function stripPamComment(line) { function stripPamComment(line) {
if (!line) if (!line)
return ""; return "";
@@ -189,15 +341,7 @@ Singleton {
function greeterPamStackHasModule(moduleName) { function greeterPamStackHasModule(moduleName) {
if (pamModuleEnabled(greetdPamText, moduleName)) if (pamModuleEnabled(greetdPamText, moduleName))
return true; return true;
const includedPamStacks = [ const includedPamStacks = [["system-auth", systemAuthPamText], ["common-auth", commonAuthPamText], ["password-auth", passwordAuthPamText], ["system-login", systemLoginPamText], ["system-local-login", systemLocalLoginPamText], ["common-auth-pc", commonAuthPcPamText], ["login", loginPamText]];
["system-auth", systemAuthPamText],
["common-auth", commonAuthPamText],
["password-auth", passwordAuthPamText],
["system-login", systemLoginPamText],
["system-local-login", systemLocalLoginPamText],
["common-auth-pc", commonAuthPcPamText],
["login", loginPamText]
];
for (let i = 0; i < includedPamStacks.length; i++) { for (let i = 0; i < includedPamStacks.length; i++) {
const stack = includedPamStacks[i]; const stack = includedPamStacks[i];
if (pamTextIncludesFile(greetdPamText, stack[0]) && pamModuleEnabled(stack[1], moduleName)) if (pamTextIncludesFile(greetdPamText, stack[0]) && pamModuleEnabled(stack[1], moduleName))
@@ -206,6 +350,8 @@ Singleton {
return false; return false;
} }
// --- Fingerprint probe output parsing ---
function hasEnrolledFingerprintOutput(output) { function hasEnrolledFingerprintOutput(output) {
const lower = (output || "").toLowerCase(); const lower = (output || "").toLowerCase();
if (lower.includes("has fingers enrolled") || lower.includes("has fingerprints enrolled")) if (lower.includes("has fingers enrolled") || lower.includes("has fingerprints enrolled"))
@@ -223,21 +369,15 @@ Singleton {
function hasMissingFingerprintEnrollmentOutput(output) { function hasMissingFingerprintEnrollmentOutput(output) {
const lower = (output || "").toLowerCase(); const lower = (output || "").toLowerCase();
return lower.includes("no fingers enrolled") return lower.includes("no fingers enrolled") || lower.includes("no fingerprints enrolled") || lower.includes("no prints enrolled");
|| lower.includes("no fingerprints enrolled")
|| lower.includes("no prints enrolled");
} }
function hasMissingFingerprintReaderOutput(output) { function hasMissingFingerprintReaderOutput(output) {
const lower = (output || "").toLowerCase(); const lower = (output || "").toLowerCase();
return lower.includes("no devices available") return lower.includes("no devices available") || lower.includes("no device available") || lower.includes("no devices found") || lower.includes("list_devices failed") || lower.includes("no device");
|| lower.includes("no device available")
|| lower.includes("no devices found")
|| lower.includes("list_devices failed")
|| lower.includes("no device");
} }
function parseFingerprintProbe(exitCode, output) { function parseFingerprintProbe(exitCode, output, pamFprintDetected) {
if (hasEnrolledFingerprintOutput(output)) if (hasEnrolledFingerprintOutput(output))
return "ready"; return "ready";
if (hasMissingFingerprintEnrollmentOutput(output)) if (hasMissingFingerprintEnrollmentOutput(output))
@@ -248,164 +388,17 @@ Singleton {
return "missing_enrollment"; return "missing_enrollment";
if (exitCode === 127 || (output || "").includes("__missing_command__")) if (exitCode === 127 || (output || "").includes("__missing_command__"))
return "probe_failed"; return "probe_failed";
return pamFprintSupportDetected ? "probe_failed" : "missing_pam_support"; return pamFprintDetected ? "probe_failed" : "missing_pam_support";
} }
function setLockFingerprintCapability(canEnable, ready, reason) { // --- Qt tools detection ---
settingsRoot.lockFingerprintCanEnable = canEnable;
settingsRoot.lockFingerprintReady = ready; function detectQtTools() {
settingsRoot.lockFingerprintReason = reason; qtToolsDetectionProcess.running = true;
} }
function setLockU2fCapability(canEnable, ready, reason) { function checkPluginSettings() {
settingsRoot.lockU2fCanEnable = canEnable; pluginSettingsCheckProcess.running = true;
settingsRoot.lockU2fReady = ready;
settingsRoot.lockU2fReason = reason;
}
function setGreeterFingerprintCapability(canEnable, ready, reason, source) {
settingsRoot.greeterFingerprintCanEnable = canEnable;
settingsRoot.greeterFingerprintReady = ready;
settingsRoot.greeterFingerprintReason = reason;
settingsRoot.greeterFingerprintSource = source;
}
function setGreeterU2fCapability(canEnable, ready, reason, source) {
settingsRoot.greeterU2fCanEnable = canEnable;
settingsRoot.greeterU2fReady = ready;
settingsRoot.greeterU2fReason = reason;
settingsRoot.greeterU2fSource = source;
}
function recomputeFingerprintCapabilities() {
if (forcedFprintAvailable !== null) {
const reason = forcedFprintAvailable ? "ready" : "probe_failed";
const source = forcedFprintAvailable ? "dms" : "none";
setLockFingerprintCapability(forcedFprintAvailable, forcedFprintAvailable, reason);
setGreeterFingerprintCapability(forcedFprintAvailable, forcedFprintAvailable, reason, source);
return;
}
const state = fingerprintProbeState;
switch (state) {
case "ready":
setLockFingerprintCapability(true, true, "ready");
break;
case "missing_enrollment":
setLockFingerprintCapability(true, false, "missing_enrollment");
break;
case "missing_reader":
setLockFingerprintCapability(false, false, "missing_reader");
break;
case "missing_pam_support":
setLockFingerprintCapability(false, false, "missing_pam_support");
break;
default:
setLockFingerprintCapability(false, false, "probe_failed");
break;
}
if (greeterPamHasFprint) {
switch (state) {
case "ready":
setGreeterFingerprintCapability(true, true, "configured_externally", "pam");
break;
case "missing_enrollment":
setGreeterFingerprintCapability(true, false, "missing_enrollment", "pam");
break;
case "missing_reader":
setGreeterFingerprintCapability(false, false, "missing_reader", "pam");
break;
default:
setGreeterFingerprintCapability(true, false, "probe_failed", "pam");
break;
}
return;
}
switch (state) {
case "ready":
setGreeterFingerprintCapability(true, true, "ready", "dms");
break;
case "missing_enrollment":
setGreeterFingerprintCapability(true, false, "missing_enrollment", "dms");
break;
case "missing_reader":
setGreeterFingerprintCapability(false, false, "missing_reader", "none");
break;
case "missing_pam_support":
setGreeterFingerprintCapability(false, false, "missing_pam_support", "none");
break;
default:
setGreeterFingerprintCapability(false, false, "probe_failed", "none");
break;
}
}
function recomputeU2fCapabilities() {
if (forcedU2fAvailable !== null) {
const reason = forcedU2fAvailable ? "ready" : "probe_failed";
const source = forcedU2fAvailable ? "dms" : "none";
setLockU2fCapability(forcedU2fAvailable, forcedU2fAvailable, reason);
setGreeterU2fCapability(forcedU2fAvailable, forcedU2fAvailable, reason, source);
return;
}
const lockReady = lockU2fCustomConfigDetected || homeU2fKeysDetected;
const lockCanEnable = lockReady || pamU2fSupportDetected;
const lockReason = lockReady ? "ready" : (lockCanEnable ? "missing_key_registration" : "missing_pam_support");
setLockU2fCapability(lockCanEnable, lockReady, lockReason);
if (greeterPamHasU2f) {
setGreeterU2fCapability(true, true, "configured_externally", "pam");
return;
}
const greeterReady = homeU2fKeysDetected;
const greeterCanEnable = greeterReady || pamU2fSupportDetected;
const greeterReason = greeterReady ? "ready" : (greeterCanEnable ? "missing_key_registration" : "missing_pam_support");
setGreeterU2fCapability(greeterCanEnable, greeterReady, greeterReason, greeterCanEnable ? "dms" : "none");
}
function recomputeAuthCapabilities() {
if (!settingsRoot)
return;
recomputeFingerprintCapabilities();
recomputeU2fCapabilities();
settingsRoot.fprintdAvailable = settingsRoot.lockFingerprintReady || settingsRoot.greeterFingerprintReady;
settingsRoot.u2fAvailable = settingsRoot.lockU2fReady || settingsRoot.greeterU2fReady;
}
function finalizeFingerprintProbe() {
if (!fingerprintProbeStreamFinished || !fingerprintProbeExited)
return;
fingerprintProbeState = parseFingerprintProbe(fingerprintProbeExitCode, fingerprintProbeOutput);
recomputeAuthCapabilities();
}
function finalizePamSupportProbe() {
if (!pamSupportProbeStreamFinished || !pamSupportProbeExited)
return;
pamFprintSupportDetected = false;
pamU2fSupportDetected = false;
const lines = (pamSupportProbeOutput || "").trim().split(/\r?\n/);
for (let i = 0; i < lines.length; i++) {
const parts = lines[i].split(":");
if (parts.length !== 2)
continue;
if (parts[0] === "pam_fprintd.so")
pamFprintSupportDetected = parts[1] === "true";
else if (parts[0] === "pam_u2f.so")
pamU2fSupportDetected = parts[1] === "true";
}
if (forcedFprintAvailable === null && fingerprintProbeState === "missing_pam_support")
fingerprintProbeState = parseFingerprintProbe(fingerprintProbeExitCode, fingerprintProbeOutput);
recomputeAuthCapabilities();
} }
property var qtToolsDetectionProcess: Process { property var qtToolsDetectionProcess: Process {
@@ -433,44 +426,6 @@ Singleton {
} }
} }
property var fingerprintProbeProcess: Process {
command: ["sh", "-c", "if command -v fprintd-list >/dev/null 2>&1; then fprintd-list \"${USER:-$(id -un)}\" 2>&1; else printf '__missing_command__\\n'; exit 127; fi"]
running: false
stdout: StdioCollector {
onStreamFinished: {
root.fingerprintProbeOutput = text || "";
root.fingerprintProbeStreamFinished = true;
root.finalizeFingerprintProbe();
}
}
onExited: function (exitCode) {
root.fingerprintProbeExitCode = exitCode;
root.fingerprintProbeExited = true;
root.finalizeFingerprintProbe();
}
}
property var pamSupportDetectionProcess: Process {
command: ["sh", "-c", "for module in pam_fprintd.so pam_u2f.so; do found=false; for dir in /usr/lib64/security /usr/lib/security /lib/security /lib/x86_64-linux-gnu/security /usr/lib/x86_64-linux-gnu/security /usr/lib/aarch64-linux-gnu/security /run/current-system/sw/lib/security; do if [ -f \"$dir/$module\" ]; then found=true; break; fi; done; printf '%s:%s\\n' \"$module\" \"$found\"; done"]
running: false
stdout: StdioCollector {
onStreamFinished: {
root.pamSupportProbeOutput = text || "";
root.pamSupportProbeStreamFinished = true;
root.finalizePamSupportProbe();
}
}
onExited: function (exitCode) {
root.pamSupportProbeExitCode = exitCode;
root.pamSupportProbeExited = true;
root.finalizePamSupportProbe();
}
}
Timer { Timer {
id: authApplyDebounce id: authApplyDebounce
interval: 300 interval: 300
@@ -544,9 +499,7 @@ Singleton {
onExited: exitCode => { onExited: exitCode => {
if (exitCode === 0) { if (exitCode === 0) {
const message = root.authApplyTerminalFallbackFromPrecheck const message = root.authApplyTerminalFallbackFromPrecheck ? I18n.tr("Terminal opened. Complete authentication setup there; it will close automatically when done.") : I18n.tr("Terminal fallback opened. Complete authentication setup there; it will close automatically when done.");
? I18n.tr("Terminal opened. Complete authentication setup there; it will close automatically when done.")
: I18n.tr("Terminal fallback opened. Complete authentication setup there; it will close automatically when done.");
ToastService.showInfo(message, "", "", "auth-sync"); ToastService.showInfo(message, "", "", "auth-sync");
} else { } else {
let details = (root.authApplyTerminalFallbackStderr || "").trim(); let details = (root.authApplyTerminalFallbackStderr || "").trim();
@@ -560,140 +513,80 @@ Singleton {
id: greetdPamWatcher id: greetdPamWatcher
path: "/etc/pam.d/greetd" path: "/etc/pam.d/greetd"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.greetdPamText = text()
root.greetdPamText = text(); onLoadFailed: root.greetdPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.greetdPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: systemAuthPamWatcher id: systemAuthPamWatcher
path: "/etc/pam.d/system-auth" path: "/etc/pam.d/system-auth"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.systemAuthPamText = text()
root.systemAuthPamText = text(); onLoadFailed: root.systemAuthPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.systemAuthPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: commonAuthPamWatcher id: commonAuthPamWatcher
path: "/etc/pam.d/common-auth" path: "/etc/pam.d/common-auth"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.commonAuthPamText = text()
root.commonAuthPamText = text(); onLoadFailed: root.commonAuthPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.commonAuthPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: passwordAuthPamWatcher id: passwordAuthPamWatcher
path: "/etc/pam.d/password-auth" path: "/etc/pam.d/password-auth"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.passwordAuthPamText = text()
root.passwordAuthPamText = text(); onLoadFailed: root.passwordAuthPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.passwordAuthPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: systemLoginPamWatcher id: systemLoginPamWatcher
path: "/etc/pam.d/system-login" path: "/etc/pam.d/system-login"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.systemLoginPamText = text()
root.systemLoginPamText = text(); onLoadFailed: root.systemLoginPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.systemLoginPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: systemLocalLoginPamWatcher id: systemLocalLoginPamWatcher
path: "/etc/pam.d/system-local-login" path: "/etc/pam.d/system-local-login"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.systemLocalLoginPamText = text()
root.systemLocalLoginPamText = text(); onLoadFailed: root.systemLocalLoginPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.systemLocalLoginPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: commonAuthPcPamWatcher id: commonAuthPcPamWatcher
path: "/etc/pam.d/common-auth-pc" path: "/etc/pam.d/common-auth-pc"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.commonAuthPcPamText = text()
root.commonAuthPcPamText = text(); onLoadFailed: root.commonAuthPcPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.commonAuthPcPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: loginPamWatcher id: loginPamWatcher
path: "/etc/pam.d/login" path: "/etc/pam.d/login"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.loginPamText = text()
root.loginPamText = text(); onLoadFailed: root.loginPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.loginPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: dankshellU2fPamWatcher id: dankshellU2fPamWatcher
path: "/etc/pam.d/dankshell-u2f" path: "/etc/pam.d/dankshell-u2f"
printErrors: false printErrors: false
onLoaded: { onLoaded: root.dankshellU2fPamText = text()
root.dankshellU2fPamText = text(); onLoadFailed: root.dankshellU2fPamText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.dankshellU2fPamText = "";
root.recomputeAuthCapabilities();
}
} }
FileView { FileView {
id: u2fKeysWatcher id: u2fKeysWatcher
path: root.u2fKeysPath path: root.u2fKeysPath
printErrors: false printErrors: false
onLoaded: { onLoaded: root.u2fKeysText = text()
root.u2fKeysText = text(); onLoadFailed: root.u2fKeysText = ""
root.recomputeAuthCapabilities();
}
onLoadFailed: {
root.u2fKeysText = "";
root.recomputeAuthCapabilities();
}
} }
property var pluginSettingsCheckProcess: Process { property var pluginSettingsCheckProcess: Process {

View File

@@ -362,24 +362,8 @@ var SPEC = {
lockAtStartup: { def: false }, lockAtStartup: { def: false },
enableFprint: { def: false, onChange: "scheduleAuthApply" }, enableFprint: { def: false, onChange: "scheduleAuthApply" },
maxFprintTries: { def: 15 }, maxFprintTries: { def: 15 },
fprintdAvailable: { def: false, persist: false },
lockFingerprintCanEnable: { def: false, persist: false },
lockFingerprintReady: { def: false, persist: false },
lockFingerprintReason: { def: "probe_failed", persist: false },
greeterFingerprintCanEnable: { def: false, persist: false },
greeterFingerprintReady: { def: false, persist: false },
greeterFingerprintReason: { def: "probe_failed", persist: false },
greeterFingerprintSource: { def: "none", persist: false },
enableU2f: { def: false, onChange: "scheduleAuthApply" }, enableU2f: { def: false, onChange: "scheduleAuthApply" },
u2fMode: { def: "or" }, u2fMode: { def: "or" },
u2fAvailable: { def: false, persist: false },
lockU2fCanEnable: { def: false, persist: false },
lockU2fReady: { def: false, persist: false },
lockU2fReason: { def: "probe_failed", persist: false },
greeterU2fCanEnable: { def: false, persist: false },
greeterU2fReady: { def: false, persist: false },
greeterU2fReason: { def: "probe_failed", persist: false },
greeterU2fSource: { def: "none", persist: false },
lockScreenActiveMonitor: { def: "all" }, lockScreenActiveMonitor: { def: "all" },
lockScreenInactiveColor: { def: "#000000" }, lockScreenInactiveColor: { def: "#000000" },
lockScreenNotificationMode: { def: 0 }, lockScreenNotificationMode: { def: 0 },