diff --git a/debian/changelog b/debian/changelog index fa507c6..e7a934a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +wlanpi-fpms (1.4.4) unstable; urgency=medium + + * Fixes "Reboot in progress" message shown when not rebooting + * Shows "Shutdown in progress" message when shutdown is triggered outside FPMS + + -- Adrian Granados Sun, 06 Oct 2024 00:00:00 -0500 + wlanpi-fpms (1.4.3) unstable; urgency=medium * Adds option System > Settings > Rotate Display diff --git a/fpms/fpms.py b/fpms/fpms.py index 6b4762f..fc0ebf7 100755 --- a/fpms/fpms.py +++ b/fpms/fpms.py @@ -116,54 +116,34 @@ def log_to_syslog(message, level=syslog.LOG_INFO): syslog.closelog() -# Central function to detect reboot signals -def detect_reboot_target(args): - """ - This function checks if reboot.target or related unit paths are in the signal arguments. - If detected, it triggers the shutdown handler. - """ - # log_to_syslog(f"Checking arguments for reboot.target: {args}") - - for arg in args: - # Check for reboot.target or its systemd path - if isinstance(arg, str) and ("reboot" in arg): - handle_shutdown() - return True # Stop further processing if reboot is detected - return False # No reboot detected - - -def handle_shutdown(): +def handle_reboot_or_shutdown(shutdown=False): global g_vars log_to_syslog(f"shutdown_in_progress: {g_vars['shutdown_in_progress']}") if not g_vars['shutdown_in_progress']: g_vars['shutdown_in_progress'] = True - log_to_syslog("Drawing reboot image") - oled.drawImage(Image.open(IMAGE_DIR + '/reboot.png').convert(DISPLAY_MODE)) - log_to_syslog("Reboot image drawn") + log_to_syslog("Drawing shutdown/reboot image") + if shutdown == True: + oled.drawImage(g_vars['shutdown_image']) + else: + oled.drawImage(g_vars['reboot_image']) + log_to_syslog("Shutdown/reboot image drawn") # Handler for PrepareForShutdown signal -def handle_prepare_for_shutdown(reboot_arg): +def handle_prepare_for_shutdown(arg): log_to_syslog("PrepareForShutdown signal received") - handle_shutdown() - + handle_reboot_or_shutdown() -# # Handler for Manager signals -# def handle_systemd_manager_signal(*args): -# log_to_syslog("Systemd Manager signal received") -# detect_reboot_target(args) - -# # Handler for unit-specific signals -# def handle_systemd_unit_signal(*args): -# log_to_syslog("Systemd unit signal received") -# detect_reboot_target(args) - - -# Generic handler for all signals -def handle_any_signal(*args): - # log_to_syslog("Generic D-Bus signal received") - detect_reboot_target(args) +# Handler for UnitNew signal +def handle_unitnew(*args): + log_to_syslog("UnitNew signal received") + for arg in args: + if isinstance(arg, str): + if ("reboot.target" in arg): + handle_reboot_or_shutdown() + elif ("halt.target" in arg) or ("poweroff.target" in arg): + handle_reboot_or_shutdown(True) def run_dbus_loop(): @@ -179,7 +159,8 @@ def run_dbus_loop(): # Take an inhibitor lock to receive the PrepareForShutdown signal fd = login1.Inhibit("shutdown", "fpms", "Delaying shutdown", "delay") - # Add a signal receiver for the "PrepareForShutdown" signal + # Add a signal receiver for the "PrepareForShutdown" signal from login1.Manager + # Handles systemctl reboot bus.add_signal_receiver( handle_prepare_for_shutdown, signal_name="PrepareForShutdown", @@ -188,41 +169,14 @@ def run_dbus_loop(): path="/org/freedesktop/login1" ) - # # Add signal receiver for high-level systemd Manager signals (JobNew, UnitNew, etc.) - # bus.add_signal_receiver( - # handle_systemd_manager_signal, - # dbus_interface="org.freedesktop.systemd1.Manager", # Systemd Manager interface - # signal_name=None, # Capture any signal (JobNew, JobRemoved, etc.) - # bus_name="org.freedesktop.systemd1", # Systemd bus name - # path="/org/freedesktop/systemd1", # Path to the Manager interface - # ) - - # # Add signal receiver for specific unit signals from reboot.target - # bus.add_signal_receiver( - # handle_systemd_unit_signal, - # dbus_interface="org.freedesktop.systemd1.Unit", # Unit interface - # signal_name=None, # Capture any signal related to the unit - # bus_name="org.freedesktop.systemd1", - # path="/org/freedesktop/systemd1/unit/reboot_2etarget" # Path to reboot.target unit - # ) - - # # Add signal receiver for specific unit signals from systemd-reboot.service - # bus.add_signal_receiver( - # handle_systemd_unit_signal, - # dbus_interface="org.freedesktop.systemd1.Unit", # Unit interface - # signal_name=None, # Capture any signal related to the unit - # bus_name="org.freedesktop.systemd1", - # path="/org/freedesktop/systemd1/unit/systemd_2dreboot_2eservice" # Path to systemd-reboot.service - # ) - - # Add a generic handler for all signals + # Add a signal receiver for UnitNew signal from systemd1.Manager + # Handles (legacy) reboot bus.add_signal_receiver( - handle_any_signal, # Callback for any signal - None, # Signal name (None = all signals) - None, # dbus_interface (None = all interfaces) - None, # bus_name (None = any sender) - None # path (None = all paths) + handle_unitnew, + dbus_interface="org.freedesktop.systemd1.Manager", + signal_name="UnitNew" ) + log_to_syslog(f"event handlers added") # Run indefinitely to handle D-Bus signals