After inspecting files seat.c, seat-xlocal.c, and seat-unity.c, I've found a much simpler approach for item 1.
Instead of creating another seat module, we can introduce a new option "start-local-sessions" for existing seat modules. If this option is explicitly set to false, the seat in question will only start a bare X server (no greeter, no user sessions).
In order to keep compatibility with current code, setting option "xdmcp-manager" with a non-empty value should force "start-local-sessions=false".
I've uploaded a new branch with an implementation of "start-local-sessions" option:
After inspecting files seat.c, seat-xlocal.c, and seat-unity.c, I've found a much simpler approach for item 1.
Instead of creating another seat module, we can introduce a new option "start- local-sessions" for existing seat modules. If this option is explicitly set to false, the seat in question will only start a bare X server (no greeter, no user sessions).
In order to keep compatibility with current code, setting option "xdmcp-manager" with a non-empty value should force "start- local-sessions= false".
I've uploaded a new branch with an implementation of "start- local-sessions" option:
lp:~ubuntu-multiseat/lightdm/option-start-local-sessions