Hey, thank you very much for this post!
Perhaps somebody is helped with my solution for my headless raspberry pi3:
An udev rule which matches the MAC Address of the button, could be one for different buttons.
#/etc/udev/rules.d/98-wolbutton.rules
ATTRS{phys}=="b8:27:eb:a0:40:b7", SYMLINK+="wolpc", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}="wolbuttonpc.service"
This rule triggers a systemd service which starts a python script
/etc/systemd/system/wolbuttonpc.service
[Unit]
Description=WOL Button fuer PC
[Service]
Type=simple
ExecStart=/usr/local/bin/wolbutton.pc.py
Restart=no
/usr/local/bin/wolbutton.pc.py
The python script, slightly modified from Jon Burgess, sends a wol packet at first run and then every time the button goes up (holding the button emits a lot of button downs for me)
#!/usr/bin/env python
import sys
import evdev
from wakeonlan import wol
import syslog
devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()]
if len(devices) == 0:
print "No devices found, try running with sudo"
sys.exit(1)
for device in devices:
if device.phys == "b8:27:eb:a0:40:b7":
device.grab()
wol.send_magic_packet("AC:22:0B:C5:5C:CF")
for event in device.read_loop():
#event at 1492803542.433958, code 115, type 01, val 00
if event.code == 115 and event.type == 01 and event.value == 00:
syslog.syslog('WOL gesendet')
wol.send_magic_packet("AC:22:0B:C5:5C:CF")