こちらは旧日記です。移転先→ 愚行録 the Next Generation
リモート起動&シャットダウン
日記に書くネタはあっても書くのに時間かかると思ったら書く気が失せるという何じゃそりゃな状態な今日この頃、皆さんいかがお過ごしでしょうか。
Windows PC を遠隔地から起動したり終了したりする話。
Windows と同じ LAN に遠隔地からアクセス可能な Linux PC があることが前提。
Windows は遠隔地から直接アクセスできなくてもいい。
1. 起動編
Wol(Wake on LAN)という、LAN 経由でコンピュータの電源を ON にできる機能を使う。電源 ON するだけなので対象 PC の OS は Windows である必要はない。マザーボードと NIC が WoL に対応していなければならない。BIOS での設定も必要かも。
WoL ではマジックパケットと呼ばれるパケットを送ることになっている。これを受信するといろいろあって電源が入る仕組みになっている。
マジックパケットの送信のために、仙石氏の書かれた wol.c をコンパイルして使う(フリーソフトウェア→ Wake-On-Lan)
$ gcc -o wol wol.c
次のようにして使う
$ wol 192.168.1.255 XX:XX:XX:XX:XX:XX
192.168.1.255 は LAN のブロードキャストアドレス、XX:XX:XX:XX:XX:XX は対象となる PC の NIC の MAC アドレス。
2. 終了編
起動は出来たので次はシャットダウンがしたくなる。
リモートデスクトップや VNC などで Windows マシンを直接操作している場合にはコマンドプロンプト(cmd.exe)を起動して次のコマンドを打てばよい
C:\Documents and Settings\Kit>shutdown -s
shutdown とだけ打つとヘルプが表示される。-m オプションを使うとリモートの Windows マシンをシャットダウンできるようだがやったことはない。
Linux から smbmount で共有フォルダをマウントするなど、Windows を直接操作するわけではない場合には、リモートデスクトップなどから cmd.exe を起動して〜とやるのは手間である。
shutdown で -m オプションを用いた場合、RPC 経由でシャットダウンを行う。samba についてくる rpcclient を使うことで Linux からでも Windows に RPC コマンドを送ることができるようになる。
使い方は、ぱらさんの遠隔でマシンの電源を ON/OFF に書かれているが、
$ rpcclient -A auth.filename -U username -N -W workgroup -c 'shutdown' windows_pc_name
といった感じになる。-N と -W workgroup はいらない。あってもいいけど。auth.filename の中身は
password = (password)
のようになっていればよい。shutdown のオプションは多分 Windows の shutdown コマンドと同じ。以下に書くように現在の私の環境では shutdown が使えないので確認できない。
これで遠隔地からのシャットダウンが可能になり、実際使ってもいたのだが、ある時から "Invalid command" と言われて使えなくなってしまった。しばらく使ってなかったのでその「ある時」がいつかわからないのだが、
- Vine Linux から SUSE Linux になった
- samba が 2.x から 3.x になった
- 対象の Windows が XP SP2 になった
とかが理由として思い浮かんだもので、どれが理由か確定していない。以前使ってた Vine は Vine Seed, Vine Seed Plus と入れてたので samba は 3.x になってたかも知れない。
とまあ、理由は実はどうでもよくて、何とかしてリモートシャットダウンができればいいと。
とりあえず man rpcclient としてみると、COMMANDS セクションに shutdown という言葉が見える。
何でじゃーと思いつつ hoge というコマンド(存在しないコマンド)を送ってみると
command not found: hoge
と返ってくる。shutdown というコマンドは存在しているが、何らかの理由で弾かれているだろうことが推測される。
help コマンドを送って利用可能なコマンドの一覧を取り寄せてみると、確かに shutdown コマンドは存在していたが、その他に次のようなものを見つけた。
SHUTDOWN
shutdowninit Remote Shutdown (over shutdown pipe)
shutdownabort Abort Shutdown (over shutdown pipe)
SHUTDOWN パイプ上でのコマンドとして shutdowninit と shutdownabort があるらしい。shutdown は REG パイプ。
使い方を見るために "help shutdowninit" コマンドを送る。
$ rpccclient -A auth.filename -U username -c 'help shutdowninit' windows_pc_name
syntax: shutdown [-m message] [-t timeout] [-r] [-h] [-f] (-r == reboot, -h == halt, -f == force)
何故か "syntax: shutdown" となっている。恐らく shutdown と同じなのだろう。
$ rpcclient -A auth.filename -U username -c 'shutdowninit' windows_pc_name
として shutdowninit コマンドを送ってやるとリモートシャットダウンが可能になった。ちなみに -t で指定したタイムアウト秒数(指定しないと 20 秒)の間に対になる abort (shutdown に対しては abortshutdown、shutdowninit に対しては shutdownabort)を送ってやるとシャットダウンの中止ができる。Windows の cmd.exe で shutdown -a とやるのと同じである。
というわけで、無事にリモートからの電源断が可能になった。shutdown が使えなくなった理由がよくわからないが、shutdowninit で Google 検索してもほとんどひっかからないところを見ると、同様の症状が起きている人が少ないか rpcclient 使ってリモートシャットダウンしようとする人がそもそも少ないかなのだろう。
また、shutdowninit は manpage に載ってないのだが何故だろうか。まあもうどうでもいいや。
頑張って rpcclient でシャットダウンできるようにしたけれど、最近の作業は専らリモートデスクトップ経由で行ってるので cmd.exe から shutdown で事足りるし、そもそもほとんど電源を落とすことがなくなってしまったので rpcclient の出番は滅多になくなってしまいましたとさ。
おしまい。
トラックバック(1)
このブログ記事を参照しているブログ一覧: リモート起動&シャットダウン
このブログ記事に対するトラックバックURL: https://emeth.jp/diary_old/mt-tb.cgi/46
あまり入力する機会は無いと思いますが、必要な場合もあります。 どうやってやるんでしょう? 続きを読む
トラバさせてください。
Windowsをリモートでshutdownする方法があるんですね。知りませんでした。
参考になったのでしたら幸いです。
情報を参考にして実践してみました。が、シャットダウンはできるのですが電源断にはいたりませんでした。ちと残念です…