Go to file
Manuel Stoeckl 10ab8b2740 Estimate buffer size in advance for render_frame
The size of the surface used to draw the indicator depends on
the extents of the text being drawn on and under the indicator.

This commit refactors the `render_frame` function so that the surface
size is computed before drawing; before, `render_frame` drew onto a
buffer, estimated the size the buffer should have had, and recursively
called itself to try again with the estimated size, if necessary. This
was done because Cairo's methods to estimate font and text size
require that a cairo_t context object and an associated cairo_surface
already have been set up. Since the surface size depends on the text
size, the natural way to use Cairo would have a circular dependency.

In order to compute sizes _before_ the buffer is created, this commit
adds a 1x1 surface and a matching `test_cairo` context which is set to
the same font and drawing parameters as the buffer that will be
created. Font/text extent measurements should give the same results as
for the final buffer.
2023-01-27 12:19:32 +01:00
completions build: move completions to separate file 2022-12-05 11:02:41 +01:00
include Estimate buffer size in advance for render_frame 2023-01-27 12:19:32 +01:00
pam Remove FreeBSD-specific PAM configuration 2020-01-06 13:18:25 -07:00
.build.yml Remove references to pango 2019-01-23 12:20:24 +00:00
.editorconfig Add editorconfig 2021-11-19 09:20:25 +01:00
.gitignore Convert swaylock into standalone project 2019-01-13 21:16:47 -05:00
background-image.c Fix loss of clarity with odd-sized centered image 2022-09-10 20:04:31 +02:00
cairo.c Remove unused functions in common code 2019-01-13 21:19:43 -05:00
comm.c Use mlock for password buffer 2022-06-15 10:49:32 +02:00
LICENSE MIT license 2019-01-13 21:21:09 -05:00
log.c Implement logging and remove wlroots dependency 2019-01-14 23:30:54 -05:00
loop.c Unlock the screen on SIGUSR1 2022-09-24 12:15:53 +02:00
main.c Estimate buffer size in advance for render_frame 2023-01-27 12:19:32 +01:00
meson_options.txt Set version in project file 2019-02-05 14:19:14 +01:00
meson.build build: use configuration data for SYSCONFDIR and SWAYLOCK_VERSION 2022-12-05 11:02:41 +01:00
pam.c Use mlock for password buffer 2022-06-15 10:49:32 +02:00
password-buffer.c Use mlock for password buffer 2022-06-15 10:49:32 +02:00
password.c Use mlock for password buffer 2022-06-15 10:49:32 +02:00
pool-buffer.c Use shm_open instead of mkstemp 2022-11-24 23:56:10 +01:00
README.md Drop xdg-output requirement 2022-03-10 10:31:51 +01:00
render.c Estimate buffer size in advance for render_frame 2023-01-27 12:19:32 +01:00
seat.c seat: NULL-check on keyboard.modifiers event 2022-02-10 09:40:06 +01:00
shadow.c shadow: make the result of crypt() const 2022-09-26 19:58:04 +02:00
swaylock.1.scd Unlock the screen on SIGUSR1 2022-09-24 12:15:53 +02:00
unicode.c Delete whole utf8 character on backspace 2022-03-22 22:11:27 +01:00
wlr-input-inhibitor-unstable-v1.xml Convert swaylock into standalone project 2019-01-13 21:16:47 -05:00
wlr-layer-shell-unstable-v1.xml Fix some typos 2021-04-12 21:28:59 +02:00

swaylock

swaylock is a screen locking utility for Wayland compositors. It is compatible with any Wayland compositor which implements one of the following Wayland protocols:

  • ext-session-lock-v1, or
  • wlr-layer-shell and wlr-input-inhibitor

See the man page, swaylock(1), for instructions on using swaylock.

Release Signatures

Releases are signed with E88F5E48 and published on GitHub. swaylock releases are managed independently of sway releases.

Installation

From Packages

Swaylock is available in many distributions. Try installing the "swaylock" package for yours.

Compiling from Source

Install dependencies:

  • meson *
  • wayland
  • wayland-protocols *
  • libxkbcommon
  • cairo
  • gdk-pixbuf2 **
  • pam (optional)
  • scdoc (optional: man pages) *
  • git *

* Compile-time dep
** Optional: required for background images other than PNG

Run these commands:

meson build
ninja -C build
sudo ninja -C build install

On systems without PAM, you need to suid the swaylock binary:

sudo chmod a+s /usr/local/bin/swaylock

Swaylock will drop root permissions shortly after startup.