大層なタイトルだが、所謂省電力
の為のスリープと起床の寄せ集め。
リアルタイムクロック(RTC)に起こしてもらう。
wakealarm にアラーム日時を書き込めば良いらしい。
難点は次回のアラーム一発だけな点。
BIOS 設定に項目が有れば無問題なのだが、今回のマシンはノートPCなせいか備わってない。
良く判らないけど参考サイトの通りに見ておく。
$ grep -i rtc /boot/config-5.4.0-148-generic CONFIG_HPET_EMULATE_RTC=y CONFIG_PM_TRACE_RTC=y CONFIG_RTC_LIB=y CONFIG_RTC_MC146818_LIB=y CONFIG_RTC_CLASS=y CONFIG_RTC_HCTOSYS=y CONFIG_RTC_HCTOSYS_DEVICE="rtc0" ...
$ grep -i rtc /var/log/kern.log Apr 28 21:32:21 x230 kernel: [ 0.145206] PM: RTC time: 12:31:53, date: 2023-04-28 Apr 28 21:32:21 x230 kernel: [ 0.733414] rtc_cmos 00:02: RTC can wake from S4 Apr 28 21:32:21 x230 kernel: [ 0.733606] rtc_cmos 00:02: registered as rtc0 Apr 28 21:32:21 x230 kernel: [ 0.733618] rtc_cmos 00:02: alarms up to one month, y3k, 114 bytes nvram, hpet irqs Apr 28 21:32:21 x230 kernel: [ 0.832435] rtc_cmos 00:02: setting system clock to 2023-04-28T12:31:54 UTC (1682685114)
$ sudo hwclock 2023-04-13 15:27:25.952387+09:00
頼りにするのは RTC なので、その時刻を見ておくべし。
hwclock は常にローカルタイム表示らしい。 --utc オプションや --localtime オプションで変わる訳ではないそうな。 某の環境は UTC 記録。+09:00 の表記なので一目瞭然である。
因みに adjtime を見てみると、随分古い。 shutdown 時の書き戻す度に更新する物では無さそうだ。
$ cat /etc/adjtime 0.000000 1584207453 0.000000 1584207453 UTC $ date -d @1584207453 2020年 3月 15日 日曜日 02:37:33 JST $ date -d "2020/3/15 2:37:33" +%s 1584207453
10分後にセットする例
(-u が付いているが効果は無く、無用と思う。)
# echo `date -u +%s -d +10min`> /sys/class/rtc/rtc0/wakealarm
設定値確認(例では過ぎているが…)
# cat /proc/driver/rtc rtc_time : 06:43:22 rtc_date : 2023-04-13 alrm_time : 06:42:37 alrm_date : 2023-04-13 alarm_IRQ : no alrm_pending : no update IRQ enabled : no periodic IRQ enabled : no periodic IRQ frequency : 1024 max user IRQ frequency : 64 24hr : yes periodic_IRQ : no update_IRQ : no HPET_emulated : yes BCD : yes DST_enable : no periodic_freq : 1024 batt_status : okay
アラーム時刻に起床したら、直ぐに翌日のアラームをセットしたいが、スクリプトを書けそうなイベントが判らない。
Electorn
ではpowerMonitor
API -Event: 'resume'
が用意されてるらしいが…
手軽にやるには cron か…
スマートでない気がするが、毎日9時過ぎに、翌日の 8:50 に起床するようアラームをセットする。
翌日の 8:50 決め打ちで文字列を生成し、UNIXエポックに変えてセットする。
setalrm.sh とでも名付けて保存。
#!/bin/sh dt=`date '+%Y-%m-%d 08:50:00' --date '1 days'` #echo 0 > /sys/class/rtc/rtc0/wakealarm echo `date +%s --date="$dt"`> /sys/class/rtc/rtc0/wakealarm
0時過ぎに叩いたら当日に起きない、とか、休日を考慮してないとか不備は有る orz
9時丁度は念の為に避ける。DDNS の更新も2日毎にやる。
# 8:50 アラームによる起床 # 翌日のアラームをセット 5 9 * * * /root/setalrm.sh # MyDNS.JPへの通知(更新) 15 9 */2 * * /root/mydns.sh 1> /dev/null 2> /dev/null
Ubuntu パッケージの中から wake キーワードを含む物の抜粋し、Details を機械翻訳/加工した。
'Wake-on-Lan' パケットに対応するマザーボードやネットワークカードのあるマシンを、遠隔から立ち上げ(電源を入れ)る事ができます。
本ツールにより、単一のマシンまたは一群のマシンを立ち上げることができます。
WOL パケットを構成するためにマシンの MAC アドレスが必要です。
尚、'etherwake' とは異なり、UDP パケットを用いる為、本ツールの使用に root 権限は不要です。
WOL (Wake-on-LAN) は、イーサネット接続を介してコンピューターの電源を入れることができる標準です。
WOL 対応のネットワーク インターフェイス カードを搭載したコンピュータは、スリープ モードから復帰するか、BIOS 機能を介してスタンバイから電源を入れることができます。
etherwake を他の実装から分離する 1 つの機能は、WOL パスワードもサポートすることです。
このツールを使用すると、ワークステーションの定期的なシャットダウンを夕方にスケジュールしたり、nvram-wakeup、ACPI wakeup、または wake-on-lan を使用して毎朝起動したりできます。
wake-on-lan ウェイクアップ シーケンスの場合、ローカル ネットワーク/サブネット上に1台のウェイク マシンが必要です。
これは、nvram-wakeup によって直前にウェイクアップされたサーバー マシンまたはクライアント マシンである可能性があります。
シャットダウン シーケンスは、CRON ジョブを介して午後 4 時以降に 1 時間ごとに開始されます。
ただし、非アクティブ/使用されていないように見えるマシンのみがシャットダウンされます。(現在使用中のマシンは稼働し続けます。)
Shutdown-at-Night ツールは、構成ファイルを介して、または shutdown-at-night-hosts と呼ばれる NIS ネットグループのメンバーシップを介してアクティブ化できます。
nvram-wakeup は、BIOS 中の起動時間を読み書き可能です。(2.4.x カーネルでは /dev/nvram 経由または直接 I/O ポートにアクセス)
起動時間には、コンピュータは自動で soft-off 状態から起動されます。
ビデオディスクレコーダ VDR に対して 、nvram-wakeup はフックスクリプトを インストールするので、VDR は、電源断時に起動時間をセットできます。
etherwake [options] Host-ID
etherwake は、Wake-On-LAN (WOL) "Magic Packet" を生成して送信するプログラムで、ソフトパワーダウン (ACPI D3 ウォーム状態) のマシンを再起動するために使用されます。
オプションでのパスワードを含めて、標準の AMD Magic Packet フォーマットを生成します。
単一の必須パラメータは、nsswitch.conf(5) で指定された ethers(5) データベースによって MAC アドレスに変換できるステーション (MAC) アドレスか、又はホストID です。
↑某の環境では MACアドレスを得られないようで、エラーとなる↓
$ sudo etherwake -b 192.168.xxx.xx etherwake: The Magic Packet host address must be specified as - a station address, 00:11:22:33:44:55, or - a hostname with a known 'ethers' entry.
nsswitch.conf には詳しくないので手っ取り早く MACアドレスを与える事に…
その MACアドレスを知るには、ここでは直接に PC を見た方が早いのだが、ARP から得る手も有るので、ping を打ってから参照してみる(って云うか、起動してなきゃ駄目な訳で…)
$ ping x200 PING x200 (192.168.xxx.xx) 56(84) bytes of data. 64 bytes from x200 (192.168.xxx.xx): icmp_seq=1 ttl=64 time=9.40 ms … … $ ip n 192.168.xxx.1 dev wlp3s0 lladdr ... 192.168.xxx.xx dev wlp3s0 lladdr ... REACHABLE 42.150.xx.xxx dev wlp3s0 lladdr ...
ifname を与えて…
$ sudo etherwake 00:xx:xx:xx:xx:xx SIOCGIFHWADDR on eth0 failed: No such device $ sudo etherwake -i wlp3s0 00:xx:xx:xx:xx:xx
これでMagic Packet
なるものが発行出来る訳だけど、宛先の無線LANはハイカラ(笑)な品では無いので起きてはくれませぬ。有線NICなら起きてくれる。
何よりこのツールはインターネット越しにルーターを越えては行けぬようなので、これでおしまい orz
WLI-UTX-AG300を試してみる
無線アダプタなんだけども、有線NIC へ横流ししてくれるそうで、これに投げると Wake up する。価値有る一品 (・∀・)
$ wakeonlan 00:1f:xx:xx:xx:xx Sending magic packet to 255.255.255.255:9 with 00:1f:xx:xx:xx:xx $ ip n 192.168.xxx.1 dev wlp3s0 lladdr 90:f3:xx:xx:xx:xx REACHABLE 192.168.xxx.11 dev wlp3s0 FAILED 192.168.xxx.50 dev wlp3s0 FAILED <-------------------------- 無線部 192.168.xxx.51 dev wlp3s0 lladdr 00:1f:xx:xx:xx:xx STALE <--- 有線NIC
wakeonlan が使える(みたい)。 IPv4な宛先、UDPポート、MACアドレスを与える。
$ wakeonlan -i 150.xxx.xxx.xxx -p 7779 20:89:xx:xx:xx:xx Sending magic packet to 150.xxx.xxx.xxx:7779 with 20:89:xx:xx:xx:xx
なお、旨くやるには条件が有る(有った)。
WAN→LAN中継設定を活かした。ポート番号 7779 は既定。
J-COM の HG100R-02JG には、WAN→LAN中継設定
のような設定は無く、無理っぽい。orz
駄目元で下記を設定してみるも、(ディレクティッド)ブロードキャストにはならないもよう。
ネットワーク内のPCでキャプチャを眺めると、ARP が走っていた。正解か?
色んな方が書いているように、255 設定は弾く
、ブロックする
が[正しい|良い]作りに感じる。