aboutsummaryrefslogtreecommitdiff
path: root/libseat
AgeCommit message (Collapse)Author
2023-01-16noop: initialize initial_setupChia-I Wu
Otherwise the enable_seat callback is never called.
2022-03-29drm: Make dev_is_drm local to logind backendKenny Levinsen
This function is only used for logind, which is Linux-specific, but the presence in common/drm.c suggested that it had to be portable. Move it to the logind backend for now.
2022-03-03builtin: Remove deathsig and log start/stopKenny Levinsen
Proper handling of client disconnect mean that we no longer need deathsig handling.
2022-03-03builtin: Close other end of socketpair after forkKenny Levinsen
We will not get a socket hangup if we have duplicates socket fds in the parent or child, so make sure we clean this up properly after fork.
2022-02-15logind: Always send ping if data is queuedKenny Levinsen
sd_bus_call_method may have read and queued our ping response, so we cannot assume that a previous ping will make the socket readable. Instead, always send a ping if read or write queues are not empty, even if a ping has already been sent.
2022-02-09libseat: Use SOCK_CLOEXEC and SOCK_NONBLOCKKenny Levinsen
This both simplifies our code and fixes an exec fd leak when using builtin or noop backends.
2021-11-28build: use list for logind depSimon Ser
This reduces the boilerplate a bit. Use logind.name() instead of having a separate source of truth. Requires adapting the checks a bit because the dep name has a "lib" prefix.
2021-10-05logind: Set userdata for ping_handlerKenny Levinsen
2021-09-22logind: Improve error handling in open_seatKenny Levinsen
errno was not being set by open_seat in most cases, leading to simpletest possibly failing with "libseat_open_seat() failed: Success".
2021-09-22logind: check if session is active on startupSimon Ser
Up until now we assumed the session was always active on startup. This might not be the case. Instead, read the current value of the Active property.
2021-09-21logind: Send ping to wake us up laterKenny Levinsen
sd_bus_call drains received messages into the receive queue, and peeks for its own return value. It does not dispatch the receive queue. As the socket is drained, the caller will not wake from a poll and have no reason to dispatch libseat. This has gone unnoticed largely due to logind sending an event for every device, making it unlikely that no unread message will be left on the socket. Like we have done for seatd, we fix this by sending a "ping" request to logind if anything is left in our receive queue as reported by sd_bus_get_events. The response to this will wake us up and ensure that dispatch is called.
2021-09-21seatd: Implement ping request to wake up laterKenny Levinsen
When device open or close messages are sent to seatd, libseat must read messages from the socket until it sees the associated response message. This means that it may drain enable/disable seat events from the socket, queueing them internally for deferred processing. As the socket is drained, the caller will not wake from a poll and have no reason to dispatch libseat. To ensure that these messages would not be left in the queue, 6fa82930d0c5660eea3102989c765dc864514e36 made it so that open/close calls would execute all queued events just before returning. Unfortunately, this had the side-effect of having events fire from the stack of libseat_open_device or libseat_close_device, which we now see cause problems in compositors. Specifically, an issue has been observed where libinput end up calling libseat_close_device, which in turn dispatch a disable seat event that calls libinput_suspend. libinput does not like this. Instead, remove the execution from libseat_open_device and libseat_close_device, and instead make a "ping" request to seatd if events have been queued. The response to this will wake us up and ensure that dispatch is called.
2021-08-15libseat: Fix build of builtin backendKenny Levinsen
This was regressed by 166feaea3394e00af14418e074ae090e31922f33 which missed the builtin backend when changing struct libseat_seat_listener to being passed around as const.
2021-08-15Revert "libseat: Check euid before using builtin"Greg Depoire--Ferrer
This reverts commit 1ae6c3b3ddf0ce2a2e1817eb9c74e0c03153df58. A user might want to run the builtin server as non root, if they have permission to use the devices. The check was originally copied from wlroots's direct backend. It was reverted in fa05d3cde68d with a detailed explanation of why root priviledges are not always necessary to use the DRM device.
2021-08-15logind: Remove redundant null checkKenny Levinsen
2021-08-15Make libseat_seat_listener constSimon Ser
libseat will never write to that struct. Let's allow callers to make it read-only.
2021-08-06seatd: We shouldn't poll if predispatch > 0Kenny Levinsen
This condition was accidentally botched as part of 5923e0edc9bb157cf6398b63d51cc3c0aaf06001
2021-07-09libseat: Rename dispatch_background in backendsKenny Levinsen
This name never made much sense. dispatch_and_execute is more meaningful, especially when compared to the non-executing dispatch function.
2021-07-09libseat/seatd: Add dispatch_pending_and_executeKenny Levinsen
This handler returns the number of dispatched or executed events, or -1 if dispatch_pending failed. This helper is used to clean up dispatch_background, which now ensures that all events are executed before we read or poll the connection, and have improved error handling in the corner case where the second dispatch_pending failed.
2021-07-08libseat/seatd: Return executed eventsKenny Levinsen
Dispatch needs to report if something has happened, which includes events executed from the queue as these could have lead to additional dispatch and queuing.
2021-04-25libseat/seatd: downgrade ENOENT log to infoSimon Ser
The socket is expected not to be found if seatd is not running. In general other backends will be attempted after seatd. There is already an error message in case no backend can be started.
2021-03-26Avoid a clang-format quirkKenny Levinsen
clang-format wants to put the terminating NULLs on the same line as the noop backend when it doens't have any immediate non-NULL neighbors. Add a newline to stop it.
2021-03-26Add no-op sessionSimon Ser
This is useful for headless testing, for instance with VKMS: modprobe vkms export WLR_DRM_DEVICES=/dev/dri/card1 export WLR_BACKENDS=drm export LIBSEAT_BACKEND=noop sway We don't need any of the VT handling in this case.
2021-02-27Convert a few debug logs to error logsKenny Levinsen
2021-02-27logind: Fix return values from close_device/get_fdKenny Levinsen
2020-12-23logind: Send ReleaseControl when closing seatKenny Levinsen
This is not strictly speaking necessary as detaching from the bus should trigger this automatically, but elogind apparently has issues with this. Doing this explicitly does no harm, so let's just do that.
2020-12-04libseat/backend/logind: stop waiting for CanGraphicalSimon Ser
Upstream says compositors should wait for DRM nodes using udev instead.
2020-11-24logind: switch_session should return 0 on successKenny Levinsen
It currently returned -1 on failure and 1 on success. The API is intended to return -1 on failure and 0 on success, so fix that.
2020-11-21libseat: log error when failing to open socketIsaac Freund
The most common pain point I've seen with people trying out seat is forgetting to add themselves to whatever group the distro has chosen to own the socket. Logging this error and path of the socket should make it easier to tell why things aren't working.
2020-10-11libseat: Better error reporting from open_seatKenny Levinsen
2020-10-11logind: clang-formatKenny Levinsen
2020-10-10logind: Use seat_path for SwitchToKenny Levinsen
2020-09-28logind: close_device should not close fdKenny Levinsen
2020-09-22libseat/seatd: Fix socket path boundsKenny Levinsen
2020-09-22meson: Make default seatd socket path configurableKenny Levinsen
FreeBSD and Linux have different preferred socket locations. Expose an option to set the location, and implement simple auto-logic for linux/freebsd.
2020-09-22libseat: Execute bg events after IPC callsKenny Levinsen
If a background event was queued during call dispatch, and no unread data was left on the socket, there would be no incentive for the user to call dispatch, and as a result, the events would never be executed. Execute events at the end of IPC calls that read from the socket to avoid stalls.
2020-09-22libseat: Dispatch all non-bg events on IPC callKenny Levinsen
Dispatch on IPC call only dispatched until the first message was successfully processed. This could lead to premature dispatch termination if a background event was received during an IPC call. Instead, continue dispatching until a non-bg opcode is reported or an error is received.
2020-09-07libseat: Handle SERVER_ERROR correctlyKenny Levinsen
The connection buffer position was erroneously rewinded before reading the protocol message when the message was a SERVER_ERROR.
2020-08-31client: Do not leak idle clients on exitKenny Levinsen
2020-08-31linked_list: linked_list_take should concat listsKenny Levinsen
2020-08-30seatd: Remove unused device_closed msg bodyKenny Levinsen
2020-08-30linked_list: Implement linked_list_takeKenny Levinsen
2020-08-29libseat: Check euid before using builtinKenny Levinsen
2020-08-29libseat: Remove pointless checkKenny Levinsen
2020-08-29libseat: Keep track of error stateKenny Levinsen
Store if an error has occurred and return -1 with ENOTCONN from all future calls, avoiding attempts to use a broken connection.
2020-08-29libseat: Improve logging with seatd conn helpersKenny Levinsen
Add helpers around connection access to have all logging centralized and reduce code duplication. Improve existing helpers to further reduce code duplication. The seatd backend should have much better logging after this.
2020-08-29libseat: Assert that listener is non-NULLKenny Levinsen
2020-08-28logind: Merge PropertiesChanged handlersKenny Levinsen
2020-08-28libseat: Expand logging in all backendsKenny Levinsen
2020-08-28libseat: Only print backend attempts for matchesKenny Levinsen