debian で wake-on-lan (WOL) を有効にする方法

(2020/04/09: 少し加筆しました)

debian で wake-on-lan (WOL) を有効するには

  • /etc/network/interfaces.d/eth0 で設定する方法
  • /etc/network/interfaces で設定する方法
  • BIOSで有効にする方法
  • カーネルモジュール側で有効にする方法

などがありますが(詳細は後述),条件によってはうまく動かない場合があります

そこで別アプローチで

  • /etc/network/if-up.d/wake-on-lan を用意する方法

を考えたので手順をまとめます

/etc/network/if-up.d/wake-on-lan を用意する方法

ethtoolをインストールします

$ sudo apt-get install ethtool

/etc/network/if-up.d/wake-on-lan を作成します.中身は

#!/bin/sh
ETHTOOL=/sbin/ethtool
test -x $ETHTOOL || exit 0
[ "$IFACE" != "lo" ] || exit 0
$ETHTOOL -s $IFACE wol g

パーミッションを変更します

$ sudo chmod a+x /etc/network/if-up.d/wake-on-lan

動作確認 (2020/04/09追記)

/etc/network/if-up.d/wake-on-lan はネットワークインタフェースが up したタイミングで自動起動されます.

DHCPを使っている場合は,一旦LANケーブルを外して,挿し直してみましょう.
これで /etc/network/if-up.d/wake-on-lan が起動します.

つぎに Wake-on-LANが有効になったか確認します

$ sudo /sbin/ethtool eth0

出力の Wake-on の行を見ます

      Wake-on: g

"g" なら wake on lan が有効です."d" なら無効です

"g"や"d"の意味は以下の通りです

  • "g" Ma"g"ic packet で起動する
  • "d" 無効(disable)

なおWake-onの行がない場合はインタフェースやマザーボードWOLに対応していない可能性が高いです

その他の方法

参考までにその他の方法もメモしておきます

/etc/network/interfaces.d/eth0 で設定する方法
auto eth0
iface eth0 inet dhcp
        ethernet-wol g

Stretchの場合はこれで動くはずです

ただし以下の条件では動作しないことがあります

  • Stretch 以外
  • NetworkManager を使っている場合
/etc/network/interfaces で設定する方法
iface eth0 inet dhcp
        ethernet-wol g

Squeezeの場合はこれで動くはずです

ただし以下の条件では動作しないことがあります

  • Squeeze 以外
  • NetworkManager を使っている場合
BIOS で有効にする方法

運がよければ BIOSの設定だけで WOL を有効にできます

ただし以下の条件ではWOLが無効に戻る場合があります

  • BIOSのACPIのテーブルが壊れている場合
  • linuxのkernel moduleがわざわざWOLを無効にする場合
カーネルモジュール側で有効にする方法

具体的設定方法はカーネルモジュールによって異なるので,それぞれ個別にマニュアル等を読む必要があります

たとえば 3c59x を使っている場合は /etc/modprobe.conf などで

options 3c59x enable_wol=1

とします.詳細は

$ /sbin/modinfo 3c59x

で確認できます.これはめんどくさいのでおすすめできません

WOLを使ってみる (2020/04/09追記)

実際にWOLを使ってみます

magic packet の送信は etherwake を使います

$ sudo apt install etherwake

WOLするPCは,MACアドレスで指定します

$ sudo /usr/sbin/etherwake  -b <mac-address>

これで電源が入ります