I just moved permanently from awesome to Sway because I can barely see any difference. Really.
The whole Wayland ecosystem has improved a LOT since last time I used it. That was last year, as I give Wayland a try once a year since 2016.
However, I had to ditch an useful daemon, dockd. It does automatically disable my laptop screen when I put it in the dock station, but it does relies over xrandr.
What to use then?
ACPI events.
The acpid daemon can be configured to listen to ACPI events and to trigger your custom script. You just have to define which events are you interested in (it does accept wildcards also) and which script acpid should trigger when such events occurs.
I used acpi_listen
to catch the events which gets triggered by the physical dock/undock actions:
# acpi_listen
ibm/hotkey LEN0068:00 00000080 00004010
[...]
ibm/hotkey LEN0068:00 00000080 00004011
[...]
Then, I setup an acpid
listener by creating the file /etc/acpi/events/dock
with the following content:
event=ibm/hotkey
action=/etc/acpi/actions/dock.sh %e
This listener will call my script only when an event of type ibm/hotkey
occurs, then it tells sway
to disable or enable the laptop screen based on the action code. Here’s my dock.sh
script:
#!/bin/sh
pid=$(pgrep '^sway$')
if [ -z $pid ]; then
logger "sway isn't running. Nothing to do"
exit
fi
user=$(ps -o uname= -p $pid)
case "$4" in
00004010)
runuser -l $user -c 'SWAYSOCK=/run/user/$(id -u)/sway-ipc.$(id -u).$(pidof sway).sock swaymsg "output LVDS-1 disable"'
logger "Disabled LVDS-1"
;;
00004011)
runuser -l $user -c 'SWAYSOCK=/run/user/$(id -u)/sway-ipc.$(id -u).$(pidof sway).sock swaymsg "output LVDS-1 enable"'
logger "Enabled LVDS-1"
;;
esac
Don’t forget to make it executable!
chmod +x /etc/acpi/actions/dock.sh
And then start the acpid
daemon:
systemctl enable --now acpid
Happy docking!
Tags: linux, howto