AprilNEA/OpenLogi · error
no wired device matches `--device
Error message
no wired device matches `--device {q}` What it means
Thrown by the lighting diagnostic `run` when the wired (direct-USB) device lookup over the enumerated inventory yields `None` and a `--device <q>` query was supplied. Keyboard RGB control only works over direct USB, so this error means no direct-USB Logitech device matching the query was found. Receiver-routed devices do not count here.
Solutions
- Plug the keyboard directly into a USB port (receiver-routed devices can't do RGB lighting via this path).
- Check the query against the enumerated device names and fix any typo.
- If the device is a wireless model without wired support, this command cannot target it.
- Re-run without extra hubs/docks to rule out route changes, then retry the exact name.
Example fix
// before: keyboard on a receiver $ openlogi diag lighting --device "G915" --method direct ... // error: no wired device matches `--device G915` // after: plug the keyboard in via USB directly, then $ openlogi diag lighting --device "G915" --method direct ...
Defensive patterns
Strategy: validation
Validate before calling
// confirm the target is a wired (direct-USB) device before lighting commands
let inv = enumerate_inventory().await?;
let wired = inv.iter().filter(|i| i.is_direct_usb());
if !wired.clone().any(|i| i.name.eq_ignore_ascii_case(query)) {
eprintln!("{query} is not online via direct USB; lighting needs a wired connection");
} Try / catch
match run_lighting(args).await {
Err(e) if msg_contains(&e, "no wired device matches") => {
eprintln!("plug the keyboard in via USB (receiver-only devices cannot set lighting)");
}
other => other?,
} Prevention
- Connect RGB-capable keyboards directly over USB, not through a Bolt/Unifying receiver.
- Verify with `openlogi list` that the device shows a wired/direct-USB route first.
- Avoid USB hubs/docks for lighting work; they can change enumeration routes.
- Resolve `--device` from current enumeration output rather than remembered names.
When it happens
Trigger: Running the lighting command with `--device <q>` where the device-filtering fold over the inventory (matching vendor/product id of wired devices) produces no `(route, name)` pair for that query — wrong name, or the matching device is only reachable via a receiver.
Common situations: Querying a keyboard that is connected through a Bolt/Unifying receiver instead of direct USB; typo in the device name; keyboard connected via a USB hub that enumerates differently; scripting with an old device name.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- no wired (direct-USB) Logitech device found — is the…
- no online device matches `--device
- could not pick a device automatically. online devices
- the selected direct device is absent from the Agent snapshot
- . Candidates
AI-assisted analysis of AprilNEA/OpenLogi@e846e6f4b4 (2026-09-13).
Data as JSON: /api/errors/006cd73de6b41ad8.
Report an issue: GitHub.
Appendix: source
Thrown at crates/openlogi-cli/src/cmd/diag/lighting.rs:86
let name = paired.codename.clone().unwrap_or_else(|| {
format!(
"{:04x}:{:04x}",
inv.receiver.vendor_id, inv.receiver.product_id
)
});
if let Some(ref n) = needle
&& !name.to_lowercase().contains(n.as_str())
{
return None;
}
let route = DeviceRoute::Direct {
vendor_id: inv.receiver.vendor_id,
product_id: inv.receiver.product_id,
};
Some((route, name))
})
.ok_or_else(|| match &device_query {
Some(q) => anyhow!("no wired device matches `--device {q}`"),
None => {
anyhow!("no wired (direct-USB) Logitech device found — is the keyboard plugged in?")
}
})?;
let method: LightingMethod = args.method.into();
println!("setting {name} ({route}) to #{r:02x}{g:02x}{b:02x} via {method:?}");
openlogi_hid::set_keyboard_color_with(&route, method, r, g, b).await?;
println!("done — {name} should now be solid #{r:02x}{g:02x}{b:02x}");
Ok(())
}
#[cfg(test)]
mod color_validation_tests {
use openlogi_core::color::RgbParseError;
use super::{LightingArgs, Method, run};
View on GitHub (pinned to e846e6f4b4)