#!/usr/bin/env python3 import dbus import dbus.mainloop.glib import os from gi.repository import GLib # Define the paths to the PNG icons ICON_PATHS = { "nvidia": "/home/teraflops/Icons/nvidia-icon.svg", "integrated": "/home/teraflops/Icons/amd.png", } # Function to interpret the numerical status into a clearer message def interpret_gpu_status(status): if status == 0: return "nvidia" elif status == 1: return "integrated" else: return None # Ignore "switching mode" and other unknown statuses # Function to send the signal using `os.system()` def send_signal_to_waybar(): try: print("Enviando señal RTMIN+3 a Waybar usando os.system") # Mensaje de depuración os.system("/usr/bin/pkill -RTMIN+3 waybar") except Exception as e: print(f"Error al enviar la señal con os.system: {e}") # Función para escribir el script shell con la ruta de la imagen y el tooltip en /tmp/gpu.sh def write_gpu_icon_script(status_message): try: icon_path = ICON_PATHS.get(status_message) if icon_path: # Define el texto del tooltip basado en el estado tooltip_text = f"GPU: {status_message.capitalize()}" print(f"Escribiendo en /tmp/gpu.sh:") print(f"Ruta de la imagen: {icon_path}") print(f"Texto del tooltip: {tooltip_text}") # Escribe dos líneas: una para la ruta de la imagen y otra para el tooltip with open("/tmp/gpu.sh", "w") as file: file.write("#!/bin/sh\n") file.write(f'echo "{icon_path}"\n') file.write(f'echo "{tooltip_text}"\n') # Hace que el script sea ejecutable os.chmod("/tmp/gpu.sh", 0o755) print("Script /tmp/gpu.sh actualizado correctamente.") else: print(f"No se encontró un icono para el estado: {status_message}") except Exception as e: print(f"Error al escribir el script en /tmp/gpu.sh: {e}") # Callback para `NotifyGfxStatus` def on_notify_gfx_status(status): print(f"Callback `on_notify_gfx_status` invocado con status: {status}") # Depuración status_message = interpret_gpu_status(status) # Si el estado no es "nvidia" o "integrated", ignorarlo if status_message: print(f"Estado de GPU cambiado: {status_message}") # Guarda el script shell con la ruta de la imagen y el tooltip en /tmp/gpu.sh write_gpu_icon_script(status_message) # Envía la señal a Waybar usando os.system send_signal_to_waybar() else: print("Estado intermedio detectado, no se tomará ninguna acción.") # Callback para `NotifyGfx` def on_notify_gfx(vendor): print(f"Callback `on_notify_gfx` invocado con vendor: {vendor}") # Callback para `NotifyAction` def on_notify_action(action): print(f"Callback `on_notify_action` invocado con action: {action}") # Inicializa el loop de D-Bus dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) # Conecta al bus del sistema y obtiene el objeto bus = dbus.SystemBus() proxy = bus.get_object("org.supergfxctl.Daemon", "/org/supergfxctl/Gfx") # Suscribirse a las señales `NotifyGfxStatus`, `NotifyGfx` y `NotifyAction` bus.add_signal_receiver(on_notify_gfx_status, dbus_interface="org.supergfxctl.Daemon", signal_name="NotifyGfxStatus") bus.add_signal_receiver(on_notify_gfx, dbus_interface="org.supergfxctl.Daemon", signal_name="NotifyGfx") bus.add_signal_receiver(on_notify_action, dbus_interface="org.supergfxctl.Daemon", signal_name="NotifyAction") print("Monitoreando señales de GPU...") # Inicia el loop principal loop = GLib.MainLoop() loop.run()