明るいカラースキームと暗いカラースキームを切り替えるために、各タイマーによってトリガーされたときにシロアリ設定ファイルへのシンボリックリンクを生成するスクリプトを実行する2つのデバイスを設定しました。リンクされたファイルには適切な明るいスキームまたは暗いスキームが含まれており、シロアリがそれを受信するとその設定をSIGUSR1
再読み込みします。問題ない
$ systemctl --user list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2018-11-05 14:20:00 CET 9min left Mon 2018-11-05 14:10:13 CET 1ms ago brightside.timer brightside.service
Mon 2018-11-05 16:00:00 CET 1h 49min left n/a n/a darkside.timer darkside.service
$ cat ~/.config/systemd/user/brightside.timer
[Unit]
Description=Ensure a bright colorscheme every ten minutes during the day.
[Timer]
OnCalendar=*-*-* 09..15:0/10
[Install]
WantedBy=timers.target
だから日中は10分brightside.service
間隔でつながりますtermite_light.conf
。${XDG_CONFIG_HOME}/termite/config
その後darkside.timer
引き継ぎます。
[Timer]
OnCalendar=*-*-* 16..23:0/10
OnCalendar=*-*-* 00..08:0/10
~/.config/systemd/user/{dark,bright}side.d/override.conf
シェルスクリプトを使用してシンボリックリンクを作成または削除して、タイマーの一方または両方をオーバーライドしたいと思います。最終的には、コンセントタイマーなどのプログラム可能なタイマー設定が必要です。 (しかし、季節によって日の長さを変えることができるという利点があります)。ここでのアイデアは、4方向スイッチを提供することです。
- ブライト【注意事項】
- 明るさ[自動]
- 闇【手動】
- ダーク[自動]
日中にモードを設定すると、dark [automatic]
スクリプトはまず暗いスキームを設定します。その後、brightside.timer
タイマーを一時的に無視または停止して、すぐに再度切り替えないようにする必要があります。darkside.timer
しかし、時間が経つとbrightside.d/override.conf
削除されたりBrightside.timerが再起動されるようにするにはどうすればよいですか?
AssertPathExists
以前は、タイマーを上書きするために/ tmpの空のファイルを使用していました。おそらく、override.confをマージするためにデーモンを再ロードするので、これはまだ最善の解決策です。そうではありませんか?
答え1
1つのオプションは、1日に1回の切り替え時間(午前9時と午後4時)にのみ実行される2つのタイマー(およびサービス)をさらに導入し、そのサービスから上書きを削除し、必要に応じてタイマーを再度有効にして削除するようにします。することです。手動で設定し、自動的に戻ります。
しかし、私は本当にこれをある程度過度にエンジニアリングしていると思います。タイマー単位とファイルの上書きの利便性のため、systemdでシステムの状態(暗さから明るさ、手動から自動)をエンコードすることは、実際にソリューション全体を単純化できないと思います。
練習でポートフォリオが大きいと想像してください。たとえば、毎日2つではなく3つのカラースキームを使用している場合はどうでしょうか?それとも、シーズンごとに1つずつ4つの「明るい」カラースキームがあるとしたらどうでしょうか。それとも、日の出/日没時間に応じて変換時間を調整したいですか?
私の考えでは、単一のシステムタイマー+サービスを使用してカラースキームを切り替え、サービスからスクリプト(シェル、Pythonなど)を呼び出して、現在の時間を考慮してカラースキームを選択する方が適切です。既存のオーバーレイを管理することもできます(おそらく/ runのステータスファイルを使用できます)。
これらのシステムは、システムユニットのみを使用して構築されたシステムよりも全体的に簡単でスケーラビリティがあります。