Compare commits
No commits in common. "c356c1d4c53f44e3b233b8af8c32f5dca54cade2" and "17c6b27bfe3a8c3c4756562c7ddc3bd34dc961d7" have entirely different histories.
c356c1d4c5
...
17c6b27bfe
29 changed files with 36 additions and 2289 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -8,9 +8,7 @@ pnpm-debug.log*
|
|||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
# dist/ was previously generated by Vite; now it holds the static UI (dist/index.html).
|
||||
# Ignore generated assets but track the hand-crafted index.html.
|
||||
dist/assets/
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
|
|
|
|||
753
dist/index.html
vendored
753
dist/index.html
vendored
|
|
@ -1,753 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Robin</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0f172a;
|
||||
--surface: #1e293b;
|
||||
--surface2: #334155;
|
||||
--border: #475569;
|
||||
--text: #f1f5f9;
|
||||
--muted: #94a3b8;
|
||||
--accent: #f97316;
|
||||
--accent-bg: #1c0a00;
|
||||
--info: #3b82f6;
|
||||
--success: #22c55e;
|
||||
--warning: #f59e0b;
|
||||
--error: #ef4444;
|
||||
--radius: 6px;
|
||||
--font: 'Segoe UI', system-ui, -apple-system, sans-serif;
|
||||
--mono: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;
|
||||
}
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
html, body {
|
||||
height: 100%; background: var(--bg); color: var(--text);
|
||||
font-family: var(--font); font-size: 14px; line-height: 1.5; overflow: hidden;
|
||||
}
|
||||
#app { display: flex; flex-direction: column; height: 100vh; }
|
||||
|
||||
header {
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
padding: 10px 14px; background: var(--surface);
|
||||
border-bottom: 1px solid var(--border); flex-shrink: 0; user-select: none;
|
||||
}
|
||||
header .logo { font-size: 18px; line-height: 1; }
|
||||
header h1 { font-size: 15px; font-weight: 600; color: var(--text); flex: 1; }
|
||||
.status-dot {
|
||||
width: 8px; height: 8px; border-radius: 50%;
|
||||
background: var(--muted); flex-shrink: 0; transition: background 0.3s;
|
||||
}
|
||||
.status-dot.ok { background: var(--success); }
|
||||
.status-dot.warn { background: var(--warning); }
|
||||
.status-dot.error { background: var(--error); }
|
||||
.status-label { font-size: 11px; color: var(--muted); }
|
||||
|
||||
.tabs {
|
||||
display: flex; background: var(--surface);
|
||||
border-bottom: 1px solid var(--border); flex-shrink: 0;
|
||||
}
|
||||
.tab-btn {
|
||||
padding: 7px 14px; background: none;
|
||||
border: none; border-bottom: 2px solid transparent;
|
||||
color: var(--muted); cursor: pointer; font-size: 13px;
|
||||
font-family: var(--font); transition: color 0.15s, border-color 0.15s;
|
||||
display: flex; align-items: center; gap: 5px;
|
||||
}
|
||||
.tab-btn:hover { color: var(--text); }
|
||||
.tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }
|
||||
.badge {
|
||||
display: inline-flex; align-items: center; justify-content: center;
|
||||
background: var(--accent); color: #fff; font-size: 10px; font-weight: 700;
|
||||
border-radius: 999px; min-width: 16px; height: 16px; padding: 0 4px; line-height: 1;
|
||||
}
|
||||
.badge.hidden { display: none; }
|
||||
|
||||
.pane { display: none; flex-direction: column; flex: 1; overflow: hidden; min-height: 0; }
|
||||
.pane.active { display: flex; }
|
||||
|
||||
#onboarding {
|
||||
flex: 1; display: flex; flex-direction: column;
|
||||
align-items: center; justify-content: flex-start;
|
||||
padding: 24px 20px; gap: 14px; text-align: center; overflow-y: auto;
|
||||
}
|
||||
#onboarding.hidden { display: none; }
|
||||
#onboarding .bird { font-size: 48px; line-height: 1; }
|
||||
#onboarding h2 { font-size: 18px; font-weight: 600; }
|
||||
#onboarding p { font-size: 13px; color: var(--muted); max-width: 300px; }
|
||||
.form-group { width: 100%; max-width: 320px; text-align: left; }
|
||||
.form-group label {
|
||||
display: block; font-size: 12px; color: var(--muted);
|
||||
margin-bottom: 4px; text-transform: uppercase; letter-spacing: 0.05em;
|
||||
}
|
||||
.form-group select, .form-group input {
|
||||
width: 100%; padding: 8px 10px; background: var(--surface2);
|
||||
border: 1px solid var(--border); border-radius: var(--radius);
|
||||
color: var(--text); font-size: 13px; font-family: var(--font);
|
||||
outline: none; transition: border-color 0.15s;
|
||||
}
|
||||
.form-group select:focus, .form-group input:focus { border-color: var(--accent); }
|
||||
.form-group select option { background: var(--surface2); }
|
||||
|
||||
.btn {
|
||||
padding: 8px 16px; border-radius: var(--radius); border: none;
|
||||
font-size: 13px; font-family: var(--font); font-weight: 500;
|
||||
cursor: pointer; transition: opacity 0.15s;
|
||||
}
|
||||
.btn:hover { opacity: 0.85; } .btn:active { opacity: 0.7; }
|
||||
.btn:disabled { opacity: 0.4; cursor: not-allowed; }
|
||||
.btn-primary { background: var(--accent); color: #fff; }
|
||||
.btn-ghost { background: transparent; border: 1px solid var(--border); color: var(--muted); }
|
||||
.btn-ghost:hover { color: var(--text); border-color: var(--text); }
|
||||
.btn-icon {
|
||||
width: 34px; height: 34px; padding: 0; display: flex;
|
||||
align-items: center; justify-content: center; font-size: 16px;
|
||||
background: var(--accent); color: #fff; border-radius: var(--radius);
|
||||
border: none; cursor: pointer; flex-shrink: 0; transition: opacity 0.15s;
|
||||
}
|
||||
.btn-icon:hover { opacity: 0.85; } .btn-icon:active { opacity: 0.7; }
|
||||
.btn-icon:disabled { opacity: 0.4; cursor: not-allowed; }
|
||||
|
||||
#messages {
|
||||
flex: 1; overflow-y: auto; padding: 12px;
|
||||
display: flex; flex-direction: column; gap: 10px; min-height: 0;
|
||||
}
|
||||
#messages::-webkit-scrollbar { width: 4px; }
|
||||
#messages::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
|
||||
.msg {
|
||||
max-width: 90%; padding: 8px 12px; border-radius: var(--radius);
|
||||
font-size: 13px; line-height: 1.55; word-break: break-word;
|
||||
}
|
||||
.msg.user {
|
||||
background: var(--accent-bg); border: 1px solid var(--accent);
|
||||
align-self: flex-end;
|
||||
}
|
||||
.msg.assistant {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
align-self: flex-start;
|
||||
}
|
||||
.msg.assistant pre {
|
||||
background: var(--surface2); padding: 8px 10px; border-radius: 4px;
|
||||
font-family: var(--mono); font-size: 12px;
|
||||
overflow-x: auto; margin: 6px 0; white-space: pre-wrap;
|
||||
}
|
||||
.msg.assistant code {
|
||||
background: var(--surface2); padding: 1px 4px;
|
||||
border-radius: 3px; font-family: var(--mono); font-size: 12px;
|
||||
}
|
||||
.msg-role {
|
||||
font-size: 10px; color: var(--muted);
|
||||
text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 3px;
|
||||
}
|
||||
.msg.user .msg-role { color: var(--accent); }
|
||||
.msg.system-msg {
|
||||
background: transparent; border: 1px dashed var(--border);
|
||||
align-self: center; color: var(--muted);
|
||||
font-size: 12px; max-width: 100%; text-align: center;
|
||||
}
|
||||
.typing-cursor {
|
||||
display: inline-block; width: 7px; height: 13px;
|
||||
background: var(--accent); border-radius: 1px;
|
||||
vertical-align: middle; animation: blink 0.9s step-end infinite; margin-left: 2px;
|
||||
}
|
||||
@keyframes blink { 50% { opacity: 0; } }
|
||||
.chat-input-row {
|
||||
display: flex; gap: 8px; padding: 10px 12px;
|
||||
border-top: 1px solid var(--border);
|
||||
background: var(--surface); flex-shrink: 0; align-items: flex-end;
|
||||
}
|
||||
#chat-input {
|
||||
flex: 1; padding: 8px 10px; background: var(--surface2);
|
||||
border: 1px solid var(--border); border-radius: var(--radius);
|
||||
color: var(--text); font-size: 13px; font-family: var(--font);
|
||||
resize: none; outline: none; line-height: 1.4;
|
||||
max-height: 100px; overflow-y: auto; transition: border-color 0.15s;
|
||||
}
|
||||
#chat-input:focus { border-color: var(--accent); }
|
||||
#chat-input::placeholder { color: var(--muted); }
|
||||
|
||||
#events-list {
|
||||
flex: 1; overflow-y: auto; padding: 10px;
|
||||
display: flex; flex-direction: column; gap: 8px; min-height: 0;
|
||||
}
|
||||
#events-list::-webkit-scrollbar { width: 4px; }
|
||||
#events-list::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
|
||||
.event-card {
|
||||
padding: 10px 12px; background: var(--surface);
|
||||
border: 1px solid var(--border); border-radius: var(--radius);
|
||||
border-left: 3px solid var(--muted);
|
||||
}
|
||||
.event-card.severity-warn { border-left-color: var(--warning); }
|
||||
.event-card.severity-crit { border-left-color: var(--error); }
|
||||
.event-card.severity-info { border-left-color: var(--info); }
|
||||
.event-card-header { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
|
||||
.event-title { font-size: 13px; font-weight: 600; flex: 1; }
|
||||
.severity-badge {
|
||||
font-size: 10px; font-weight: 700; text-transform: uppercase;
|
||||
padding: 2px 6px; border-radius: 3px; letter-spacing: 0.04em;
|
||||
}
|
||||
.severity-badge.warn { background: #422006; color: var(--warning); }
|
||||
.severity-badge.crit { background: #450a0a; color: var(--error); }
|
||||
.severity-badge.info { background: #0c1a3a; color: var(--info); }
|
||||
.event-body { font-size: 12px; color: var(--muted); margin-bottom: 4px; }
|
||||
.event-meta { font-size: 11px; color: var(--border); font-family: var(--mono); }
|
||||
.events-toolbar {
|
||||
display: flex; align-items: center; gap: 8px; padding: 8px 10px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: var(--surface); flex-shrink: 0;
|
||||
}
|
||||
.events-toolbar span { flex: 1; font-size: 12px; color: var(--muted); }
|
||||
.empty-state {
|
||||
flex: 1; display: flex; flex-direction: column;
|
||||
align-items: center; justify-content: center;
|
||||
gap: 8px; color: var(--muted); font-size: 13px; padding: 24px; text-align: center;
|
||||
}
|
||||
.empty-state .icon { font-size: 32px; opacity: 0.4; }
|
||||
|
||||
#pane-debug {
|
||||
flex: 1; overflow-y: auto; padding: 12px;
|
||||
display: flex; flex-direction: column; gap: 12px; min-height: 0;
|
||||
}
|
||||
#pane-debug::-webkit-scrollbar { width: 4px; }
|
||||
#pane-debug::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
|
||||
.debug-section {
|
||||
background: var(--surface); border: 1px solid var(--border);
|
||||
border-radius: var(--radius); overflow: hidden;
|
||||
}
|
||||
.debug-section-header {
|
||||
padding: 8px 12px; font-size: 11px; font-weight: 600;
|
||||
text-transform: uppercase; letter-spacing: 0.07em;
|
||||
color: var(--muted); background: var(--surface2);
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.debug-rows { padding: 8px 0; }
|
||||
.debug-row { display: flex; align-items: center; padding: 5px 12px; gap: 8px; font-size: 12px; }
|
||||
.debug-row .key { width: 130px; flex-shrink: 0; color: var(--muted); }
|
||||
.debug-row .val { color: var(--text); font-family: var(--mono); font-size: 12px; word-break: break-all; }
|
||||
.debug-row .val.ok { color: var(--success); }
|
||||
.debug-row .val.warn { color: var(--warning); }
|
||||
.debug-row .val.err { color: var(--error); }
|
||||
.notif-select {
|
||||
background: var(--surface2); border: 1px solid var(--border); border-radius: 4px;
|
||||
color: var(--text); font-size: 12px; font-family: var(--font);
|
||||
padding: 2px 6px; outline: none; cursor: pointer;
|
||||
}
|
||||
.notif-select:focus { border-color: var(--accent); }
|
||||
.notif-select option { background: var(--surface2); }
|
||||
.hidden { display: none !important; }
|
||||
.scroll-anchor { height: 1px; flex-shrink: 0; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<header>
|
||||
<span class="logo">🐦</span>
|
||||
<h1>Robin</h1>
|
||||
<span class="status-label" id="status-label">connecting…</span>
|
||||
<span class="status-dot" id="status-dot"></span>
|
||||
</header>
|
||||
|
||||
<div id="onboarding">
|
||||
<div class="bird">🐦</div>
|
||||
<h2>Welcome to Robin</h2>
|
||||
<p>Set up your migration profile so Robin can give you personalised help.</p>
|
||||
<div class="form-group">
|
||||
<label for="src-os">Coming from</label>
|
||||
<select id="src-os">
|
||||
<option value="macos">macOS</option>
|
||||
<option value="windows" selected>Windows</option>
|
||||
<option value="linux">Linux (different distro)</option>
|
||||
<option value="android">Android</option>
|
||||
<option value="ipad">iPad / iOS</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="distro">Your Linux distro (blank to auto-detect)</label>
|
||||
<input type="text" id="distro" placeholder="e.g. linuxmint, ubuntu, arch" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="dual-boot">Dual-booting with (optional)</label>
|
||||
<select id="dual-boot">
|
||||
<option value="">None</option>
|
||||
<option value="windows">Windows</option>
|
||||
<option value="macos">macOS</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="btn btn-primary" id="onboarding-save" style="width:100%;max-width:320px">Get started</button>
|
||||
<p id="onboarding-error" class="hidden" style="color:var(--error);font-size:12px"></p>
|
||||
</div>
|
||||
|
||||
<div class="tabs hidden" id="tabs">
|
||||
<button class="tab-btn active" data-tab="chat">Chat</button>
|
||||
<button class="tab-btn" data-tab="events">Events <span class="badge hidden" id="events-badge">0</span></button>
|
||||
<button class="tab-btn" data-tab="debug">Debug</button>
|
||||
</div>
|
||||
|
||||
<div class="pane active" id="pane-chat">
|
||||
<div id="messages">
|
||||
<div class="msg system-msg" id="welcome-msg">Robin is watching your system logs. Ask me anything about Linux!</div>
|
||||
<div class="scroll-anchor" id="chat-bottom"></div>
|
||||
</div>
|
||||
<div class="chat-input-row">
|
||||
<textarea id="chat-input" rows="1" placeholder="Ask Robin… (Enter to send, Shift+Enter for newline)" aria-label="Chat message"></textarea>
|
||||
<button class="btn-icon" id="send-btn" title="Send (Enter)" aria-label="Send">▶</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pane" id="pane-events">
|
||||
<div class="events-toolbar">
|
||||
<span id="events-count">No events yet</span>
|
||||
<button class="btn btn-ghost" id="clear-events-btn" style="font-size:12px;padding:4px 10px">Clear</button>
|
||||
</div>
|
||||
<div id="events-list">
|
||||
<div class="empty-state" id="events-empty">
|
||||
<span class="icon">📋</span>
|
||||
<span>No system events matched yet.<br>Robin is watching your logs.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pane" id="pane-debug">
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-header">Migration Profile</div>
|
||||
<div class="debug-rows">
|
||||
<div class="debug-row"><span class="key">Source OS</span><span class="val" id="dbg-source-os">—</span></div>
|
||||
<div class="debug-row"><span class="key">Distro</span><span class="val" id="dbg-distro">—</span></div>
|
||||
<div class="debug-row"><span class="key">Distro family</span><span class="val" id="dbg-distro-family">—</span></div>
|
||||
<div class="debug-row"><span class="key">Dual boot</span><span class="val" id="dbg-dual-boot">none</span></div>
|
||||
<div class="debug-row"><span class="key">Fluency level</span><span class="val" id="dbg-fluency">0 / 5</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-header">LLM Config</div>
|
||||
<div class="debug-rows">
|
||||
<div class="debug-row"><span class="key">Ollama URL</span><span class="val" id="dbg-ollama-url">—</span></div>
|
||||
<div class="debug-row"><span class="key">Model</span><span class="val" id="dbg-ollama-model">—</span></div>
|
||||
<div class="debug-row"><span class="key">Connection</span><span class="val" id="dbg-ollama-status">—</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-header">Notifications</div>
|
||||
<div class="debug-rows">
|
||||
<div class="debug-row">
|
||||
<span class="key">Level</span>
|
||||
<select class="notif-select" id="notif-level-select" aria-label="Notification level">
|
||||
<option value="off">Off</option>
|
||||
<option value="badge_only">Badge only</option>
|
||||
<option value="badge_and_toast">Badge + toast</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-header">App Info</div>
|
||||
<div class="debug-rows">
|
||||
<div class="debug-row"><span class="key">Tier</span><span class="val" id="dbg-tier">free</span></div>
|
||||
<div class="debug-row"><span class="key">Events captured</span><span class="val" id="dbg-event-count">0</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-header">Profile</div>
|
||||
<div class="debug-rows">
|
||||
<div class="debug-row">
|
||||
<button class="btn btn-ghost" id="reset-onboarding-btn" style="font-size:12px;padding:4px 10px">Change migration profile…</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
/* Robin frontend -- vanilla JS, Tauri 2 IPC (withGlobalTauri: true)
|
||||
No build step, no npm, no Node required.
|
||||
|
||||
Security note: All user-supplied and LLM-supplied text goes through
|
||||
setTextContent() / DOM text nodes rather than innerHTML.
|
||||
The chat markdown renderer builds the DOM tree element-by-element so
|
||||
no unsanitised HTML is ever passed to innerHTML.
|
||||
*/
|
||||
|
||||
var _invoke = null;
|
||||
var _listen = null;
|
||||
|
||||
// State
|
||||
var currentConfig = null;
|
||||
var streamBuf = '';
|
||||
var streamMsgEl = null;
|
||||
var isSending = false;
|
||||
var eventCount = 0;
|
||||
var newEventCount = 0;
|
||||
|
||||
function $(id) { return document.getElementById(id); }
|
||||
|
||||
// ── DOM refs
|
||||
var statusDot = $('status-dot');
|
||||
var statusLabel = $('status-label');
|
||||
var onboardingEl = $('onboarding');
|
||||
var tabsEl = $('tabs');
|
||||
var messagesEl = $('messages');
|
||||
var chatBottom = $('chat-bottom');
|
||||
var chatInput = $('chat-input');
|
||||
var sendBtn = $('send-btn');
|
||||
var eventsList = $('events-list');
|
||||
var eventsEmpty = $('events-empty');
|
||||
var eventsCountEl = $('events-count');
|
||||
var eventsBadge = $('events-badge');
|
||||
var onbError = $('onboarding-error');
|
||||
var dbgEventCount = $('dbg-event-count');
|
||||
|
||||
// ── Status
|
||||
function setStatus(state, label) {
|
||||
statusDot.className = 'status-dot ' + state;
|
||||
statusLabel.textContent = label;
|
||||
}
|
||||
|
||||
// ── Timestamp
|
||||
function fmtTs(ts) {
|
||||
if (!ts) return '';
|
||||
var d = new Date(ts * 1000);
|
||||
var p = function(n) { return String(n).padStart(2,'0'); };
|
||||
return p(d.getHours()) + ':' + p(d.getMinutes()) + ':' + p(d.getSeconds());
|
||||
}
|
||||
|
||||
// ── Scroll
|
||||
function scrollBottom() { chatBottom.scrollIntoView({ behavior: 'smooth' }); }
|
||||
|
||||
// ── Tabs
|
||||
document.querySelectorAll('.tab-btn').forEach(function(btn) {
|
||||
btn.addEventListener('click', function() {
|
||||
var tab = btn.dataset.tab;
|
||||
document.querySelectorAll('.tab-btn').forEach(function(b) { b.classList.remove('active'); });
|
||||
document.querySelectorAll('.pane').forEach(function(p) { p.classList.remove('active'); });
|
||||
btn.classList.add('active');
|
||||
$('pane-' + tab).classList.add('active');
|
||||
if (tab === 'chat') {
|
||||
if (_invoke) _invoke('panel_opened').catch(function(){});
|
||||
clearBadge(); scrollBottom();
|
||||
} else {
|
||||
if (_invoke) _invoke('panel_closed').catch(function(){});
|
||||
if (tab === 'events') clearBadge();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ── Badge
|
||||
function bumpBadge() {
|
||||
newEventCount++;
|
||||
var chatActive = document.querySelector('[data-tab="chat"]').classList.contains('active');
|
||||
if (!chatActive) {
|
||||
eventsBadge.textContent = newEventCount > 99 ? '99+' : String(newEventCount);
|
||||
eventsBadge.classList.remove('hidden');
|
||||
}
|
||||
}
|
||||
function clearBadge() { newEventCount = 0; eventsBadge.classList.add('hidden'); }
|
||||
|
||||
// ── Event cards -- built with DOM methods; no innerHTML for user data
|
||||
function addEventCard(ev) {
|
||||
eventsEmpty.classList.add('hidden');
|
||||
var sev = (ev.severity || 'info').toLowerCase();
|
||||
|
||||
var card = document.createElement('div');
|
||||
card.className = 'event-card severity-' + sev;
|
||||
|
||||
var header = document.createElement('div');
|
||||
header.className = 'event-card-header';
|
||||
|
||||
var titleEl = document.createElement('span');
|
||||
titleEl.className = 'event-title';
|
||||
titleEl.textContent = ev.title; // textContent: safe
|
||||
|
||||
var sevBadge = document.createElement('span');
|
||||
sevBadge.className = 'severity-badge ' + sev;
|
||||
sevBadge.textContent = sev; // textContent: safe
|
||||
|
||||
header.appendChild(titleEl);
|
||||
header.appendChild(sevBadge);
|
||||
|
||||
var bodyEl = document.createElement('div');
|
||||
bodyEl.className = 'event-body';
|
||||
bodyEl.textContent = ev.body; // textContent: safe
|
||||
|
||||
var metaEl = document.createElement('div');
|
||||
metaEl.className = 'event-meta';
|
||||
metaEl.textContent = ev.pattern_id + ' \xB7 ' + fmtTs(ev.timestamp); // textContent: safe
|
||||
|
||||
card.appendChild(header);
|
||||
card.appendChild(bodyEl);
|
||||
card.appendChild(metaEl);
|
||||
|
||||
var first = eventsList.querySelector('.event-card');
|
||||
if (first) { eventsList.insertBefore(card, first); } else { eventsList.appendChild(card); }
|
||||
|
||||
eventCount++;
|
||||
dbgEventCount.textContent = String(eventCount);
|
||||
eventsCountEl.textContent = eventCount + ' event' + (eventCount !== 1 ? 's' : '');
|
||||
bumpBadge();
|
||||
}
|
||||
|
||||
// ── Chat: add a bubble
|
||||
function addMsg(role, text) {
|
||||
var div = document.createElement('div');
|
||||
div.className = 'msg ' + role;
|
||||
if (role !== 'system-msg') {
|
||||
var lbl = document.createElement('div');
|
||||
lbl.className = 'msg-role';
|
||||
lbl.textContent = role === 'user' ? 'You' : 'Robin';
|
||||
div.appendChild(lbl);
|
||||
}
|
||||
var body = document.createElement('div');
|
||||
body.className = 'msg-content';
|
||||
if (role === 'system-msg') {
|
||||
body.textContent = text; // textContent: safe
|
||||
} else if (role === 'user') {
|
||||
body.textContent = text; // user text: no formatting needed
|
||||
} else {
|
||||
renderMdInto(body, text); // markdown renderer builds DOM nodes
|
||||
}
|
||||
div.appendChild(body);
|
||||
messagesEl.insertBefore(div, chatBottom);
|
||||
scrollBottom();
|
||||
return div;
|
||||
}
|
||||
|
||||
// ── Markdown renderer: builds DOM nodes, never assigns innerHTML with user data
|
||||
// Supports: ```code blocks``` and `inline code`. All other text is text nodes.
|
||||
function renderMdInto(container, text) {
|
||||
// Split on fenced code blocks
|
||||
var parts = text.split(/(```[\s\S]*?```)/g);
|
||||
parts.forEach(function(part) {
|
||||
if (part.startsWith('```')) {
|
||||
var code = part.slice(3, -3).replace(/^\n/, '');
|
||||
var pre = document.createElement('pre');
|
||||
var codeEl = document.createElement('code');
|
||||
codeEl.textContent = code; // textContent: safe, displays < > & correctly
|
||||
pre.appendChild(codeEl);
|
||||
container.appendChild(pre);
|
||||
} else {
|
||||
// Handle inline code within this segment
|
||||
var inlineParts = part.split(/(`[^`\n]+`)/g);
|
||||
inlineParts.forEach(function(seg) {
|
||||
if (seg.startsWith('`') && seg.endsWith('`') && seg.length > 2) {
|
||||
var codeEl = document.createElement('code');
|
||||
codeEl.textContent = seg.slice(1, -1); // textContent: safe
|
||||
container.appendChild(codeEl);
|
||||
} else {
|
||||
// Plain text: convert newlines to <br> using text nodes + br elements
|
||||
var lines = seg.split('\n');
|
||||
lines.forEach(function(line, i) {
|
||||
container.appendChild(document.createTextNode(line));
|
||||
if (i < lines.length - 1) container.appendChild(document.createElement('br'));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ── Streaming
|
||||
function startStream() {
|
||||
var div = document.createElement('div');
|
||||
div.className = 'msg assistant';
|
||||
var lbl = document.createElement('div');
|
||||
lbl.className = 'msg-role';
|
||||
lbl.textContent = 'Robin';
|
||||
div.appendChild(lbl);
|
||||
var body = document.createElement('div');
|
||||
body.className = 'msg-content';
|
||||
var cursor = document.createElement('span');
|
||||
cursor.className = 'typing-cursor';
|
||||
body.appendChild(cursor);
|
||||
div.appendChild(body);
|
||||
messagesEl.insertBefore(div, chatBottom);
|
||||
streamMsgEl = div;
|
||||
streamBuf = '';
|
||||
scrollBottom();
|
||||
}
|
||||
|
||||
function appendToken(token) {
|
||||
if (!streamMsgEl) startStream();
|
||||
streamBuf += token;
|
||||
// Rebuild the content node from scratch on each token.
|
||||
// This is simple and correct; for very long responses it could be optimised
|
||||
// by appending incrementally, but correctness wins here.
|
||||
var body = streamMsgEl.querySelector('.msg-content');
|
||||
while (body.firstChild) body.removeChild(body.firstChild);
|
||||
renderMdInto(body, streamBuf);
|
||||
var cursor = document.createElement('span');
|
||||
cursor.className = 'typing-cursor';
|
||||
body.appendChild(cursor);
|
||||
scrollBottom();
|
||||
}
|
||||
|
||||
function endStream() {
|
||||
if (!streamMsgEl) return;
|
||||
var body = streamMsgEl.querySelector('.msg-content');
|
||||
while (body.firstChild) body.removeChild(body.firstChild);
|
||||
renderMdInto(body, streamBuf);
|
||||
streamMsgEl = null; streamBuf = '';
|
||||
isSending = false;
|
||||
sendBtn.disabled = false;
|
||||
chatInput.disabled = false;
|
||||
chatInput.focus();
|
||||
}
|
||||
|
||||
// ── Send
|
||||
async function sendMessage() {
|
||||
var text = chatInput.value.trim();
|
||||
if (!text || isSending || !_invoke) return;
|
||||
isSending = true;
|
||||
sendBtn.disabled = true; chatInput.disabled = true;
|
||||
chatInput.value = ''; chatInput.style.height = 'auto';
|
||||
addMsg('user', text);
|
||||
try {
|
||||
await _invoke('chat', { message: text });
|
||||
} catch(err) {
|
||||
isSending = false; sendBtn.disabled = false; chatInput.disabled = false;
|
||||
addMsg('system-msg', 'Error: ' + String(err));
|
||||
}
|
||||
}
|
||||
chatInput.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendMessage(); }
|
||||
});
|
||||
sendBtn.addEventListener('click', sendMessage);
|
||||
chatInput.addEventListener('input', function() {
|
||||
chatInput.style.height = 'auto';
|
||||
chatInput.style.height = Math.min(chatInput.scrollHeight, 100) + 'px';
|
||||
});
|
||||
|
||||
// ── Clear events
|
||||
$('clear-events-btn').addEventListener('click', function() {
|
||||
eventsList.querySelectorAll('.event-card').forEach(function(c) { c.remove(); });
|
||||
eventsEmpty.classList.remove('hidden');
|
||||
eventCount = 0; dbgEventCount.textContent = '0';
|
||||
eventsCountEl.textContent = 'No events yet'; clearBadge();
|
||||
});
|
||||
|
||||
// ── Notification level
|
||||
$('notif-level-select').addEventListener('change', function() {
|
||||
if (_invoke) _invoke('update_notification_level', { level: this.value }).catch(function(e) {
|
||||
console.error('update_notification_level:', e);
|
||||
});
|
||||
});
|
||||
|
||||
// ── Debug panel
|
||||
function populateDebug(cfg) {
|
||||
if (!cfg) return;
|
||||
var m = cfg.migration;
|
||||
if (m) {
|
||||
$('dbg-source-os').textContent = m.source_os || '—';
|
||||
$('dbg-distro').textContent = m.distro || '—';
|
||||
$('dbg-distro-family').textContent = m.source_distro_family || '(auto)';
|
||||
$('dbg-dual-boot').textContent = m.dual_boot_with || 'none';
|
||||
$('dbg-fluency').textContent = (m.fluency_level || 0) + ' / 5';
|
||||
} else {
|
||||
$('dbg-source-os').textContent = '(not configured)';
|
||||
}
|
||||
$('dbg-ollama-url').textContent = (cfg.ollama && cfg.ollama.base_url) || '—';
|
||||
$('dbg-ollama-model').textContent = (cfg.ollama && cfg.ollama.model) || '—';
|
||||
$('dbg-tier').textContent = cfg.tier || 'free';
|
||||
var lvl = (cfg.display && cfg.display.notification_level) || 'badge_and_toast';
|
||||
$('notif-level-select').value = lvl;
|
||||
probeOllama(cfg.ollama && cfg.ollama.base_url);
|
||||
}
|
||||
|
||||
async function probeOllama(url) {
|
||||
var el = $('dbg-ollama-status');
|
||||
if (!url) { el.textContent = 'no URL'; el.className = 'val err'; return; }
|
||||
try {
|
||||
var res = await fetch(url + '/api/tags', { signal: AbortSignal.timeout(3000) });
|
||||
if (res.ok) {
|
||||
var data = await res.json();
|
||||
var count = (data.models && data.models.length) || 0;
|
||||
el.textContent = 'reachable (' + count + ' model' + (count !== 1 ? 's' : '') + ')';
|
||||
el.className = 'val ok';
|
||||
} else {
|
||||
el.textContent = 'HTTP ' + res.status; el.className = 'val warn';
|
||||
}
|
||||
} catch(e) {
|
||||
el.textContent = 'unreachable'; el.className = 'val err';
|
||||
}
|
||||
}
|
||||
|
||||
// ── Onboarding
|
||||
function showOnboarding() {
|
||||
onboardingEl.classList.remove('hidden'); tabsEl.classList.add('hidden');
|
||||
document.querySelectorAll('.pane').forEach(function(p) { p.classList.remove('active'); });
|
||||
setStatus('warn', 'setup needed');
|
||||
}
|
||||
function showMain() {
|
||||
onboardingEl.classList.add('hidden'); tabsEl.classList.remove('hidden');
|
||||
$('pane-chat').classList.add('active');
|
||||
document.querySelectorAll('.tab-btn').forEach(function(b) { b.classList.remove('active'); });
|
||||
document.querySelector('[data-tab="chat"]').classList.add('active');
|
||||
if (_invoke) _invoke('panel_opened').catch(function(){});
|
||||
setStatus('ok', 'ready');
|
||||
}
|
||||
|
||||
$('onboarding-save').addEventListener('click', async function() {
|
||||
onbError.classList.add('hidden');
|
||||
var srcOs = $('src-os').value;
|
||||
var distro = $('distro').value.trim() || 'unknown';
|
||||
var dualBoot = $('dual-boot').value || null;
|
||||
try {
|
||||
await _invoke('complete_onboarding', {
|
||||
sourceOs: srcOs, distro: distro, sourceDistro: null, dualBootWith: dualBoot
|
||||
});
|
||||
currentConfig = await _invoke('get_config');
|
||||
populateDebug(currentConfig);
|
||||
showMain();
|
||||
addMsg('system-msg', '✓ Profile saved. Robin is watching your logs.');
|
||||
} catch(err) {
|
||||
onbError.textContent = String(err); onbError.classList.remove('hidden');
|
||||
}
|
||||
});
|
||||
$('reset-onboarding-btn').addEventListener('click', showOnboarding);
|
||||
|
||||
// ── Init
|
||||
async function init() {
|
||||
_invoke = window.__TAURI__.core.invoke;
|
||||
_listen = window.__TAURI__.event.listen;
|
||||
|
||||
await _listen('robin:chat-token', function(e) { appendToken(e.payload); });
|
||||
await _listen('robin:chat-done', function() { endStream(); });
|
||||
await _listen('robin:chat-error', function(e) {
|
||||
endStream(); addMsg('system-msg', 'LLM error: ' + e.payload);
|
||||
});
|
||||
await _listen('robin:event', function(e) { addEventCard(e.payload); });
|
||||
|
||||
try {
|
||||
currentConfig = await _invoke('get_config');
|
||||
populateDebug(currentConfig);
|
||||
} catch(e) { console.error('get_config:', e); setStatus('error', 'config error'); }
|
||||
|
||||
var needsSetup = true;
|
||||
try { needsSetup = await _invoke('needs_onboarding'); } catch(e) {}
|
||||
|
||||
if (needsSetup) {
|
||||
showOnboarding();
|
||||
} else {
|
||||
showMain();
|
||||
try {
|
||||
var pending = await _invoke('get_pending_events');
|
||||
pending.forEach(addEventCard);
|
||||
} catch(e) {}
|
||||
}
|
||||
}
|
||||
|
||||
function waitAndInit(tries) {
|
||||
if (window.__TAURI__ && window.__TAURI__.core) {
|
||||
init().catch(function(e) { setStatus('error', 'init error'); console.error('Robin init:', e); });
|
||||
} else if (tries > 0) {
|
||||
setTimeout(function() { waitAndInit(tries - 1); }, 100);
|
||||
} else {
|
||||
setStatus('error', 'IPC unavailable');
|
||||
$('welcome-msg').textContent = 'Could not connect to the Robin backend — try restarting the app.';
|
||||
}
|
||||
}
|
||||
waitAndInit(30);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
54
manage.sh
54
manage.sh
|
|
@ -52,7 +52,8 @@ case "$cmd" in
|
|||
|
||||
start)
|
||||
# Start Robin in the background (daemonised via nohup).
|
||||
# No dev server needed — the webview loads dist/index.html directly.
|
||||
# Also starts the Vite dev server if a release binary is not available
|
||||
# and Node/nvm is present, so the webview has something to connect to.
|
||||
if pgrep -x "$APP_NAME" > /dev/null 2>&1; then
|
||||
echo "Robin is already running (PID $(pgrep -x "$APP_NAME"))"
|
||||
exit 0
|
||||
|
|
@ -61,6 +62,21 @@ case "$cmd" in
|
|||
export DISPLAY="${DISPLAY:-:0}"
|
||||
export RUST_LOG="${RUST_LOG:-robin_lib=info,warn}"
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
# If using the debug binary and no Vite server is running, start one.
|
||||
if [[ "$bin" == *"target/debug"* ]] && ! curl -sf http://localhost:1420 > /dev/null 2>&1; then
|
||||
NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
|
||||
if [[ -s "$NVM_DIR/nvm.sh" ]] && command -v npm > /dev/null 2>&1 || { source "$NVM_DIR/nvm.sh" 2>/dev/null && command -v npm > /dev/null 2>&1; }; then
|
||||
echo "Starting Vite dev server on :1420..."
|
||||
nohup npm --prefix "$SCRIPT_DIR" run dev >> /tmp/robin-vite.log 2>&1 &
|
||||
echo "Vite PID $! — logs: /tmp/robin-vite.log"
|
||||
sleep 2 # give Vite time to bind before Robin connects
|
||||
else
|
||||
echo "Note: no release binary and Node not found — webview will show connection error."
|
||||
echo "Run 'npm install && npm run dev' in $SCRIPT_DIR to fix this."
|
||||
fi
|
||||
fi
|
||||
|
||||
nohup "$bin" >> "$LOG_FILE" 2>&1 &
|
||||
echo "Robin started (PID $!). Logs: $LOG_FILE"
|
||||
;;
|
||||
|
|
@ -72,6 +88,11 @@ case "$cmd" in
|
|||
else
|
||||
echo "Robin is not running."
|
||||
fi
|
||||
# Stop Vite dev server if we started it.
|
||||
if pgrep -f "vite" > /dev/null 2>&1; then
|
||||
pkill -f "node.*vite" 2>/dev/null || true
|
||||
echo "Vite dev server stopped."
|
||||
fi
|
||||
;;
|
||||
|
||||
restart)
|
||||
|
|
@ -98,27 +119,15 @@ case "$cmd" in
|
|||
;;
|
||||
|
||||
dev)
|
||||
# Dev mode: build debug binary and run it directly.
|
||||
# The webview loads dist/index.html from the build artefact path —
|
||||
# no npm or Vite server required.
|
||||
echo "Building and running Robin in dev mode..."
|
||||
cargo build --manifest-path "$SCRIPT_DIR/src-tauri/Cargo.toml"
|
||||
export DISPLAY="${DISPLAY:-:0}"
|
||||
export RUST_LOG="${RUST_LOG:-robin_lib=debug,warn}"
|
||||
exec "$DEBUG_BIN"
|
||||
echo "Starting Robin in dev mode (hot-reload)..."
|
||||
cd "$SCRIPT_DIR"
|
||||
npm run tauri dev
|
||||
;;
|
||||
|
||||
build)
|
||||
echo "Building Robin release binary..."
|
||||
cargo build --release --manifest-path "$SCRIPT_DIR/src-tauri/Cargo.toml"
|
||||
echo "Binary: $RELEASE_BIN"
|
||||
;;
|
||||
|
||||
bundle)
|
||||
# Full release bundle (.deb/.rpm/.AppImage) — requires Tauri CLI (npm install -g @tauri-apps/cli)
|
||||
echo "Building Robin release bundle (deb/rpm/AppImage)..."
|
||||
echo "Building Robin release binary + installers..."
|
||||
cd "$SCRIPT_DIR"
|
||||
cargo tauri build
|
||||
npm run tauri build
|
||||
;;
|
||||
|
||||
build-debug)
|
||||
|
|
@ -249,7 +258,7 @@ Usage: ./manage.sh <command>
|
|||
|
||||
Running:
|
||||
run Run in foreground (logs to terminal, Ctrl+C to quit)
|
||||
start Start in background (no dev server needed)
|
||||
start Start in background
|
||||
stop Stop background instance
|
||||
restart Stop then start
|
||||
status Show whether Robin is running
|
||||
|
|
@ -257,9 +266,8 @@ Running:
|
|||
|
||||
Building:
|
||||
build-debug Build debug binary (Rust only, no Node/npm needed)
|
||||
build Build release binary (Rust only)
|
||||
bundle Build release bundle (.deb/.rpm/.AppImage) — requires Tauri CLI
|
||||
dev Build debug binary and run it immediately
|
||||
build Build release binary + .deb/.rpm/.AppImage (needs Node + Tauri CLI)
|
||||
dev Start dev mode with hot-reload (needs Node + Tauri CLI)
|
||||
test Run Rust unit tests
|
||||
|
||||
Installation:
|
||||
|
|
@ -273,8 +281,6 @@ Installation:
|
|||
Dependencies:
|
||||
install-deps Install system deps (Debian/Ubuntu/Mint)
|
||||
install-deps-arch Install system deps (Arch/Manjaro/CachyOS)
|
||||
|
||||
Note: No Node.js or npm required. The UI is a static HTML file bundled with the binary.
|
||||
EOF
|
||||
;;
|
||||
esac
|
||||
|
|
|
|||
|
|
@ -134,68 +134,3 @@ match_text = "GPU HANG"
|
|||
severity = "warn"
|
||||
title = "Graphics card stopped responding"
|
||||
body = "The graphics card froze and the driver recovered it — like a forced restart of the GPU. Games or video apps may have crashed. If this keeps happening, check that your graphics drivers are current: sudo pacman -Syu"
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Search for the package: pkgfile libname.so.6 (install pkgfile first: sudo pacman -S pkgfile && sudo pkgfile -u). Or search: pacman -Ss libname. Install it: sudo pacman -S packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo pacman -S xorg-xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -135,68 +135,3 @@ match_text = "GStreamer: Failed to find plugin"
|
|||
severity = "info"
|
||||
title = "Media format not supported"
|
||||
body = "Linux doesn't include some video/audio formats by default for legal reasons — unlike Android which bundles them. Install them on Ubuntu/Mint: sudo apt install ubuntu-restricted-extras — this adds MP3, MP4, and other common formats."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, most apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: apt-file search libname.so.6 (swap in the missing filename). Or search: apt-cache search libname. Install it: sudo apt install libpackagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo apt install xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -100,68 +100,3 @@ match_text = "GStreamer: Failed to find plugin"
|
|||
severity = "info"
|
||||
title = "Media format not supported"
|
||||
body = "Linux doesn't include some video/audio formats by default. Install them from RPM Fusion: first enable it: sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm — then: sudo dnf install gstreamer1-plugins-bad-free gstreamer1-plugins-ugly"
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: dnf provides 'libname.so.6'. Or search: dnf search libname. Install it: sudo dnf install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo dnf install xorg-x11-server-Xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -101,68 +101,3 @@ match_text = "Activation failed"
|
|||
severity = "info"
|
||||
title = "Wi-Fi connection failed"
|
||||
body = "Couldn't connect to the network. Check: nmcli device status — or use YaST -> Network Settings to diagnose."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: zypper what-provides 'libname.so.6'. Or search: zypper search libname. Install it: sudo zypper install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo zypper install xorg-x11-server-Xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -144,68 +144,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, most apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: apt-file search libname.so.6 (swap in the missing filename). Or search: apt-cache search libname. Install it: sudo apt install libpackagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo apt install xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -134,57 +134,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity. Steam on Fedora: sudo dnf install steam (from RPM Fusion free)."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: dnf provides 'libname.so.6'. Or search: dnf search libname. Install it: sudo dnf install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -128,68 +128,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity. Steam on openSUSE: sudo zypper install steam (from the games repo on OBS)."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: zypper what-provides 'libname.so.6'. Or search: zypper search libname. Install it: sudo zypper install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo zypper install xorg-x11-server-Xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -184,57 +184,3 @@ match_text = "Wine is not installed"
|
|||
severity = "warn"
|
||||
title = "Lutris: Wine not found"
|
||||
body = "Lutris needs a Wine runner. In Lutris: Preferences -> Runners -> Wine -> Install — or: paru -S wine-staging"
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Search for the package: pkgfile libname.so.6 (install pkgfile first: sudo pacman -S pkgfile && sudo pkgfile -u). Or search: pacman -Ss libname. Install it: sudo pacman -S packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -142,57 +142,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity. Steam on Fedora may also need: sudo dnf install steam (from RPM Fusion free repo)."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: dnf provides 'libname.so.6'. Or search: dnf search libname. Install it: sudo dnf install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -118,68 +118,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity. Steam on openSUSE: sudo zypper install steam (from the games repo on OBS)."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: zypper what-provides 'libname.so.6'. Or search: zypper search libname. Install it: sudo zypper install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo zypper install xorg-x11-server-Xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -63,47 +63,3 @@ match_text = "RTC time"
|
|||
severity = "info"
|
||||
title = "System clock drifted after macOS boot"
|
||||
body = "macOS stores the hardware clock in local time; Linux stores it in UTC. This causes clock drift in dual-boot. Fix in Linux: timedatectl set-local-rtc 0 — then set macOS to UTC by running in Terminal: sudo systemsetup -setusingnetworktime off && sudo systemsetup -settime $(date -u +%H:%M:%S)"
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -73,47 +73,3 @@ match_text = "ntfs-3g: Failed to open"
|
|||
severity = "warn"
|
||||
title = "NTFS permission error"
|
||||
body = "ntfs-3g can't open the Windows partition. Check your /etc/fstab mount options — add uid=1000,gid=1000,umask=022 to give your Linux user access. Make sure Windows is fully shut down first."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -170,57 +170,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Search for the package: pkgfile libname.so.6 (install pkgfile first: sudo pacman -S pkgfile && sudo pkgfile -u). Or search: pacman -Ss libname. Install it: sudo pacman -S packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -136,68 +136,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, most apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: apt-file search libname.so.6 (swap in the missing filename). Or search: apt-cache search libname. Install it: sudo apt install libpackagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo apt install xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -128,68 +128,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity. For Steam on openSUSE: sudo zypper install steam (from the games repo on OBS)."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: zypper what-provides 'libname.so.6'. Or search: zypper search libname. Install it: sudo zypper install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo zypper install xorg-x11-server-Xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -118,68 +118,3 @@ match_text = "GPU HANG"
|
|||
severity = "warn"
|
||||
title = "Graphics card stopped responding"
|
||||
body = "The graphics system crashed and recovered — similar to an app freezing on iPad, but at a lower level. If this keeps happening during games or video, update your graphics drivers: sudo pacman -Syu"
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Search for the package: pkgfile libname.so.6 (install pkgfile first: sudo pacman -S pkgfile && sudo pkgfile -u). Or search: pacman -Ss libname. Install it: sudo pacman -S packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo pacman -S xorg-xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -135,68 +135,3 @@ match_text = "GStreamer: Failed to find plugin"
|
|||
severity = "info"
|
||||
title = "Video or audio format not supported"
|
||||
body = "Linux needs extra packages to play some media formats. On Ubuntu/Mint: sudo apt install ubuntu-restricted-extras — this adds support for MP3, MP4, and other common formats."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, most apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: apt-file search libname.so.6 (swap in the missing filename). Or search: apt-cache search libname. Install it: sudo apt install libpackagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo apt install xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -100,68 +100,3 @@ match_text = "GStreamer: Failed to find plugin"
|
|||
severity = "info"
|
||||
title = "Video or audio format not supported"
|
||||
body = "Fedora needs extra packages for some media formats. Enable RPM Fusion: sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm — then: sudo dnf install gstreamer1-plugins-bad-free gstreamer1-plugins-ugly"
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: dnf provides 'libname.so.6'. Or search: dnf search libname. Install it: sudo dnf install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo dnf install xorg-x11-server-Xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -109,68 +109,3 @@ match_text = "Activation failed"
|
|||
severity = "info"
|
||||
title = "Wi-Fi connection failed"
|
||||
body = "Check YaST -> Network Settings — or: nmcli device status — in a terminal."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: zypper what-provides 'libname.so.6'. Or search: zypper search libname. Install it: sudo zypper install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo zypper install xorg-x11-server-Xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -217,57 +217,3 @@ match_text = "Activation failed"
|
|||
severity = "info"
|
||||
title = "NetworkManager: connection failed"
|
||||
body = "nmcli device status — if a wifi adapter is missing, check dmesg for firmware errors. CachyOS ships most firmware in linux-firmware but some chips (Realtek 8852) need AUR packages."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Search for the package: pkgfile libname.so.6 (install pkgfile first: sudo pacman -S pkgfile && sudo pkgfile -u). Or search: pacman -Ss libname. Install it: sudo pacman -S packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -175,57 +175,3 @@ match_text = "Failed to compile shader"
|
|||
severity = "info"
|
||||
title = "RetroArch shader failed to compile"
|
||||
body = "A graphical shader couldn't load. Try switching preset in Settings -> Video -> Shaders."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Search for the package: pkgfile libname.so.6 (install pkgfile first: sudo pacman -S pkgfile && sudo pkgfile -u). Or search: pacman -Ss libname. Install it: sudo pacman -S packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -170,57 +170,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Search for the package: pkgfile libname.so.6 (install pkgfile first: sudo pacman -S pkgfile && sudo pkgfile -u). Or search: pacman -Ss libname. Install it: sudo pacman -S packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -136,68 +136,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, most apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: apt-file search libname.so.6 (swap in the missing filename). Or search: apt-cache search libname. Install it: sudo apt install libpackagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo apt install xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -144,57 +144,3 @@ match_text = "wine: cannot find"
|
|||
severity = "warn"
|
||||
title = "Proton runtime issue"
|
||||
body = "Right-click game in Steam -> Properties -> Local Files -> Verify integrity. Steam on Fedora: sudo dnf install steam (from RPM Fusion free)."
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: dnf provides 'libname.so.6'. Or search: dnf search libname. Install it: sudo dnf install packagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
|
|
|||
|
|
@ -185,79 +185,3 @@ match_text = "ERROR: failed to write"
|
|||
severity = "warn"
|
||||
title = "Steam disk write error"
|
||||
body = "Steam can't write to its library folder. Check: ls -la ~/.local/share/Steam"
|
||||
|
||||
# ── Dynamic linker / shared libraries ────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "missing-shared-library"
|
||||
sources = ["journald"]
|
||||
match_text = "cannot open shared object file: No such file or directory"
|
||||
severity = "warn"
|
||||
title = "App is missing a system library"
|
||||
body = "This program needs a shared library that isn't installed. On Linux, most apps use shared system libraries rather than bundling their own — unlike Windows .exe files. Find the right package: apt-file search libname.so.6 (swap in the missing filename). Or search by name: apt-cache search libname. Install it: sudo apt install libpackagename. Note: pip and pip3 cannot fix this — Python packages are not system libraries."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-network-wait"
|
||||
sources = ["journald"]
|
||||
match_text = "Failed to start Network Wait Online"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: waiting for network"
|
||||
body = "systemd is waiting for a full network connection before finishing boot. This is almost never needed on a desktop or laptop. Disable it: sudo systemctl disable systemd-networkd-wait-online.service NetworkManager-wait-online.service — then reboot. Unlike Windows, Linux lets you disable any boot step that isn't relevant to your setup."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-device-timeout"
|
||||
sources = ["journald"]
|
||||
match_text = "Timed out waiting for device"
|
||||
severity = "warn"
|
||||
title = "Boot is slow: a device that no longer exists"
|
||||
body = "systemd is waiting for a disk, partition, or device that isn't connected. Common cause: /etc/fstab has an entry for an external drive or old partition. Check: cat /etc/fstab — look for lines pointing to drives that aren't always connected. Add the 'nofail' option to make them optional: UUID=xxx /mnt/point type defaults,nofail 0 0. Or comment the line out with #."
|
||||
|
||||
[[patterns]]
|
||||
id = "slow-boot-long-running-job"
|
||||
sources = ["journald"]
|
||||
match_text = "A start job is running for"
|
||||
severity = "info"
|
||||
title = "A service is taking a long time to start"
|
||||
body = "A background service is taking longer than expected during boot. To find what's slowing your startup: open a terminal after booting and run: systemd-analyze blame — the top entries are the biggest contributors. For a visual timeline saved to a file: systemd-analyze plot > ~/boot-profile.svg — then open the SVG in a browser."
|
||||
|
||||
# ── SSH / remote access ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "ssh-permissions-key"
|
||||
sources = ["journald"]
|
||||
match_text = "WARNING: UNPROTECTED PRIVATE KEY FILE"
|
||||
severity = "warn"
|
||||
title = "SSH key permissions are too open"
|
||||
body = "Your SSH private key is readable by other users on this system — SSH refuses to use it as a security measure. Fix: chmod 600 ~/.ssh/id_rsa (replace id_rsa with the key filename shown in the error). Also lock the directory: chmod 700 ~/.ssh. This is different from Windows where file permissions are mostly advisory."
|
||||
|
||||
# ── Flatpak ───────────────────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "flatpak-missing-runtime"
|
||||
sources = ["journald"]
|
||||
match_text = "error: runtime/org."
|
||||
severity = "warn"
|
||||
title = "Flatpak app is missing a runtime"
|
||||
body = "A Flatpak app can't find a required runtime (a shared set of libraries). Update all runtimes first: flatpak update — if that doesn't fix it, reinstall the app: flatpak install flathub com.example.AppName. Flatpak runtimes are like Windows runtime packages (VC++ Redistributable) but for Linux apps."
|
||||
|
||||
# ── Security (AppArmor) ───────────────────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "apparmor-denial"
|
||||
sources = ["journald"]
|
||||
match_text = "apparmor=\"DENIED\""
|
||||
severity = "warn"
|
||||
title = "AppArmor blocked an application"
|
||||
body = "AppArmor (a mandatory access control system) blocked a program from accessing a file or resource. This often happens with Wine, Bottles, or AppImages running software that wasn't installed through your package manager. To see what was blocked: sudo journalctl -b | grep apparmor. To temporarily put a profile in learning mode: sudo aa-complain /etc/apparmor.d/profile-name."
|
||||
|
||||
|
||||
# ── Display / Wayland compatibility ──────────────────────────────────────────
|
||||
|
||||
[[patterns]]
|
||||
id = "xwayland-crash"
|
||||
sources = ["journald"]
|
||||
match_text = "XWayland server terminated unexpectedly"
|
||||
severity = "warn"
|
||||
title = "XWayland crashed"
|
||||
body = "XWayland is the compatibility layer that lets older X11 apps run under Wayland. It crashed, so apps that aren't Wayland-native will stop working until you restart your session. If XWayland keeps crashing: make sure it's installed (sudo apt install xwayland) and check GPU driver stability. Log out and back in to recover."
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,12 @@
|
|||
"version": "0.1.0",
|
||||
"identifier": "tech.circuitforge.robin",
|
||||
"build": {
|
||||
"frontendDist": "../dist"
|
||||
"frontendDist": "../dist",
|
||||
"devUrl": "http://localhost:1420",
|
||||
"beforeDevCommand": "npm run dev",
|
||||
"beforeBuildCommand": "npm run build"
|
||||
},
|
||||
"app": {
|
||||
"withGlobalTauri": true,
|
||||
"windows": [
|
||||
{
|
||||
"label": "chat",
|
||||
|
|
@ -30,7 +32,7 @@
|
|||
"tooltip": "Robin"
|
||||
},
|
||||
"security": {
|
||||
"csp": "default-src 'self' tauri: asset: ipc:; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; connect-src ipc: http://ipc.localhost asset: http://localhost:*"
|
||||
"csp": "default-src 'self'; connect-src http://localhost:* ipc: asset:"
|
||||
}
|
||||
},
|
||||
"bundle": {
|
||||
|
|
|
|||
Loading…
Reference in a new issue