如何重新加载 swayidle / swaylock?

如何重新加载 swayidle / swaylock?

在我的.sway/config,我有

exec swayidle -w \
        timeout 30 'swaylock -f -c 000000' \
        timeout 30 'swaymsg "output * dpms off"' \
                resume 'swaymsg "output * dpms on"' \
        before-sleep 'swaylock -f -c 000000'

假设我决定增加超时时间,所以我做到了,

exec swayidle -w \
        timeout 180 'swaylock -f -c 000000' \
        timeout 180 'swaymsg "output * dpms off"' \
                resume 'swaymsg "output * dpms on"' \
        before-sleep 'swaylock -f -c 000000'

我如何重新加载这些设置?此外,当我尝试killall swayidle手动运行此命令时,我得到

Failed to find session name: PID 8472 does not belong to any known session
No command specified! Nothing to do, will exit

如何swayidle使用更新的超时来运行?

答案1

我使用一个脚本,它工作得很好。也许这种方法会有所帮助。这是我的锁定脚本“mylock”的相关部分:

#!/usr/bin/env bash

[[ "$SWAYSOCK" ]] && {
    TIMEOUT=600

    BACKGROUND_COLLECTION=~/.fluxbox/backgrounds
    BACKGROUND=$( ls $BACKGROUND_COLLECTION | shuf -n 1)
    case "$1" in
        lock-now)
            BG='&'
            [[ "$2" == "wait" ]] && BG=''
            swaylock -f --image "$BACKGROUND_COLLECTION/$BACKGROUND" $BG
            ;;

        lock-off)
            pkill swayidle
            swayidle -w \
                timeout $TIMEOUT  "swaymsg 'output * dpms off'" \
                resume            "swaymsg 'output * dpms on'" \
                before-sleep      "mylock lock-now wait; mylock enable-lock" &
            rofi -width 20 -e "screen lock disabled"
            ;;

        enable-lock|*)
            pkill swayidle
            swayidle -w \
                timeout $TIMEOUT                "swaymsg 'output * dpms off'"  resume "swaymsg 'output * dpms on'" \
                timeout $(( TIMEOUT * 2 ))      "swaymsg 'output * dpms on'; mylock lock-now" \
                timeout $(( TIMEOUT * 3 ))      "swaymsg 'output * dpms off'" resume "swaymsg 'output * dpms on'" \
                timeout $(( TIMEOUT * 4 ))      "sudo systemctl suspend" \
                before-sleep                    "mylock lock-now wait" &
            ;;
    esac

    #ps -ef |grep '[s]wayidle'
    exit $?
}

...然后在 sway 配置中:

set $a Mod1
set $mod Mod4
set $c Control
set $s Shift
...
bindsym $a+$c+l    exec mylock lock-now
bindsym $mod+l     exec mylock lock-now
bindsym $s+$a+$c+l exec mylock lock-off
bindsym $s+$mod+l  exec mylock lock-off

这允许相当复杂和动态的锁定行为:

  • 超时 X 秒,屏幕空白
  • 超时 2X 秒时,屏幕锁定并显示随机照片
  • 超时 3X 后,屏幕再次空白(但保持锁定状态)。

我还希望能够关闭锁定,例如,如果我在家,不担心安全,但因为必须一直解锁而烦恼 - 我只需按 Shift-$mod-L。

但是 - 当我暂停笔记本电脑时,我希望应用原始锁定(否则当我睡觉或拿起笔记本电脑出去时我可能会忘记恢复它)。

如果我想“现在”手动锁定笔记本电脑,那么只需 $mod-L。

(对于锁定操作的视觉反馈,Zenity 是可选的)。

我希望您可以根据您的用例调整这种方法。

答案2

要使用对 sway 配置所做的任何新更改,您只需重新加载它。默认快捷键应该是Alt+ Shift+ C。但是您当然可以在 sway 配置中根据您的喜好修改它。例如:

# Reload the configuration file
bindsym Mod4+R reload

这会将重新加载操作设置为⊞ Win+ R。只是不要忘记先使用之前的快捷方式重新加载它。

编辑:刚刚注意到,这实际上不会重新加载 swayidle (或由 运行的任何其他内容exec)。然而,要重新加载此类程序,您可以手动终止它们(例如通过运行killall swayidle),然后临时将 sway 配置中的命令更改为exec_always并重新加载配置。只是不要忘记稍后将其更改回原来的状态exec,否则以后每次重新加载配置时都会得到 swayidle 的新实例。

相关内容