Here's what I did to check if the power button presses do anything. I needed to install evtest first.
Commands
apt-get install evtest
After it was installed, I ran it and got the following output:
evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: gpio_keys.7
/dev/input/event1: ADS7846 Touchscreen
/dev/input/event2: UVC Camera (046d:0825)
Selecting '0' gave me this...
0
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio_keys.7"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 116 (KEY_POWER)
Properties:
Testing ... (interrupt to exit)
...and when I triggered the power button, a bunch of events were fired, so I was on the right track!
Events
Event: time 1474075323.624805, type 1 (EV_KEY), code 116 (KEY_POWER), value 1
Event: time 1474075323.624805, -------------- EV_SYN ------------
Event: time 1474075323.829555, type 1 (EV_KEY), code 116 (KEY_POWER), value 0
Event: time 1474075323.829555, -------------- EV_SYN ------------
I came across this forum post that gave me some good leads, but it wasn't for an XU4, so using the default systemd power switch rules I came up with something that should work on the XU4...
/etc/udev/rules.d/70-power-switch-odroidxu4.rules
ACTION=="remove", GOTO="power_switch_end"
SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="platform", DRIVERS=="gpio-keys", ATTRS{keys}=="*,116|116,*|116|*,116,*", TAG+="power-switch"
LABEL="power_switch_end"
The above was saved to /etc/udev/rules.d/70-power-switch-odroidxu4.rules and then I ran the following commands to reload the rules...
Commands
systemctl restart systemd-udevd
udevadm trigger
Then as soon as I triggered the power button, my XU4 started shutting down. Neat!
-i