Skip to content

Commit f9f2be3

Browse files
authored
Merge pull request #17 from derenv/smi-uuids-fix
Nvidia-SMI fix
2 parents b9b502c + 9baea91 commit f9f2be3

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

src/mainwindow/imp.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,6 +1506,7 @@ impl MainWindow {
15061506
Ok(gpu_uuids) => {
15071507
// Construct a row for each GPU
15081508
for uuid in gpu_uuids {
1509+
println!("UUID: `{}`", uuid); //TEST
15091510
// Grab current provider
15101511
let provider_container: Option<Provider> = self.provider.take();
15111512
self.provider.set(provider_container.clone());

src/provider/mod.rs

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,8 @@ impl Provider {
112112
// Check provider type
113113
let processor_args: [&str; 2];
114114
match self.property::<i32>("provider-type") {
115-
// Nvidia Settings/SMI
116-
0 => {
117-
processor_args = [
118-
"nvidia-settings",
119-
"-q GpuUUID -t"
120-
];
121-
}
122-
// Nvidia Settings
123-
1 => {
115+
// Nvidia Settings/SMI OR Nvidia Settings
116+
0 | 1 => {
124117
processor_args = [
125118
"nvidia-settings",
126119
"-q GpuUUID -t"
@@ -130,14 +123,14 @@ impl Provider {
130123
2 => {
131124
processor_args = [
132125
"nvidia-smi",
133-
"--query-gpu=gpu_name --format=csv,noheader"
126+
"-L"
134127
];
135128
}
136129
// Nvidia Optimus
137130
3 => {
138131
processor_args = [
139132
"optirun",
140-
"nvidia-smi --query-gpu=gpu_name --format=csv,noheader"
133+
"nvidia-smi -L"
141134
];
142135
}
143136
_ => {
@@ -159,7 +152,30 @@ impl Provider {
159152
Ok(output) => match output {
160153
Some(valid_output) => {
161154
// If a valid output given, finally return to main window
162-
Ok(valid_output)
155+
match self.property::<i32>("provider-type") {
156+
// Nvidia Settings/SMI OR Nvidia Settings
157+
0 | 1 => Ok(valid_output),
158+
// Nvidia SMI or Nvidia Optimus
159+
2 | 3 => {
160+
let mut cleaned_output: Vec<String> = vec![];
161+
for line in valid_output {
162+
// Grab mostly-correct contents
163+
let wanted: Vec<&str> = line.split("(UUID: ").collect();
164+
165+
// Remove any unwanted chars
166+
let cleaned_line = wanted[1].replace(")", "");
167+
168+
// Add to output
169+
cleaned_output.push(cleaned_line);
170+
}
171+
172+
Ok(cleaned_output)
173+
},
174+
_ => {
175+
// Return error..
176+
return Err(String::from("Invalid provider, check preferences.."))
177+
},
178+
}
163179
}
164180
None => {
165181
// Return error..
@@ -199,8 +215,9 @@ impl Provider {
199215
];
200216
*/
201217
pub fn get_gpu_data(&self, uuid: &str, property: &str) -> Result<String, String> {
202-
//println!("ASKED TO FETCH: `{}`", property);//TEST
203-
//println!("TYPE: `{}`", self.property::<i32>("provider_type"));//TEST
218+
println!("UUID: `{}`", uuid);//TEST
219+
println!("ASKED TO FETCH: `{}`", property);//TEST
220+
println!("TYPE: `{}`", self.property::<i32>("provider_type"));//TEST
204221

205222
// Translate to appropriate name
206223
let final_property: String;

0 commit comments

Comments
 (0)