hyprwm / hyprlock

Hyprland's GPU-accelerated screen locking utility
BSD 3-Clause "New" or "Revised" License
840 stars 58 forks source link

Hyprlock uses disown that is not available in POSIX shells #504

Closed mradermaxlol closed 1 month ago

mradermaxlol commented 2 months ago

Regression?

No

Hyprlock Info and Version

Hyprlock 0.4.1 (arch/cachyos build)

Hyprlock config ```sh $font_text = Ubuntu $font_material_symbols = Material Icons Outlined $color_white = rgba(255, 255, 255, 1) $color_black = rgba(0, 0, 0, 1) $clock_color = $color_white $text_color = $color_black $entry_border_color = rgba(46, 49, 66, 0.4) $entry_background_color = rgba(255, 255, 255, 1) general { disable_loading_bar = true hide_cursor = true grace = 0 ignore_empty_input = true } background { monitor = path = screenshot blur_passes = 4 blur_size = 4 noise = 0.01 } # password field input-field { monitor = size = 250, 50 outline_thickness = 3 dots_size = 0.1 dots_spacing = 0.3 rounding = -1 fade_on_empty = true placeholder_text = outer_color = $entry_border_color inner_color = $entry_background_color font_color = $text_color position = 0, 20 halign = center valign = center } # clock label { monitor = text = cmd[update:1000] date '+%I:%M %p' shadow_passes = 1 shadow_boost = 0.5 color = $clock_color font_size = 65 font_family = $font_text position = 0, 300 halign = center valign = center } # lock icon label { monitor = text = lock shadow_passes = 1 shadow_boost = 0.5 color = $color_white font_size = 32 font_family = $font_material_symbols position = 0, 120 halign = center valign = bottom } # battery status label { monitor = text = cmd[update:30000] /home/peppermint/.local/bin/battery-status shadow_passes = 1 shadow_boost = 0.5 color = $color_white font_size = 16 font_family = $font_text position = -20, -20 halign = right valign = top } # language icon label { monitor = text = ⌨ $LAYOUT[EN, RU] shadow_passes = 1 shadow_boost = 0.5 color = $color_white font_size = 16 font_family = $font_text position = 20, -20 halign = left valign = top } ```

Compositor Info and Version

System/Version info ```sh Hyprland, built from branch at commit 0f594732b063a90d44df8c5d402d658f27471dfe (props: bump version to 0.43.0). Date: Sun Sep 8 16:48:21 2024 Tag: v0.43.0, commits: 5196 flags: (if any) System Information: System name: Linux Node name: protomartyr Release: 6.11.1-2-cachyos-lto Version: #1 SMP PREEMPT_DYNAMIC Mon, 30 Sep 2024 19:51:37 +0000 GPU information: 00:02.0 VGA compatible controller [0300]: Intel Corporation WhiskeyLake-U GT2 [UHD Graphics 620] [8086:3ea0] (rev 02) (prog-if 00 [VGA controller]) os-release: NAME="Arch Linux" PRETTY_NAME="Arch Linux" ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archlinux-logo plugins: ```

Description

Hyprlock uses the disown shell command that is not available in POSIX shells (like dash). This becomes a problem if the system's /bin/sh is a symlink to the aforementioned dash (as Hyprlock seems to use /bin/sh explicitly). It comes up in the logs as a simple line: /bin/sh: 1: disown: not found

I think that the solution would be to A) keep using /bin/sh and replace disown with something POSIX-compatible (if there is a way to do it at all, haven't dug deep into that); B) move away from /bin/sh to explicit /bin/bash usage.

IMO option A) is the way to go.

How to reproduce

  1. Start hyrplock on a system with /bin/sh being something POSIX-compatible like dash;
  2. Look at the console/log output.

Crash reports, logs, images, videos

No response

vaxerski commented 2 months ago

@PaideiaDilemma wanna take a look att his?

mradermaxlol commented 2 months ago

Having googled a bit, I think that similar results could be achieved by using nohup: sleep 2 && nohup hyprlock --immediate --immediate-render &

One more thing I've been thinking about: is it really necessary to exec shell stuff in a cpp project? I mean, could the same behaviour he achieved by using "vanilla" cpp stuff without resorting to shell commands? Though something tells me that such a solution would already be used if it was that easy.

PaideiaDilemma commented 2 months ago

@vaxerski can't we just use hyprctl dispatch exec and only try to restart when on Hyprland. Wont work on other compositors anyways right?

vaxerski commented 1 month ago

we can, right, isnt that hyprland-exclusive, if so, ye