Po stronie śpiącego komputera [tego co będziemy chcieli wybudzić]:
w terminalu
sudo apt install ethtool
ifconfig
z polecenia wybieramy interfejs ethernet, który chcemy wybudzić oraz mac adres i sekcję broadcast:
enp2s0f0: flags=4163
inet 192.168.1.123 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 ----::----:----:----:---- prefixlen 64 scopeid 0x20
ether 98:f2:b3:e7:00:00 txqueuelen 1000 (Ethernet)
RX packets 48 bytes 6817 (6.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 82 bytes 12600 (12.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 33
z tego powyżej w naszym przypadku będzie to enp2s0f0 [nazwa interfejsu], broadcast 192.168.1.255 [rozgłaszanie], ether 98:f2:b3:e7:00:00 [czyli mac adres]
następnie tworzymy serwis/usługę do nasłuchiwania wybudzania, żeby była dostępna.
przechodzimy do
/etc/systemd/system
w katalogu tworzymy plik o nazwie wol.service
poleceniem
sudo nano wol.service
przepisujemy to poniżej oraz zmieniamy enp2s0f0 na własną z ifconfig:
---
[Unit]
Description=Configure Wake-up on LAN
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -s enp2s0f0 wol g
#w ExecStart wpisujemy nazwę swojego interfejsu zamiast przykładowego enp2s0f0
[Install]
WantedBy=basic.target
---
ctrl-o [zapisujemy] ctrl-x [wychodzimy]
Dodajemy poleceniem naszą usługę:
systemctl daemon-reload
włączamy usługę:
włączamy usługę:
systemctl enable wol.service
uruchamiamy:
systemctl start wol.service
==koniec zabaw po stronie śpiącego i po spisaniu nazwy interfejsu, adresu broadcast, mac adresu można go wyłączyć, po wyłączeniu lampka od ethernetu powinna się świecić [przynajmniej w moim przypadku tak jest i nie jest to wina usługi, a funkcji Wake On LAN zaszytej w BIOS]==
Po stronie wybudzacza potrzebujemy skrypt pythona tworzymy plik sudo nano wol.py lub dowolnym edytorem tekstu "dla ludzi", a w nim po hashu wyjaśniam co zmieniać:
---
#! /usr/bin/python
# wol
#
# Wake on LAN
#
# Use:
# wol computer1
# wol computer1 computer2
# wol 00:11:22:33:44:55
#
# Author: San Bergmans
# www.sbprojects.net
#
import sys, struct, socket
# Configuration variables - z ifconfig pomiędzy '' wpisujemy nasz adres broadcast
broadcast = ['192.168.1.255', '192.168.0.255']
wol_port = 9
# w tej części wpisać nazwę komputera oraz jego mac adres format trzeba zachować czyli 'mariola' : 'ma:ca:dr:es:s0' nazwa komputera może być dowolna, mac musi być zgodny z tym komputerem co mamy wybudzić. jak widać poniżej takich komputerów można mieć 4 w tym skrypcie tj. mercury, venus, earth, mars
known_computers = {
'mercury' : '98:F2:B3:E7:00:00',
'venus' : '98:F2:B3:E7:00:00',
'earth' : '00:10:60:15:97:fb',
'mars' : '00:10:DC:34:B2:87',
}
def WakeOnLan(ethernet_address):
# Construct 6 byte hardware address
add_oct = ethernet_address.split(':')
if len(add_oct) != 6:
print "\n*** Illegal MAC address\n"
print "MAC should be written as 00:11:22:33:44:55\n"
return
hwa = struct.pack('BBBBBB', int(add_oct[0],16),
int(add_oct[1],16),
int(add_oct[2],16),
int(add_oct[3],16),
int(add_oct[4],16),
int(add_oct[5],16))
# Build magic packet
msg = '\xff' * 6 + hwa * 16
# Send packet to broadcast address using UDP port 9
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
soc.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
for i in broadcast:
soc.sendto(msg,(i,wol_port))
soc.close()
if len(sys.argv) == 1:
print "\n*** No computer given to power up\n"
print "Use: 'wol computername' or 'wol 00:11:22:33:44:55'"
else:
for i in sys.argv:
if i[0] != '/':
if ":" in i:
# Wake up using MAC address
WakeOnLan(i)
else:
# Wake up known computers
if i in known_computers:
WakeOnLan(known_computers[i])
else:
print "\n*** Unknown computer " + i + "\n"
#quit()
if len(sys.argv) == 2:
print "\nDone! The computer should be up and running in a short while."
else:
print "\nDone! The computers should be up and running in a short while."
print
---
następnie zapisujemy i wychodzimy z edytora nano lub innego dozwolonego. Nadajemy prawa wykonywania naszego skryptu:
sudo chmod +x wol.py
Uruchamiamy skrypt poleceniem:
python wol.py mercury
lub
python wol.py ma:ca:dr:es:s0
lub
python wol.py mercury venus [wybudzi 2 komputery]
Parametry zależą od tego co wpisaliśmy w skrypcie wol.py w sekcji known_computers
Komputer z włączoną obsługą Wake On LAN powinien nam się wybudzić, oczywiście jak jest wyłączony. Skrypty nie są mojego autorstwa i pochodzą ze stron poniżej, ja jedynie pozmieniałem co jest dla mnie ważne czyt. dodałem polskie komentarze.
Jest jeszcze dostępny nieco prostszy skrypt pod tym adresem:
https://scripts.itarian.com/frontend/web/topic/wake-on-lan
wystarczy mac adres zmienić w sekcji list1 i powinno działać [oczywiście trzeba dać prawa wykonywania takiego skryptu].
źródła: