From fc99c9e2b408505d8dd6cc11bbc09ec0c8e3bbb4 Mon Sep 17 00:00:00 2001 From: Turann_ Date: Mon, 2 Mar 2026 00:59:44 +0300 Subject: [PATCH] Add userspace reboot/restart Update SessionMenuTab.qml Update CompositorService.qml Update settings-default.json Update en.json Update SessionProvider.qml Update LockScreenPanel.qml Update SessionMenuEntrySettingsDialog.qml Update SessionMenu.qml --- Assets/Translations/en.json | 1 + Assets/settings-default.json | 5 +++++ Modules/LockScreen/LockScreenPanel.qml | 3 +++ Modules/Panels/Launcher/Providers/SessionProvider.qml | 9 +++++++++ Modules/Panels/SessionMenu/SessionMenu.qml | 8 ++++++++ .../SessionMenu/SessionMenuEntrySettingsDialog.qml | 3 ++- .../Settings/Tabs/SessionMenu/SessionMenuTab.qml | 6 ++++++ Services/Compositor/CompositorService.qml | 10 ++++++++++ 8 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index fbd812b51..ffc1ea5df 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -476,6 +476,7 @@ "random": "Random", "reboot": "Reboot", "reboot-to-uefi": "Reboot to UEFI", + "userspace-reboot": "Userspace Reboot", "record": "Start recording", "refresh": "Refresh", "required": "(required)", diff --git a/Assets/settings-default.json b/Assets/settings-default.json index 6fedd6b8a..ff752f549 100644 --- a/Assets/settings-default.json +++ b/Assets/settings-default.json @@ -408,6 +408,11 @@ "action": "rebootToUefi", "enabled": true, "keybind": "7" + }, + { + "action": "userspace-reboot", + "enabled": false, + "keybind": "8" } ] }, diff --git a/Modules/LockScreen/LockScreenPanel.qml b/Modules/LockScreen/LockScreenPanel.qml index 7a3342af5..20326b1d3 100644 --- a/Modules/LockScreen/LockScreenPanel.qml +++ b/Modules/LockScreen/LockScreenPanel.qml @@ -88,6 +88,9 @@ Item { case "reboot": CompositorService.reboot(); break; + case "userspace-reboot": + CompositorService.userspaceReboot(); + break; case "shutdown": CompositorService.shutdown(); break; diff --git a/Modules/Panels/Launcher/Providers/SessionProvider.qml b/Modules/Panels/Launcher/Providers/SessionProvider.qml index 96ec479cf..04b7bcf8f 100644 --- a/Modules/Panels/Launcher/Providers/SessionProvider.qml +++ b/Modules/Panels/Launcher/Providers/SessionProvider.qml @@ -40,6 +40,12 @@ Item { "icon": iconMode === "tabler" ? "reboot" : "system-reboot", "keywords": ["reboot", "restart", "reload"] }, + { + "action": "userspace-reboot", + "labelKey": "common.userspace-reboot", + "icon": iconMode === "tabler" ? "rotate" : "system-reboot", + "keywords": ["reboot", "restart", "soft", "userspace"] + }, { "action": "logout", "labelKey": "common.logout", @@ -168,6 +174,9 @@ Item { case "reboot": CompositorService.reboot(); break; + case "userspace-reboot": + CompositorService.userspaceReboot(); + break; case "logout": CompositorService.logout(); break; diff --git a/Modules/Panels/SessionMenu/SessionMenu.qml b/Modules/Panels/SessionMenu/SessionMenu.qml index 8709f567e..f9c5d6e91 100644 --- a/Modules/Panels/SessionMenu/SessionMenu.qml +++ b/Modules/Panels/SessionMenu/SessionMenu.qml @@ -120,6 +120,11 @@ SmartPanel { "icon": "shutdown", "title": I18n.tr("common.shutdown"), "isShutdown": true + }, + "userspace-reboot": { + "icon": "rotate", + "title": I18n.tr("common.userspace-reboot"), + "isShutdown": false } } @@ -243,6 +248,9 @@ SmartPanel { case "reboot": CompositorService.reboot(); break; + case "userspace-reboot": + CompositorService.userspaceReboot(); + break; case "rebootToUefi": CompositorService.rebootToUefi(); break; diff --git a/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuEntrySettingsDialog.qml b/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuEntrySettingsDialog.qml index d8b67fd90..cd1738f29 100644 --- a/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuEntrySettingsDialog.qml +++ b/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuEntrySettingsDialog.qml @@ -24,7 +24,8 @@ Popup { "reboot": "systemctl reboot || loginctl reboot", "rebootToUefi": "systemctl reboot --firmware-setup || loginctl reboot --firmware-setup", "logout": I18n.tr("panels.session-menu.entry-settings-default-command-logout"), - "shutdown": "systemctl poweroff || loginctl poweroff" + "shutdown": "systemctl poweroff || loginctl poweroff", + "userspace-reboot": "systemctl soft-reboot" } readonly property string defaultCommand: defaultCommands[entryId] || "" diff --git a/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuTab.qml b/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuTab.qml index e6a96b958..74a3d0d94 100644 --- a/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuTab.qml +++ b/Modules/Panels/Settings/Tabs/SessionMenu/SessionMenuTab.qml @@ -37,6 +37,12 @@ ColumnLayout { "enabled": true, "required": false }, + { + "id": "userspace-reboot", + "text": I18n.tr("common.userspace-reboot"), + "enabled": false, + "required": false + }, { "id": "rebootToUefi", "text": I18n.tr("common.reboot-to-uefi"), diff --git a/Services/Compositor/CompositorService.qml b/Services/Compositor/CompositorService.qml index f387331d5..913c5a2fd 100644 --- a/Services/Compositor/CompositorService.qml +++ b/Services/Compositor/CompositorService.qml @@ -495,6 +495,16 @@ Singleton { }); } + function userspaceReboot() { + Logger.i("Compositor", "Userspace reboot requested"); + if (executeSessionAction("userspace-reboot")) + return; + + HooksService.executeSessionHook("userspace-reboot", () => { + Quickshell.execDetached(["sh", "-c", "systemctl soft-reboot"]); + }); + } + function rebootToUefi() { Logger.i("Compositor", "Reboot to UEFI firmware requested requested"); if (executeSessionAction("rebootToUefi"))