Hotfix: Catch some edge-cases exposed on fedora 34

This commit is contained in:
Luke D Jones
2021-03-10 11:20:19 +13:00
parent 7c2fb0be81
commit dfe1f02101
2 changed files with 31 additions and 3 deletions

View File

@@ -47,6 +47,7 @@ impl Dbus for CtrlGraphics {
fn set_vendor(&mut self, vendor: String) { fn set_vendor(&mut self, vendor: String) {
if let Ok(tmp) = GfxVendors::from_str(&vendor) { if let Ok(tmp) = GfxVendors::from_str(&vendor) {
info!("Switching gfx mode to {}", vendor);
let msg = self.set_gfx_config(tmp).unwrap_or_else(|err| { let msg = self.set_gfx_config(tmp).unwrap_or_else(|err| {
error!("{}", err); error!("{}", err);
format!("Failed: {}", err.to_string()) format!("Failed: {}", err.to_string())
@@ -260,13 +261,29 @@ impl CtrlGraphics {
} }
fn do_driver_action(driver: &str, action: &str) -> Result<(), RogError> { fn do_driver_action(driver: &str, action: &str) -> Result<(), RogError> {
let mut cmd = Command::new(action); let mut cmd;
if Self::kmod_exists() {
info!("using kmod");
cmd = Command::new("kmod");
cmd.arg(action);
} else {
cmd = Command::new(action);
}
cmd.arg(driver); cmd.arg(driver);
let output = cmd let output = cmd
.output() .output()
.map_err(|err| RogError::Command(format!("{:?}", cmd), err))?; .map_err(|err| RogError::Command(format!("{:?}", cmd), err))?;
if !output.status.success() { if !output.status.success() {
if output.stderr.ends_with("is not currently loaded\n".as_bytes()) {
return Ok(())
}
if output.stderr.ends_with("Permission denied\n".as_bytes()) {
let msg = format!("{} {} failed: {:?}", action, driver, String::from_utf8_lossy(&output.stderr));
warn!("{}", msg);
warn!("It may be safe to ignore the above error, run `lsmod |grep nvidia` to confirm modules loaded");
return Ok(())
}
let msg = format!("{} {} failed: {:?}", action, driver, String::from_utf8_lossy(&output.stderr)); let msg = format!("{} {} failed: {:?}", action, driver, String::from_utf8_lossy(&output.stderr));
return Err(RogError::Modprobe(msg)); return Err(RogError::Modprobe(msg));
} }
@@ -313,6 +330,17 @@ impl CtrlGraphics {
); );
} }
fn kmod_exists() -> bool {
let mut cmd = Command::new("which");
cmd.arg("kmod");
if let Ok(output) = cmd
.output() {
return output.status.success() && output.stdout.ends_with("kmod".as_bytes())
}
//Path::new("/usr/bin/kmod").exists()
false
}
pub fn do_vendor_tasks(&mut self, vendor: GfxVendors) -> Result<(), RogError> { pub fn do_vendor_tasks(&mut self, vendor: GfxVendors) -> Result<(), RogError> {
Self::write_xorg_conf(vendor)?; Self::write_xorg_conf(vendor)?;
Self::write_modprobe_conf()?; // TODO: Not required here, should put in startup? Self::write_modprobe_conf()?; // TODO: Not required here, should put in startup?

View File

@@ -2,6 +2,7 @@
Description=ASUS Notebook Control Description=ASUS Notebook Control
StartLimitInterval=200 StartLimitInterval=200
StartLimitBurst=2 StartLimitBurst=2
Before=display-manager.service
[Service] [Service]
ExecStart=/usr/bin/asusd ExecStart=/usr/bin/asusd
@@ -9,5 +10,4 @@ Restart=on-failure
Restart=always Restart=always
RestartSec=1 RestartSec=1
Type=dbus Type=dbus
BusName=org.asuslinux.Daemon BusName=org.asuslinux.Daemon
Before=display-manager.service