mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-01-22 17:33:19 +01:00
Hotfix: Catch some edge-cases exposed on fedora 34
This commit is contained in:
@@ -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?
|
||||||
|
|||||||
@@ -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
|
|
||||||
Reference in New Issue
Block a user