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秒のタイムアウト後に画面がロックされ、ランダムな写真が表示されます。
  • 3回のタイムアウト後、画面は再び空白として表示されます(ただし、ロックされたままになります)。

たとえば、家にいてセキュリティについて心配することはありませんが、常にロックを解除する必要があり、迷惑な場合は、ロックをオフにできることを願っています。 Shift-$mod-L を押すだけです。

しかし - ラップトップを一時停止したときに元のロックが適用されることを望んでいます(そうしないと、眠りに落ちたときに復元することを忘れたり、ラップトップを持ち上げたりすると忘れたりする可能性があります)。

「今」ノートブックを手動でロックするには、$ mod-Lを使用してください。

(Zenityはロック操作の視覚的なフィードバックのためのオプションです。)

このアプローチをお客様のユースケースに合わせて調整できることを願っています。

答え2

Sway設定に新しい変更を使用するには、再ロードするだけです。デフォルトのショートカットは++でAltなければなりません。ただし、もちろん、スウェイ構成で必要に応じて変更することもできます。たとえば、ShiftC

# Reload the configuration file
bindsym Mod4+R reload

これにより、再ロード操作が⊞ Win+に設定されますR。まず、前のショートカットを使用して再読み込みすることを忘れないでください。

編集:これが実際にswayidle(またはによって実行される他のものexec)を再ロードしないことに気づきました。ただし、これらのプログラムを再ロードするには、手動で(例:を実行してkillall swayidle)シャットダウンし、一時的にsway設定のコマンドをに変更してexec_always設定を再ロードできます。後で元の状態に戻すことを忘れないでくださいexec。それ以外の場合は、後で設定を再ロードするたびに新しいswayidleインスタンスが取得されます。

関連情報