aboutsummaryrefslogtreecommitdiff
path: root/seatd/seat.c
AgeCommit message (Collapse)Author
2022-03-29wscons: Move to its own device typeKenny Levinsen
This reduces ifdefs and avoids overloading evdev as something it is not.
2021-09-07seat: Allow new clients when active is pending ackKenny Levinsen
New clients could only be added to a VT bound seat if there were no "active" client, regardless of its actual state. This meant that if one switched from an "active" VT to an "inactive" VT, the seat would be blocked while the "active" client was in CLIENT_PENDING_DISABLE, causing new clients to possibly fail should the old client take its time with the ack. Instead, allow new clients to also be added if there is an active client whose state is CLIENT_PENDING_DISABLE, and there is no client with the new VT as its session ID.
2021-09-02seat: Avoid holding a tty fdKenny Levinsen
The kernel Secure Attention Key killer, triggered by SysRq+k, kills all processes that hold an fd referencing the tty. To avoid its attention, we stop storing the fd for the currently active VT in seat state. This has the added benefit of simplifying state a bit.
2021-03-02Normalize log texts a bitKenny Levinsen
2021-02-27clang-formatKenny Levinsen
2021-02-27seatd: Close cur_ttyfd in seat_destroyKenny Levinsen
This fd would only still be set after closing clients if no clients were active on the current VT.
2021-02-27seatd: Clean up debug logs a bitKenny Levinsen
2021-02-27Convert a few debug logs to error logsKenny Levinsen
2021-02-27seatd: Set errno in seat_add_clientKenny Levinsen
2021-02-27seatd: Tear down VT when disabled client closesKenny Levinsen
If a client closed while it was disabled, the VT would not be torn down. If the user navigated back to the VT it belonged to, they would be stuck. When a client is disabled, open the fd for the VT it belonged to and perform regular teardown on it.
2021-02-27client: Replace pending_disable with state enumKenny Levinsen
This simplifies logic in seat handling.
2021-02-02seat: Remove unused arg from seat_deactive_deviceKenny Levinsen
2020-11-23client: More robust handling of client linksKenny Levinsen
2020-09-22seat: Only close VT if no new session was foundKenny Levinsen
2020-09-22terminal: Ack both release and acquireKenny Levinsen
Linux only requires acking release and ignores ack of acquire, but FreeBSD is more stringent and will patiently wait for both to be acked. Implement proper acking for both events.
2020-09-22seat: Use current VT for switch and ackKenny Levinsen
2020-09-22seat: Reuse deactivate logic, more loggingKenny Levinsen
2020-09-22seat: Plug leak of deactivated fdsKenny Levinsen
Only if a device had an fd and was active would an fd be closed. As devices are deactivated early on session switch, this lead to fd leakage. Close fds regardless of active state.
2020-09-22seat: Rework seat activation/switch logicKenny Levinsen
The seat activation logic did not correctly handle VT switching and switching between multiple sessions. Session switching on VT-bound seats is now performed using a VT switch, taking advantage of VT signals to perform the actual switch. This simplifies switching logic and makes it more robust.
2020-09-01Move list removal to seat/client destroyKenny Levinsen
2020-08-29seat: Destroy all clients on teardownKenny Levinsen
2020-08-04seat: Fix device double-removeKenny Levinsen
2020-08-04client: Sanitize shutdown/kill mechanismKenny Levinsen
2020-08-03seat: Enable VT process switching when switching awayKenny Levinsen
2020-08-03seat: Add VT cleanup on switch to empty VTKenny Levinsen
VTs were being cleaned up the active client of a VT went away, or if we were acking a kernel VT switch request. However, no cleanup was done if the user had reqested a session switch to a different VT. Duplicate the VT cleanup to the VT switch condition.
2020-08-03seat: Convert client list to linked listKenny Levinsen
2020-08-03seat: Convert device list to linked listKenny Levinsen
2020-08-03client: Prefix notification methods with 'send'Kenny Levinsen
2020-08-02seat: Deactivate devices before sending disableKenny Levinsen
Previously, seatd would not deactivate devices until the client had acked the disable. In once instance, this lead to libinput spending significant time checking and closing each input device. As a workaround, mimick logind's behavior of deactivating devices first. The original behavior can be reintroduced if the client-side problem is fixed. Closes: https://todo.sr.ht/~kennylevinsen/seatd/5
2020-08-02seat: Open/close tty on activation/deactivationKenny Levinsen
The VT and KD ioctl's are picky about the tty fd used. In order to satisfy these, and to improve state cleanup, we now only and store the current tty when opening a client, and use this fd to perform teardown later. The presence of the fd is also used to signal that teardown is needed.
2020-08-01seat: Fix seat_device->fd assertKenny Levinsen
2020-08-01devices: Use path to check device typeKenny Levinsen
FreeBSD device numbers cannot be used to check the type of a device, as they are merely unique filesystem IDs. As the paths we use have been sanitized with realpath, we can simply use the path to check if a requested file is an evdev or drm device. This also allows us to make the check before the file is opened.
2020-07-31seat: Use PATH_MAX long array for realpathKenny Levinsen
2020-07-31seat: remove_client return value was invertedKenny Levinsen
2020-07-31Initial implementation of seatd and libseatKenny Levinsen