Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 5 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

Nothing is released yet. See
[ROADMAP.md](https://github.com/onyks-os/USBGuardGUI/blob/main/ROADMAP.md) for the phase order.
## [0.1.0] - 2026-09-27

The first release.

### Added

Expand Down Expand Up @@ -64,12 +65,5 @@ Nothing is released yet. See
- `docs/architecture.md`: `listRules` takes a label filter, not a query — `""` lists every rule,
`"match"` would have listed none. Found by introspection before any code depended on it.

### Deprecated

### Removed

### Fixed

### Security

[Unreleased]: https://github.com/onyks-os/USBGuardGUI/commits/main
[Unreleased]: https://github.com/onyks-os/USBGuardGUI/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/onyks-os/USBGuardGUI/releases/tag/v0.1.0
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
<h1 align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
<img src="assets/logo-light.svg" alt="USBGuard GUI" width="460">
<img src="assets/logo-light.svg" alt="USBGuardGUI" width="460">
</picture>
</h1>

Expand Down Expand Up @@ -38,6 +38,10 @@ SPDX-License-Identifier: MIT
Plug in a device, see it appear as **blocked**, allow it for this session with one click — and when
something does not work, be told *exactly* which layer refused and what to run to fix it.

<p align="center">
<img src="data/screenshots/01-devices.png" alt="The device list: every connected device, its state, and Allow, Block, and Reject buttons" width="760">
</p>

> [!NOTE]
> USBGuardGUI is a front end. The protection comes from the **USBGuard daemon**, which decides what
> the kernel lets through; this program only asks it, with your authorization, to change its mind.
Expand Down
29 changes: 28 additions & 1 deletion data/io.github.onyks_os.UsbguardGui.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,40 @@
<control>keyboard</control>
<control>touch</control>
</supports>
<screenshots>
<screenshot type="default">
<caption>Every connected device and whether it is authorized</caption>
<caption xml:lang="it">Ogni dispositivo collegato e se è autorizzato</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/01-devices.png</image>
</screenshot>
<screenshot>
<caption>Allow, block, or reject a device, for this session or permanently</caption>
<caption xml:lang="it">Consenti, blocca o rifiuta un dispositivo, per questa sessione o permanentemente</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/02-device-action.png</image>
</screenshot>
<screenshot>
<caption>The policy rules in the order USBGuard evaluates them</caption>
<caption xml:lang="it">Le regole della policy nell’ordine in cui USBGuard le valuta</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/03-policy.png</image>
</screenshot>
<screenshot>
<caption>A guided editor for new rules</caption>
<caption xml:lang="it">Un editor guidato per le nuove regole</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/04-new-rule.png</image>
</screenshot>
<screenshot>
<caption>Diagnostics that name the exact cause of an access problem</caption>
<caption xml:lang="it">Una diagnostica che indica la causa esatta di un problema di accesso</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/05-diagnostics.png</image>
</screenshot>
</screenshots>
<branding>
<color type="primary" scheme_preference="light">#8ff0a4</color>
<color type="primary" scheme_preference="dark">#26a269</color>
</branding>
<content_rating type="oars-1.1"/>
<releases>
<release version="0.1.0" date="2026-09-23" type="stable">
<release version="0.1.0" date="2026-09-27" type="stable">
<description>
<p>First release.</p>
<p xml:lang="it">Prima versione.</p>
Expand Down
25 changes: 24 additions & 1 deletion data/io.github.onyks_os.UsbguardGui.metainfo.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,29 @@
<control>touch</control>
</supports>

<screenshots>
<screenshot type="default">
<caption>Every connected device and whether it is authorized</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/01-devices.png</image>
</screenshot>
<screenshot>
<caption>Allow, block, or reject a device, for this session or permanently</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/02-device-action.png</image>
</screenshot>
<screenshot>
<caption>The policy rules in the order USBGuard evaluates them</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/03-policy.png</image>
</screenshot>
<screenshot>
<caption>A guided editor for new rules</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/04-new-rule.png</image>
</screenshot>
<screenshot>
<caption>Diagnostics that name the exact cause of an access problem</caption>
<image>https://raw.githubusercontent.com/onyks-os/USBGuardGUI/v0.1.0/data/screenshots/05-diagnostics.png</image>
</screenshot>
</screenshots>

<branding>
<color type="primary" scheme_preference="light">#8ff0a4</color>
<color type="primary" scheme_preference="dark">#26a269</color>
Expand All @@ -70,7 +93,7 @@
<content_rating type="oars-1.1"/>

<releases>
<release version="0.1.0" date="2026-09-23" type="stable">
<release version="0.1.0" date="2026-09-27" type="stable">
<description>
<p>First release.</p>
<ul>
Expand Down
Binary file added data/screenshots/01-devices.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/screenshots/02-device-action.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/screenshots/03-policy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/screenshots/04-new-rule.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/screenshots/05-diagnostics.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
51 changes: 35 additions & 16 deletions po/it.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USBGuard GUI\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-26 13:04+0200\n"
"POT-Creation-Date: 2026-09-27 22:21+0200\n"
"PO-Revision-Date: 2026-09-25 19:39+0200\n"
"Last-Translator: onyks-os\n"
"Language-Team: Italian\n"
Expand Down Expand Up @@ -164,21 +164,17 @@ msgstr "Permanentemente"
msgid "Written to the policy; survives a restart"
msgstr "Scritto nelle regole; resta dopo un riavvio"

#: src/ui/diagnostic_dialog.rs:18
msgid "USBGuard access"
msgstr "Accesso a USBGuard"
#: src/ui/diagnostic_dialog.rs:21
msgid "Copy commands"
msgstr "Copia i comandi"

#: src/ui/diagnostic_dialog.rs:19 src/ui/window.rs:44
#: src/ui/diagnostic_dialog.rs:29 src/ui/window.rs:44
msgid "Checking…"
msgstr "Verifica in corso…"

#: src/ui/diagnostic_dialog.rs:21
msgid "Close"
msgstr "Chiudi"

#: src/ui/diagnostic_dialog.rs:49
msgid "Copy commands"
msgstr "Copia i comandi"
#: src/ui/diagnostic_dialog.rs:76
msgid "USBGuard access"
msgstr "Accesso a USBGuard"

#: src/ui/i18n.rs:60 src/ui/window.rs:45
msgid "Connected"
Expand Down Expand Up @@ -975,34 +971,57 @@ msgstr "dispositivo"
msgid "security"
msgstr "sicurezza"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:67
msgid "Every connected device and whether it is authorized"
msgstr "Ogni dispositivo collegato e se è autorizzato"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:71
msgid "Allow, block, or reject a device, for this session or permanently"
msgstr "Consenti, blocca o rifiuta un dispositivo, per questa sessione o permanentemente"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:75
msgid "The policy rules in the order USBGuard evaluates them"
msgstr "Le regole della policy nell’ordine in cui USBGuard le valuta"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:79
msgid "A guided editor for new rules"
msgstr "Un editor guidato per le nuove regole"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:83
msgid "Diagnostics that name the exact cause of an access problem"
msgstr "Una diagnostica che indica la causa esatta di un problema di accesso"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:98
msgid "First release."
msgstr "Prima versione."

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:77
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:100
msgid ""
"Live device list; allow, block, or reject a device for this session or "
"permanently"
msgstr ""
"Elenco dei dispositivi in tempo reale; consenti, blocca o rifiuta un "
"dispositivo per questa sessione o permanentemente"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:78
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:101
msgid ""
"Policy view in evaluation order, with a guided rule editor and safe rule "
"removal"
msgstr ""
"Vista delle regole nell’ordine di valutazione, con un editor guidato e una "
"rimozione sicura"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:79
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:102
msgid "Notifications for newly inserted devices that are not authorized"
msgstr "Notifiche per i dispositivi appena collegati e non autorizzati"

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:80
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:103
msgid ""
"Diagnostics that name the exact cause of an access problem, and usbguard-gui "
"--diagnose"
msgstr ""
"Una diagnostica che indica la causa esatta di un problema di accesso, e "
"usbguard-gui --diagnose"

#~ msgid "Close"
#~ msgstr "Chiudi"
44 changes: 30 additions & 14 deletions po/usbguard-gui.pot
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-26 13:04+0200\n"
"POT-Creation-Date: 2026-09-27 22:21+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
Expand Down Expand Up @@ -162,20 +162,16 @@ msgstr ""
msgid "Written to the policy; survives a restart"
msgstr ""

#: src/ui/diagnostic_dialog.rs:18
msgid "USBGuard access"
#: src/ui/diagnostic_dialog.rs:21
msgid "Copy commands"
msgstr ""

#: src/ui/diagnostic_dialog.rs:19 src/ui/window.rs:44
#: src/ui/diagnostic_dialog.rs:29 src/ui/window.rs:44
msgid "Checking…"
msgstr ""

#: src/ui/diagnostic_dialog.rs:21
msgid "Close"
msgstr ""

#: src/ui/diagnostic_dialog.rs:49
msgid "Copy commands"
#: src/ui/diagnostic_dialog.rs:76
msgid "USBGuard access"
msgstr ""

#: src/ui/i18n.rs:60 src/ui/window.rs:45
Expand Down Expand Up @@ -914,27 +910,47 @@ msgstr ""
msgid "security"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:67
msgid "Every connected device and whether it is authorized"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:71
msgid "Allow, block, or reject a device, for this session or permanently"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:75
msgid "The policy rules in the order USBGuard evaluates them"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:79
msgid "A guided editor for new rules"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:83
msgid "Diagnostics that name the exact cause of an access problem"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:98
msgid "First release."
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:77
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:100
msgid ""
"Live device list; allow, block, or reject a device for this session or "
"permanently"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:78
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:101
msgid ""
"Policy view in evaluation order, with a guided rule editor and safe rule "
"removal"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:79
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:102
msgid "Notifications for newly inserted devices that are not authorized"
msgstr ""

#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:80
#: data/io.github.onyks_os.UsbguardGui.metainfo.xml.in:103
msgid ""
"Diagnostics that name the exact cause of an access problem, and usbguard-gui "
"--diagnose"
Expand Down
8 changes: 2 additions & 6 deletions src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,9 @@ fn yes_no(value: Option<bool>, yes: &str, no: &str) -> String {
#[must_use]
pub fn format_report(report: &ProbeReport, distro: Distro) -> String {
let mut out = String::new();
let _ = writeln!(
out,
"USBGuard GUI {} — access diagnostics\n",
crate::VERSION
);
let _ = writeln!(out, "USBGuardGUI {} — access diagnostics\n", crate::VERSION);
let line = |out: &mut String, label: &str, value: &str| {
let _ = writeln!(out, " {label:<28}{value}");
let _ = writeln!(out, " {label:<24}{value}");
};
let bus = if report.state == AccessState::BusUnavailable {
"unavailable"
Expand Down
Loading
Loading