commit
2101f17b7b
|
@ -174,26 +174,32 @@ pub fn primary_gpu<S: AsRef<str>>(seat: S) -> IoResult<Option<PathBuf>> {
|
||||||
enumerator.match_subsystem("drm")?;
|
enumerator.match_subsystem("drm")?;
|
||||||
enumerator.match_sysname("card[0-9]*")?;
|
enumerator.match_sysname("card[0-9]*")?;
|
||||||
|
|
||||||
let mut result = None;
|
if let Some(path) = enumerator
|
||||||
for device in enumerator.scan_devices()? {
|
.scan_devices()?
|
||||||
|
.filter_map(|device| {
|
||||||
if device
|
if device
|
||||||
.property_value("ID_SEAT")
|
.property_value("ID_SEAT")
|
||||||
.map(|x| x.to_os_string())
|
.map(|x| x.to_os_string())
|
||||||
.unwrap_or_else(|| OsString::from("seat0"))
|
.unwrap_or_else(|| OsString::from("seat0"))
|
||||||
== *seat.as_ref()
|
== *seat.as_ref()
|
||||||
{
|
{
|
||||||
if let Some(pci) = device.parent_with_subsystem(Path::new("pci"))? {
|
if let Ok(Some(pci)) = device.parent_with_subsystem(Path::new("pci")) {
|
||||||
if let Some(id) = pci.attribute_value("boot_vga") {
|
if let Some(id) = pci.attribute_value("boot_vga") {
|
||||||
if id == "1" {
|
if id == "1" {
|
||||||
result = Some(device);
|
return Some(device);
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if result.is_none() {
|
|
||||||
result = Some(device);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(result.and_then(|device| device.devnode().map(PathBuf::from)))
|
};
|
||||||
|
None
|
||||||
|
})
|
||||||
|
.flat_map(|device| device.devnode().map(PathBuf::from))
|
||||||
|
.next()
|
||||||
|
{
|
||||||
|
Ok(Some(path))
|
||||||
|
} else {
|
||||||
|
all_gpus(seat).map(|all| all.into_iter().next())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the paths of all available GPU devices
|
/// Returns the paths of all available GPU devices
|
||||||
|
|
Loading…
Reference in New Issue