🐛 fix(bluetooth): use rfkill as fallback to enable/disable bluetooth
This commit is contained in:
1 file changed
+16
-11
@@ -2,7 +2,7 @@ import subprocess
|
||||
|
||||
import gi
|
||||
from fabric.bluetooth import BluetoothClient, BluetoothDevice
|
||||
from fabric.utils import exec_shell_command, get_relative_path
|
||||
from fabric.utils import get_relative_path, exec_shell_command
|
||||
from fabric.widgets.box import Box
|
||||
from fabric.widgets.button import Button
|
||||
from fabric.widgets.centerbox import CenterBox
|
||||
@@ -12,10 +12,9 @@ from fabric.widgets.revealer import Revealer
|
||||
from fabric.widgets.scrolledwindow import ScrolledWindow
|
||||
from fabric.widgets.separator import Separator
|
||||
from fabric.widgets.svg import Svg
|
||||
from gi.repository import Gdk, GLib, Gtk
|
||||
from loguru import logger
|
||||
|
||||
from gi.repository import Gdk, Gtk, GLib
|
||||
from services.battery import Battery
|
||||
from loguru import logger
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
gi.require_version("Gdk", "3.0")
|
||||
@@ -28,14 +27,20 @@ def set_bluetooth_enabled_with_fallback(client, enabled: bool):
|
||||
except Exception as e:
|
||||
logger.warning(f"Fabric bluetooth set_enabled({enabled}) failed: {e}")
|
||||
|
||||
# Fallback to bluetoothctl using exec_shell_command
|
||||
power_state = "on" if enabled else "off"
|
||||
command = f"bluetoothctl power {power_state}"
|
||||
# Fallback to rfkill to unblock/block bluetooth
|
||||
if enabled:
|
||||
command = "rfkill unblock bluetooth"
|
||||
else:
|
||||
command = "rfkill block bluetooth"
|
||||
|
||||
try:
|
||||
exec_shell_command(command)
|
||||
except Exception as fallback_e:
|
||||
logger.error(f"bluetoothctl fallback failed: {fallback_e}")
|
||||
result = exec_shell_command(command)
|
||||
if result is False:
|
||||
logger.error(f"rfkill fallback failed: command '{command}' returned False")
|
||||
elif isinstance(result, str) and result.strip():
|
||||
# If result is a non-empty string, it might be an error message
|
||||
logger.warning(f"rfkill command output: {result.strip()}")
|
||||
else:
|
||||
logger.info(f"rfkill fallback succeeded: {command}")
|
||||
|
||||
|
||||
class BluetoothDeviceSlot(CenterBox):
|
||||
|
||||
Reference in new issue
Block a user