Tôi quyết định tôi muốn một giải pháp đánh thức máy chủ phương tiện của mình một cách tự động khi truy cập không phụ thuộc vào dd-wrt.
Tôi có một raspberry pi vì vậy tôi đã sử dụng nó vì nó có công suất thấp và tôi không ngại giữ nó mọi lúc, tất nhiên nó có thể chạy từ bất kỳ máy linux nào.
Giải pháp cuối cùng tôi tìm thấy cho bản thân mình là viết một kịch bản bash nhỏ. Các phụ thuộc raspberry-pi là etherwake và tcpdump. Cả hai đều không được cài đặt theo mặc định trên rasbian. Ngoài ra trên máy chủ Wake On Lan cần phải được kích hoạt như được đề cập trong các bài viết khác.
sudo apt-get install etherwake
sudo apt-get install tcpdump
Kịch bản đánh thức như sau:
nano ~/wol.sh
Sau đó:
#!/bin/bash
pingInterval=60 #time interval, in seconds, between checks that the server is still awake.
target=192.168.x.x #WOL target ip address
targetMAC=00:11:22:33:44:55 #WOL target MAC
wake () {
tcpdump -i eth0 -c 1 -p host $target
etherwake $targetMAC
#echo WOL sent to $target at $targetMAC
return
}
while sleep $pingInterval; do
varPing=`ping -s 1 -c 2 $target > /dev/null; echo $?`
if [ $varPing -eq 0 ]; then
#echo ping success
else
#echo ping fail
wake
fi
done
Ý tưởng chính là nó được chạy từ raspberry-pi của tôi, nó sẽ đánh thức máy chủ nếu nó nhận thấy một yêu cầu arp duy nhất cho máy chủ. Nếu máy chủ còn thức thì nó sẽ không nghe yêu cầu arp mà chỉ gửi một vài ping mỗi lần để đảm bảo nó vẫn còn thức.
Tôi đặt tên cho tệp wol.sh và làm cho nó có thể thực thi được. Sau đó đặt nó vào sudo crontab để khởi chạy @reboot với quyền root. Điều này là cho tcpdump cần truy cập nâng cao để nghe eth0 và etherwake.
sudo chmod +x /home/pi/wol.sh
sudo crontab -e
thêm cái này vào dưới cùng
@reboot sh /home/pi/wol.sh > /dev/null