digraph stack { compound=true; splines=line; rankdir="LR"; node [ shape="box"; ] subgraph cluster_2 { label="Kernel"; event0 [label="/dev/input/event0"]; event1 [label="/dev/input/event1"]; } subgraph cluster_0 { label="Compositor process"; libinput [label="libinput context 1"]; } subgraph cluster_1 { label="libinput debug-events"; libinput2 [label="libinput context 2"]; } stdout; client [label="Wayland client"]; event0:e -> libinput:w; event1:e -> libinput:w; event0:e -> libinput2:w; event1:e -> libinput2:w; libinput -> client [ltail=cluster_0 label="Wayland protocol"]; libinput2 -> stdout [ltail=cluster_1]; }