blog.anqou.net
rss
author
tags

Hyprland 0.55 以降で画面を点灯・消灯する

NixOS 26.05 に移行した際に、Hyprland が 0.55 以降では設定ファイルの言語として従来の hyprlang ではなく Lua を使うようになったことを知りました。実はこの移行は設定ファイル(hyprland.conf)のみならず、hyprctl の仕様にまで及んでいます。具体的には hyprctl dispatch コマンドの仕様が変更され、引数に Lua の式を受け取るようになりました。これにより、例えば以前は以下のように画面の点灯・消灯を制御できていましたが:

hyprctl dispatch dpms on # 点灯
hyprctl dispatch dpms off # 消灯

Hyprland 0.55 以降では同等の処理を以下のように行う必要があります:

hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })' # 点灯
hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })' # 消灯

手元の環境では hypridle を使い、30 分間何の操作をしていないときに画面をロックした上で消灯するようにしています。この際に上記のコマンドを実行しているので、この書き換えが必要でした。具体的には以下のように Home Manager で設定するようにしました:

services.hypridle = {
  enable = true;
  settings = {
    general = {
      lock_cmd = "pidof hyprlock || hyprlock";
      before_sleep_cmd = "loginctl lock-session";
      after_sleep_cmd = ''
        hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })'
      '';
    };
    listener = {
      timeout = 1800;
      on-timeout = ''
        loginctl lock-session ; hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })'
      '';
      on-resume = ''
        hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })'
      '';
    };
  };
};