Add FUSE fix wizard with pkexec installation

Dashboard shows a banner when FUSE is not functional. The wizard
detects the distro, shows the install command, and runs it via pkexec.
Verifies FUSE status after installation completes.
This commit is contained in:
lashman
2026-02-27 23:59:26 +02:00
parent 00a1ed3599
commit 45b45c0724
5 changed files with 247 additions and 0 deletions

View File

@@ -307,6 +307,53 @@ fn extract_os_field(content: &str, key: &str) -> Option<String> {
None
}
/// Get the package install command suitable for running via pkexec (no sudo prefix).
pub fn get_fuse_install_command() -> Option<String> {
let content = std::fs::read_to_string("/etc/os-release").ok()?;
let id = extract_os_field(&content, "ID");
let version_id = extract_os_field(&content, "VERSION_ID");
let id_like = extract_os_field(&content, "ID_LIKE");
match id.as_deref() {
Some("ubuntu") => {
let ver: f64 = version_id
.as_deref()
.and_then(|v| v.parse().ok())
.unwrap_or(0.0);
if ver >= 24.04 {
Some("apt install -y libfuse2t64".to_string())
} else {
Some("apt install -y libfuse2".to_string())
}
}
Some("debian") => Some("apt install -y libfuse2".to_string()),
Some("fedora") => Some("dnf install -y fuse-libs".to_string()),
Some("arch") | Some("manjaro") | Some("endeavouros") => {
Some("pacman -S --noconfirm fuse2".to_string())
}
Some("opensuse-tumbleweed") | Some("opensuse-leap") => {
Some("zypper install -y libfuse2".to_string())
}
_ => {
if let Some(like) = id_like.as_deref() {
if like.contains("ubuntu") || like.contains("debian") {
return Some("apt install -y libfuse2".to_string());
}
if like.contains("fedora") {
return Some("dnf install -y fuse-libs".to_string());
}
if like.contains("arch") {
return Some("pacman -S --noconfirm fuse2".to_string());
}
if like.contains("suse") {
return Some("zypper install -y libfuse2".to_string());
}
}
None
}
}
}
/// Check if AppImageLauncher is installed (known conflicts with new runtime).
pub fn detect_appimagelauncher() -> Option<String> {
let output = Command::new("dpkg")