2016/01/22(金) [n年前の日記]
#1 [ubuntu] Ubuntu15.10のWOL設定でハマった
Ubuntu15.10をインストールしたATX機に対して、せっかくだからWOLを ―― Wake On LAN を有効にしてみようかと。
_Wake On LAN は、LAN経由でマジックパケットを送るとPCの電源を入れてくれる機能。離れた場所にPCを置いてある場合、PCのところまで足を運んで電源ボタンを押さなくて済むから便利。
M/Bは、 _GIGABYTE GA-EP45-UD3R 。Intel P45 + Intel ICH10R を使用。
結論だけ先に書いておくと、sudo ethtool eth0 (sudo ethtool enp4s0) の出力結果の Wake-on: d をどうにか Wake-on: g にしなくてもWOLが有効になってる場合もあるっぽい。何が何でも g にしてやらねば的に苦労しなくてもどうにかなるようで。このM/B特有の状態なのか、Ubuntu 15.10 ではそういうこともあるのか、よくわからんけど。
_Wake On LAN は、LAN経由でマジックパケットを送るとPCの電源を入れてくれる機能。離れた場所にPCを置いてある場合、PCのところまで足を運んで電源ボタンを押さなくて済むから便利。
M/Bは、 _GIGABYTE GA-EP45-UD3R 。Intel P45 + Intel ICH10R を使用。
結論だけ先に書いておくと、sudo ethtool eth0 (sudo ethtool enp4s0) の出力結果の Wake-on: d をどうにか Wake-on: g にしなくてもWOLが有効になってる場合もあるっぽい。何が何でも g にしてやらねば的に苦労しなくてもどうにかなるようで。このM/B特有の状態なのか、Ubuntu 15.10 ではそういうこともあるのか、よくわからんけど。
◎ 作業手順。 :
M/BのBIOSで、WOLを使えるようにしておく。GIGABYTE GA-EP45-UD3R の場合は、以下が参考になった。たぶん PME Event Wake Up が Enable ならOKなのかなと…。どうなんだろう。
_価格.com - 『WakeUp LAN(Powe On by LAN)できますか?』 GIGABYTE GA-EP45-UD3R Rev.1.0 のクチコミ掲示板
Ubuntu を起動。NIC ( = Network Interface Controller、ネットワークカードと思っておけばいい)の一覧を表示して何が積んであるか確認。
ググってみたところ、最近の Linux は起動してる最中に、udev なるものが eth0 の名前を変えてしまうみたいで。
_ほげめも: Debian vs Ubuntu: ネットワークインタフェースの名前
もし、勝手に名前を変えられると色々面倒、ということなら、Linux起動時の指定で名前変更しないようにもできるらしい。sudo vi /etc/default/grub で GRUB_CMDLINE_LINUX_DEFAULT= に
ethtool なるものがあれば、NIC の WOL状態の確認、WOLの設定ができるらしい。
NICの設定状態を見る。
そして、Wake-on が d ということは、WOLが無効になってるということで。
ethtool で WOL を有効にする。
で、OSを再起動するたびに、この設定は元に戻っちゃうから、OS起動時にこの設定をやり直す何かが必要だよ、ということになっていて。どんな方法があるかは以下を参考に…。
_debian で wake-on-lan (WOL) を有効にする方法 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
_wakeonlan - WOL stops working after booting Ubuntu - Ask Ubuntu
_Wake On LAN via Ubuntu Linux | Blog
_Ubuntu 15.04のサーバをWake on LANできるようにした - YAMAGUCHI::weblog
_Wake-on-LAN - ArchWiki
列挙すると…。
しかし、色々試してみたけれど、OS再起動すると Wake-on: d に戻ってしまう…。
結局、Wake-on: g になってくれたのは、 _wakeonlan - WOL stops working after booting Ubuntu - Ask Ubuntu で紹介されてる方法、かつ、スクリプトの中身をそのまま使った場合だけで。 *1
ところが、この状態だと、シャットダウン(sudo shutdown -h now)した後、マジックパケットを送ってもPCが起動してくれない…。
また、/var/log/messages を出力するように設定、かつ、各スクリプトに logger でメッセージを残すように修正して確認したところ、if-up.d を使ったソレは処理が2回呼ばれてるようで、そこもなんだか気になる…。
結局、WOLが使えるようになったのは、/etc/init.d/ に wakeonlanconfig というスクリプトを書く方法。 *2
この方法だと、OS再起動後に sudo ethtool eth0 をしても、Wake-on: d と表示されてしまう。なのに、sudo shutdown -h now をしても、マジックパケットを送ればPCの電源が入ってくれる。なんでや。
これは勝手な想像だけど、Wake-on: d と表示されていても、実はWOLが有効になってる場合もあったりするのではないかと。
あるいは、ひょっとすると、シャットダウンするタイミングで、何かがWOLを有効にしていたりして…? 何がどうなっているのやら。
Ubuntuの場合、NetworkManagerとやらがアレコレしているらしいのもアレで。ググった感じでは、このあたりの設定をするなら network-manager をアンインストールして作業するのが鉄則、のような雰囲気も。/etc/network/ 以下にアレコレ書いても、NetworkManager が全部台無しにしちゃうらしくて。
まあ、とにかくさっぱり分からんです。なんでコレで動いて、アレでは動かんのだろう…。
それにしても、コレもまた、ATX機は足元に置いてあるんだから足で電源ボタン押せばいいだろ、てなところもあって。自分、何やってんだか。
_価格.com - 『WakeUp LAN(Powe On by LAN)できますか?』 GIGABYTE GA-EP45-UD3R Rev.1.0 のクチコミ掲示板
Ubuntu を起動。NIC ( = Network Interface Controller、ネットワークカードと思っておけばいい)の一覧を表示して何が積んであるか確認。
ifconfig一般的には、ここで eth0 と lo の2つが表示されるものと思っていたのだけど。自分の環境では、何故か eth0 ではなく enp4s0 と表示されて。何だコレ。
ググってみたところ、最近の Linux は起動してる最中に、udev なるものが eth0 の名前を変えてしまうみたいで。
_ほげめも: Debian vs Ubuntu: ネットワークインタフェースの名前
もし、勝手に名前を変えられると色々面倒、ということなら、Linux起動時の指定で名前変更しないようにもできるらしい。sudo vi /etc/default/grub で GRUB_CMDLINE_LINUX_DEFAULT= に
biosdevname=0 net.ifnames=0を追加してから保存して、sudo update-grub2 で grub の設定を反映。再起動。自分の場合、最終的にはそのようにしてしまった。
ethtool なるものがあれば、NIC の WOL状態の確認、WOLの設定ができるらしい。
sudo apt-get install ethtool
NICの設定状態を見る。
sudo ethtool eth0 (自分の環境では sudo ethtool enp4s0)出力結果の中で、 WOLに関係がありそうな行は以下の2行。
Supports Wake-on: pumbg Wake-on: dSupports Wake-on に、その NIC で利用可能なWOL関係の機能が列挙されているらしい。
上記の値はどのアクティビティが動作するかを定義しています:
d (無効),
p (PHY アクティビティ),
u (ユニキャストアクティビティ),
m (マルチキャストアクティビティ),
b (ブロードキャストアクティビティ),
a (ARP アクティビティ),
g (マジックパケットアクティビティ)。WOL を使うには g が必要です。
そして、Wake-on が d ということは、WOLが無効になってるということで。
ethtool で WOL を有効にする。
sudo ethtool -s eth0 wol g (sudo ethtool -s enp4s0 wol g)これをしてから sudo ethtool eth0 で確認すると、Wake-on: g になってくれた。
で、OSを再起動するたびに、この設定は元に戻っちゃうから、OS起動時にこの設定をやり直す何かが必要だよ、ということになっていて。どんな方法があるかは以下を参考に…。
_debian で wake-on-lan (WOL) を有効にする方法 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
_wakeonlan - WOL stops working after booting Ubuntu - Ask Ubuntu
_Wake On LAN via Ubuntu Linux | Blog
_Ubuntu 15.04のサーバをWake on LANできるようにした - YAMAGUCHI::weblog
_Wake-on-LAN - ArchWiki
列挙すると…。
- /etc/network/if-up.d/wake-on-lan を書く方法。
- /etc/init.d/wakeonlanconfig を書く方法。network-manager をアンインストールして、自分で全て設定してやる必要有。
- /etc/udev/rules.d/50-wol.rules を書く方法。udevの名前変更を捉えてWOL設定をする。
- /etc/network/interfaces で指定する方法。
しかし、色々試してみたけれど、OS再起動すると Wake-on: d に戻ってしまう…。
結局、Wake-on: g になってくれたのは、 _wakeonlan - WOL stops working after booting Ubuntu - Ask Ubuntu で紹介されてる方法、かつ、スクリプトの中身をそのまま使った場合だけで。 *1
ところが、この状態だと、シャットダウン(sudo shutdown -h now)した後、マジックパケットを送ってもPCが起動してくれない…。
また、/var/log/messages を出力するように設定、かつ、各スクリプトに logger でメッセージを残すように修正して確認したところ、if-up.d を使ったソレは処理が2回呼ばれてるようで、そこもなんだか気になる…。
結局、WOLが使えるようになったのは、/etc/init.d/ に wakeonlanconfig というスクリプトを書く方法。 *2
sudo vi /etc/init.d/wakeonlanconfig sudo chmod a+x /etc/init.d/wakeonlanconfig sudo update-rc.d -f wakeonlanconfig defaults
この方法だと、OS再起動後に sudo ethtool eth0 をしても、Wake-on: d と表示されてしまう。なのに、sudo shutdown -h now をしても、マジックパケットを送ればPCの電源が入ってくれる。なんでや。
これは勝手な想像だけど、Wake-on: d と表示されていても、実はWOLが有効になってる場合もあったりするのではないかと。
あるいは、ひょっとすると、シャットダウンするタイミングで、何かがWOLを有効にしていたりして…? 何がどうなっているのやら。
Ubuntuの場合、NetworkManagerとやらがアレコレしているらしいのもアレで。ググった感じでは、このあたりの設定をするなら network-manager をアンインストールして作業するのが鉄則、のような雰囲気も。/etc/network/ 以下にアレコレ書いても、NetworkManager が全部台無しにしちゃうらしくて。
まあ、とにかくさっぱり分からんです。なんでコレで動いて、アレでは動かんのだろう…。
それにしても、コレもまた、ATX機は足元に置いてあるんだから足で電源ボタン押せばいいだろ、てなところもあって。自分、何やってんだか。
*1: _debian で wake-on-lan (WOL) を有効にする方法 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
で紹介されてるスクリプトの中身だと上手くいかないという…。$ETHTOOL や $IFACE を「"」で囲んでるぐらいしか違いは無いはずなのに…。
*2: ちと気をつけないといけないっぽいのが、このスクリプトが呼ばれた後で、udevがeth0をリネームしてるっぽいことで。ということは、enp4s0 ではなく、eth0 を指定しておかないといけないのだろうか…。このあたりが面倒臭くなってきたので、udev がリネームしないような設定をしちゃったのですが。
*2: ちと気をつけないといけないっぽいのが、このスクリプトが呼ばれた後で、udevがeth0をリネームしてるっぽいことで。ということは、enp4s0 ではなく、eth0 を指定しておかないといけないのだろうか…。このあたりが面倒臭くなってきたので、udev がリネームしないような設定をしちゃったのですが。
[ ツッコむ ]
以上です。