etherwake の SIOCGIFHWADDR on eth0 failed: No such device エラー対処

Linux,お役立ち情報,プログラムLinux,WakeOnLAN,WoL,シェルスクリプト,自動

Wake On LAN (WoL) 機能で毎朝自動で起動するマシンを作ろうと思って、常時稼働している別の Linux 端末から起動しようとしたときにエラーが出たので対処したメモです。

WoL を実行する etherwake コマンド

WoL を使うためには etherwake コマンドを利用すればよいです。例えば起動したい端末の MAC アドレスを使って以下のように実行すればよい……はずでした。

$ sudo etherwake xx:xx:xx:xx:xx:xx
SIOCGIFHWADDR on eth0 failed: No such device

ところが実行すると示したようなエラーが出てしまい WoL で起動できませんでした。

SIOCGIFHWADDR on eth0 failed のエラー対応

結局難しいことはなく、単に自分の端末のネットワークデバイスの指定が不適当なだけでした。何も指定しないと伝統的にネットワークデバイス名として使われている eth0 を利用しようとするのですが、今どきは eth0 以外の名前が割り振られていることも多く、その結果 No such device と言われているようです。

まず ip コマンドを使ってネットワークデバイス名を調べます。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.00.00/24 brd 192.168.00.255 scope global dynamic enp2s0
       valid_lft 132903sec preferred_lft 132903sec
    inet6 aaaa::aaaa:aaaa:aaaa:aaaa/64 scope link
       valid_lft forever preferred_lft forever

この結果を見ると 3 番目のものに IP アドレスが振られているようなので、つながっているネットワークデバイスの名前は “enp2s0" だとわかります。

これをデバイス名として -i オプションを使って指定して etherwake コマンドを実行します。

$ sudo etherwake xx:xx:xx:xx:xx:xx -i enp2s0

これで WoL が実行できるようになりました。

毎朝実行する

これは crontab を使って設定します。etherwake コマンドは root 権限で実行する必要があるため、root ユーザになってから cron の設定を行います。下記は毎朝 7:59 に実行してみる例です。

59 7 * * * /usr/sbin/etherwake xx:xx:xx:xx:xx:xx -i enp2s0

これで起動できるようになりました。

ちなみに今回起動しようとしているマシンは、起動して X Window が立ち上がると、自動的にブラウザを起動して Abema TV を開くようになっています。これで毎朝アラーム代わりに PC から映像が見られるようになります。

参考資料