mirror of
https://github.com/hyprwm/hyprlock.git
synced 2024-12-22 05:19:48 +01:00
f48540fcd4
* auth: Support parallel fingerprint auth I chose to use Fprint's dbus interface directly rather than going through pam (which uses Fprint's dbus interface) due to poor handling of system sleep somewhere between fprintd and pam. When preparing for sleep, fprintd puts the device to sleep, which causes VerifyStatus to emit with verify-unknown-error, which normally should be responded to by calling both Device.StopVerify and Device.Release (and this is what pam does). Unfortunately, if you try to release the device when the system is preparing for sleep, you'll get an error that the device is busy and then you can't can't claim or release the device for 30 seconds. pam also has a max timeout for pam_fprintd.so of 99 seconds, and so if we used pam, we'd have to deal with the timeouts and keep restarting the auth conversation. gdm/gnome-session lock seems to get around these issues by having a shutter on top of the lock screen that you have to interact with first that gives gnome-session a trigger to start fingerprint auth. * nix/overlays: add sdbus overlay --------- Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
126 lines
4 KiB
CMake
126 lines
4 KiB
CMake
cmake_minimum_required(VERSION 3.19)
|
|
|
|
file(READ "${CMAKE_SOURCE_DIR}/VERSION" VER_RAW)
|
|
string(STRIP ${VER_RAW} VERSION)
|
|
|
|
project(
|
|
hyprlock
|
|
DESCRIPTION "A gpu-accelerated screen lock for Hyprland"
|
|
VERSION ${VERSION})
|
|
|
|
set(CMAKE_MESSAGE_LOG_LEVEL "STATUS")
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
|
|
|
|
if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
|
|
message(STATUS "Configuring hyprlock in Debug with CMake")
|
|
add_compile_definitions(HYPRLAND_DEBUG)
|
|
else()
|
|
add_compile_options(-O3)
|
|
message(STATUS "Configuring hyprlock in Release with CMake")
|
|
endif()
|
|
|
|
include_directories(. "protocols/")
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
# configure
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
add_compile_options(-Wall -Wextra -Wno-unused-parameter -Wno-unused-value
|
|
-Wno-missing-field-initializers -Wno-narrowing)
|
|
|
|
# position independent build: __FILE__
|
|
add_compile_options(-fmacro-prefix-map=${CMAKE_SOURCE_DIR}/=)
|
|
add_compile_definitions(HYPRLOCK_VERSION="${VERSION}")
|
|
|
|
# dependencies
|
|
message(STATUS "Checking deps...")
|
|
|
|
find_package(Threads REQUIRED)
|
|
find_package(PkgConfig REQUIRED)
|
|
find_package(OpenGL REQUIRED)
|
|
pkg_check_modules(
|
|
deps
|
|
REQUIRED
|
|
IMPORTED_TARGET
|
|
wayland-client
|
|
wayland-protocols
|
|
wayland-egl
|
|
hyprlang>=0.4.0
|
|
egl
|
|
opengl
|
|
xkbcommon
|
|
libjpeg
|
|
libwebp
|
|
libmagic
|
|
cairo
|
|
pangocairo
|
|
libdrm
|
|
gbm
|
|
hyprutils>=0.2.3
|
|
sdbus-c++>=2.0.0)
|
|
|
|
file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp")
|
|
add_executable(hyprlock ${SRCFILES})
|
|
target_link_libraries(hyprlock PRIVATE pam rt Threads::Threads PkgConfig::deps
|
|
OpenGL::EGL OpenGL::GL)
|
|
|
|
# protocols
|
|
find_program(WaylandScanner NAMES wayland-scanner)
|
|
message(STATUS "Found WaylandScanner at ${WaylandScanner}")
|
|
execute_process(
|
|
COMMAND pkg-config --variable=pkgdatadir wayland-protocols
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
OUTPUT_VARIABLE WAYLAND_PROTOCOLS_DIR
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
message(STATUS "Found wayland-protocols at ${WAYLAND_PROTOCOLS_DIR}")
|
|
|
|
function(protocol protoPath protoName external)
|
|
if(external)
|
|
execute_process(
|
|
COMMAND ${WaylandScanner} client-header ${protoPath}
|
|
protocols/${protoName}-protocol.h
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
|
execute_process(
|
|
COMMAND ${WaylandScanner} private-code ${protoPath}
|
|
protocols/${protoName}-protocol.c
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
|
target_sources(hyprlock PRIVATE protocols/${protoName}-protocol.c)
|
|
else()
|
|
execute_process(
|
|
COMMAND
|
|
${WaylandScanner} client-header ${WAYLAND_PROTOCOLS_DIR}/${protoPath}
|
|
protocols/${protoName}-protocol.h
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
|
execute_process(
|
|
COMMAND
|
|
${WaylandScanner} private-code ${WAYLAND_PROTOCOLS_DIR}/${protoPath}
|
|
protocols/${protoName}-protocol.c
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
|
target_sources(hyprlock PRIVATE protocols/${protoName}-protocol.c)
|
|
endif()
|
|
endfunction()
|
|
|
|
make_directory(${CMAKE_SOURCE_DIR}/protocols) # we don't ship any custom ones so
|
|
# the dir won't be there
|
|
protocol("staging/ext-session-lock/ext-session-lock-v1.xml"
|
|
"ext-session-lock-v1" false)
|
|
protocol("staging/cursor-shape/cursor-shape-v1.xml" "cursor-shape-v1" false)
|
|
protocol("unstable/tablet/tablet-unstable-v2.xml" "tablet-unstable-v2" false)
|
|
protocol("staging/fractional-scale/fractional-scale-v1.xml"
|
|
"fractional-scale-v1" false)
|
|
protocol("stable/viewporter/viewporter.xml" "viewporter" false)
|
|
protocol("protocols/wlr-screencopy-unstable-v1.xml"
|
|
"wlr-screencopy-unstable-v1" true)
|
|
protocol("unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml"
|
|
"linux-dmabuf-unstable-v1" false)
|
|
|
|
# Installation
|
|
install(TARGETS hyprlock)
|
|
|
|
install(FILES ${CMAKE_SOURCE_DIR}/pam/hyprlock
|
|
DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d)
|
|
|
|
install(
|
|
FILES ${CMAKE_SOURCE_DIR}/assets/example.conf
|
|
DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/hypr
|
|
RENAME hyprlock.conf)
|