Package: release.debian.org Severity: normal Tags: bookworm User: release.debian.org@packages.debian.org Usertags: pu X-Debbugs-Cc: pkg-systemd-maintainers@lists.alioth.debian.org Dear Release Team, We would like to upload the latest stable point release of systemd 252 to bookworm-p-u. Stable release branches are maintained upstream with the intention of providing bug fixes only and no compatibility breakages, and with automated non-trivial CI jobs that also cover Debian and Ubuntu. I have already uploaded to p-u. There are no packaging changes. Debdiff attached. The list of commits included can be seen at: https://github.com/systemd/systemd-stable/compare/v252.33...v252.36
diff -Nru systemd-252.33/catalog/systemd.catalog.in systemd-252.36/catalog/systemd.catalog.in
--- systemd-252.33/catalog/systemd.catalog.in 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/catalog/systemd.catalog.in 2025-03-06 11:43:10.000000000 +0000
@@ -179,7 +179,7 @@
Support: %SUPPORT_URL%
System shutdown has been initiated. The shutdown has now begun and
-all system services are terminated and all file systems unmounted.
+all system services will be terminated and all file systems will be unmounted.
-- c14aaf76ec284a5fa1f105f88dfb061c
Subject: System factory reset initiated
diff -Nru systemd-252.33/debian/changelog systemd-252.36/debian/changelog
--- systemd-252.33/debian/changelog 2024-12-01 13:28:27.000000000 +0000
+++ systemd-252.36/debian/changelog 2025-03-06 14:56:14.000000000 +0000
@@ -1,3 +1,9 @@
+systemd (252.36-1~deb12u1) bookworm; urgency=medium
+
+ * New upstream version 252.36
+
+ -- Luca Boccassi <bluca@debian.org> Thu, 06 Mar 2025 14:56:14 +0000
+
systemd (252.33-1~deb12u1) bookworm; urgency=medium
* New upstream version 252.33
diff -Nru systemd-252.33/.github/workflows/build_test.sh systemd-252.36/.github/workflows/build_test.sh
--- systemd-252.33/.github/workflows/build_test.sh 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/build_test.sh 2025-03-06 11:43:10.000000000 +0000
@@ -21,6 +21,7 @@
expect
fdisk
gettext
+ gnu-efi
iputils-ping
isc-dhcp-client
itstool
@@ -77,6 +78,14 @@
CXX="clang++-$COMPILER_VERSION"
AR="llvm-ar-$COMPILER_VERSION"
+ if systemd-analyze compare-versions "$COMPILER_VERSION" ge 17; then
+ CFLAGS="-fno-sanitize=function"
+ CXXFLAGS="-fno-sanitize=function"
+ else
+ CFLAGS=""
+ CXXFLAGS=""
+ fi
+
# Prefer the distro version if available
if ! apt install --dry-run "llvm-$COMPILER_VERSION" >/dev/null; then
# Latest LLVM stack deb packages provided by https://apt.llvm.org/
@@ -91,6 +100,8 @@
CC="gcc-$COMPILER_VERSION"
CXX="g++-$COMPILER_VERSION"
AR="gcc-ar-$COMPILER_VERSION"
+ CFLAGS=""
+ CXXFLAGS=""
if ! apt install --dry-run "gcc-$COMPILER_VERSION" >/dev/null; then
# Latest gcc stack deb packages provided by
@@ -103,16 +114,20 @@
fatal "Unknown compiler: $COMPILER"
fi
-# PPA with some newer build dependencies (like zstd)
-add-apt-repository -y ppa:upstream-systemd-ci/systemd-ci
-apt-get -y update
-apt-get -y build-dep systemd
-apt-get -y install "${PACKAGES[@]}"
+# This is added by default, and it is often broken, but we don't need anything from it
+sudo rm -f /etc/apt/sources.list.d/microsoft-prod.{list,sources}
+# add-apt-repository --enable-source does not work on deb822 style sources.
+for f in /etc/apt/sources.list.d/*.sources; do
+ sudo sed -i "s/Types: deb/Types: deb deb-src/g" "$f"
+done
+sudo apt-get -y update
+sudo apt-get -y build-dep systemd
+sudo apt-get -y install "${PACKAGES[@]}"
# Install more or less recent meson and ninja with pip, since the distro versions don't
# always support all the features we need (like --optimization=). Since the build-dep
# command above installs the distro versions, let's install the pip ones just
# locally and add the local bin directory to the $PATH.
-pip3 install --user -r .github/workflows/requirements.txt --require-hashes
+pip3 install --user -r .github/workflows/requirements.txt --require-hashes --break-system-packages
export PATH="$HOME/.local/bin:$PATH"
$CC --version
@@ -127,20 +142,11 @@
# It can be safely removed from the CI since it isn't actually used anywhere to test anything.
find . -type f -name meson.build -exec sed -i '/install_tag/d' '{}' '+'
- # mold < 1.1 does not support LTO.
- if dpkg --compare-versions "$(dpkg-query --showformat='${Version}' --show mold)" ge 1.1; then
- fatal "Newer mold version detected, please remove this workaround."
- elif [[ "$args" == *"-Db_lto=true"* ]]; then
- LD="gold"
- else
- LD="$LINKER"
- fi
-
info "Checking build with $args"
# shellcheck disable=SC2086
if ! AR="$AR" \
- CC="$CC" CC_LD="$LD" CFLAGS="-Werror" \
- CXX="$CXX" CXX_LD="$LD" CXXFLAGS="-Werror" \
+ CC="$CC" CC_LD="$LINKER" CFLAGS="$CFLAGS" \
+ CXX="$CXX" CXX_LD="$LINKER" CXXFLAGS="$CXXFLAGS" \
meson -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true --werror \
-Dnobody-group=nogroup -Dcryptolib="${CRYPTOLIB:?}" \
$args build; then
diff -Nru systemd-252.33/.github/workflows/build_test.yml systemd-252.36/.github/workflows/build_test.yml
--- systemd-252.33/.github/workflows/build_test.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/build_test.yml 2025-03-06 11:43:10.000000000 +0000
@@ -17,7 +17,7 @@
jobs:
build:
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
concurrency:
group: ${{ github.workflow }}-${{ toJSON(matrix.env) }}-${{ github.ref }}
cancel-in-progress: true
@@ -27,9 +27,9 @@
env:
- { COMPILER: "gcc", COMPILER_VERSION: "11", LINKER: "bfd", CRYPTOLIB: "gcrypt" }
- { COMPILER: "gcc", COMPILER_VERSION: "12", LINKER: "gold", CRYPTOLIB: "openssl" }
- - { COMPILER: "clang", COMPILER_VERSION: "13", LINKER: "mold", CRYPTOLIB: "gcrypt" }
- - { COMPILER: "clang", COMPILER_VERSION: "14", LINKER: "lld", CRYPTOLIB: "openssl" }
- - { COMPILER: "clang", COMPILER_VERSION: "15", LINKER: "bfd", CRYPTOLIB: "auto" }
+ - { COMPILER: "clang", COMPILER_VERSION: "14", LINKER: "mold", CRYPTOLIB: "gcrypt" }
+ - { COMPILER: "clang", COMPILER_VERSION: "15", LINKER: "lld", CRYPTOLIB: "openssl" }
+ - { COMPILER: "clang", COMPILER_VERSION: "16", LINKER: "bfd", CRYPTOLIB: "auto" }
env: ${{ matrix.env }}
steps:
- name: Repository checkout
diff -Nru systemd-252.33/.github/workflows/cflite_pr.yml systemd-252.36/.github/workflows/cflite_pr.yml
--- systemd-252.33/.github/workflows/cflite_pr.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/cflite_pr.yml 2025-03-06 11:43:10.000000000 +0000
@@ -13,7 +13,7 @@
jobs:
PR:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
if: github.repository != 'systemd/systemd' || github.event.pull_request.user.login == 'dependabot[bot]'
concurrency:
group: ${{ github.workflow }}-${{ matrix.sanitizer }}-${{ github.ref }}
diff -Nru systemd-252.33/.github/workflows/cifuzz.yml systemd-252.36/.github/workflows/cifuzz.yml
--- systemd-252.33/.github/workflows/cifuzz.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/cifuzz.yml 2025-03-06 11:43:10.000000000 +0000
@@ -22,7 +22,8 @@
- main
jobs:
Fuzzing:
- runs-on: ubuntu-latest
+ # FIXME: Figure out why 32-bit applications fail to run in docker on Ubuntu 24.04.
+ runs-on: ubuntu-22.04
if: github.repository == 'systemd/systemd'
concurrency:
group: ${{ github.workflow }}-${{ matrix.sanitizer }}-${{ matrix.architecture }}-${{ github.ref }}
diff -Nru systemd-252.33/.github/workflows/codeql.yml systemd-252.36/.github/workflows/codeql.yml
--- systemd-252.33/.github/workflows/codeql.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/codeql.yml 2025-03-06 11:43:10.000000000 +0000
@@ -26,7 +26,7 @@
jobs:
analyze:
name: Analyze
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
concurrency:
group: ${{ github.workflow }}-${{ matrix.language }}-${{ github.ref }}
cancel-in-progress: true
diff -Nru systemd-252.33/.github/workflows/coverity.yml systemd-252.36/.github/workflows/coverity.yml
--- systemd-252.33/.github/workflows/coverity.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/coverity.yml 2025-03-06 11:43:10.000000000 +0000
@@ -14,7 +14,7 @@
jobs:
build:
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
if: github.repository == 'systemd/systemd'
env:
# Set in repo settings -> secrets -> actions
diff -Nru systemd-252.33/.github/workflows/differential-shellcheck.yml systemd-252.36/.github/workflows/differential-shellcheck.yml
--- systemd-252.33/.github/workflows/differential-shellcheck.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/differential-shellcheck.yml 2025-03-06 11:43:10.000000000 +0000
@@ -13,7 +13,7 @@
jobs:
lint:
if: github.event.repository.name != 'systemd-security'
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
security-events: write
diff -Nru systemd-252.33/.github/workflows/issue_labeler.yml systemd-252.36/.github/workflows/issue_labeler.yml
--- systemd-252.33/.github/workflows/issue_labeler.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/issue_labeler.yml 2025-03-06 11:43:10.000000000 +0000
@@ -10,7 +10,7 @@
jobs:
label-component:
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
permissions:
issues: write
diff -Nru systemd-252.33/.github/workflows/make_release.yml systemd-252.36/.github/workflows/make_release.yml
--- systemd-252.33/.github/workflows/make_release.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/make_release.yml 2025-03-06 11:43:10.000000000 +0000
@@ -11,7 +11,7 @@
jobs:
release:
if: github.repository == 'systemd/systemd' || github.repository == 'systemd/systemd-stable'
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
contents: write
diff -Nru systemd-252.33/.github/workflows/mkosi.yml systemd-252.36/.github/workflows/mkosi.yml
--- systemd-252.33/.github/workflows/mkosi.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/mkosi.yml 2025-03-06 11:43:10.000000000 +0000
@@ -25,7 +25,7 @@
jobs:
ci:
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
concurrency:
group: ${{ github.workflow }}-${{ matrix.distro }}-${{ matrix.release }}-${{ github.ref }}
cancel-in-progress: true
@@ -45,6 +45,9 @@
release: 9-stream
steps:
+ - name: mkosi dependencies
+ run: sudo apt-get install --assume-yes --no-install-recommends python3-pyelftools makepkg python3-pexpect python3-jinja2
+
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: systemd/mkosi@792cbc60eb2dc4a58d66bb3c212bf92f8d50f6ea
@@ -53,15 +56,7 @@
# (should be done by the end of 2022).
- name: Fix C9S/EPEL9
if: ${{ matrix.release == '9-stream' }}
- run: sudo sed -i '/add_packages/s/systemd-boot/systemd/g' /usr/local/lib/python3.10/dist-packages/mkosi/__init__.py
-
- # FIXME: temporary workaround for debootstrap issue of Debian testing/sid on Jammy
- - name: Fix Debian testing/sid
- if: ${{ matrix.distro == 'debian' && matrix.release == 'testing' }}
- run: sudo sed -i 's/merged-usr/no-merged-usr/g' /usr/local/lib/python3.10/dist-packages/mkosi/__init__.py
-
- - name: Install
- run: sudo apt-get update && sudo apt-get install --no-install-recommends python3-pexpect python3-jinja2
+ run: sudo sed -i '/add_packages/s/systemd-boot/systemd/g' /usr/local/lib/python3.12/dist-packages/mkosi/__init__.py
- name: Configure
run: |
diff -Nru systemd-252.33/.github/workflows/scorecards.yml systemd-252.36/.github/workflows/scorecards.yml
--- systemd-252.33/.github/workflows/scorecards.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/scorecards.yml 2025-03-06 11:43:10.000000000 +0000
@@ -23,7 +23,7 @@
analysis:
name: Scorecards analysis
if: github.repository == 'systemd/systemd'
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
diff -Nru systemd-252.33/hwdb.d/20-net-ifname.hwdb systemd-252.36/hwdb.d/20-net-ifname.hwdb
--- systemd-252.33/hwdb.d/20-net-ifname.hwdb 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/20-net-ifname.hwdb 2025-03-06 11:43:10.000000000 +0000
@@ -3,3 +3,7 @@
# Dell iDRAC Virtual USB NIC
usb:v413CpA102*
ID_NET_NAME_FROM_DATABASE=idrac
+
+# Disable inclusion of PCI domain in interface names on Azure MANA
+pci:v00001414d000000BA*
+ ID_NET_NAME_INCLUDE_DOMAIN=0
diff -Nru systemd-252.33/hwdb.d/60-evdev.hwdb systemd-252.36/hwdb.d/60-evdev.hwdb
--- systemd-252.33/hwdb.d/60-evdev.hwdb 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-evdev.hwdb 2025-03-06 11:43:10.000000000 +0000
@@ -933,6 +933,12 @@
EVDEV_ABS_00=0:10000:400
EVDEV_ABS_01=0:6250:400
+# WALTOP International Corp. Slim Tablet Stylus
+evdev:input:b0003v172Fp0034*
+ EVDEV_ABS_00=0:20000:80
+ EVDEV_ABS_01=0:12500:80
+ EVDEV_ABS_24=0:1023:500
+
# WALTOP International Corp. Graphics Tablet
evdev:input:b0003v172Fp0047*
EVDEV_ABS_00=0:20000:80
diff -Nru systemd-252.33/hwdb.d/60-input-id.hwdb systemd-252.36/hwdb.d/60-input-id.hwdb
--- systemd-252.33/hwdb.d/60-input-id.hwdb 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-input-id.hwdb 2025-03-06 11:43:10.000000000 +0000
@@ -55,6 +55,10 @@
id-input:modalias:input:b0003v28bdp0078*
ID_INPUT_TABLET=1
+# XBox Series Elite controller
+id-input:modalias:input:b0005v045Ep0B22e0517*
+ ID_INPUT_JOYSTICK=1
+
# Lite-On Tech IBM USB Travel Keyboard with Ultra Nav Mouse
id-input:modalias:input:b0003v04B3p301Ee0100-e0,1,2,4*
ID_INPUT_POINTINGSTICK=1
diff -Nru systemd-252.33/hwdb.d/60-keyboard.hwdb systemd-252.36/hwdb.d/60-keyboard.hwdb
--- systemd-252.33/hwdb.d/60-keyboard.hwdb 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-keyboard.hwdb 2025-03-06 11:43:10.000000000 +0000
@@ -116,8 +116,8 @@
KEYBOARD_KEY_d9=brightnessup # Fn+Right
KEYBOARD_KEY_ee=brightnessup # Fn+Right
KEYBOARD_KEY_ef=brightnessdown # Fn+Left
- KEYBOARD_KEY_f1=f22 # Fn+F7 Touchpad toggle (off-to-on)
- KEYBOARD_KEY_f2=f23 # Fn+F7 Touchpad toggle (on-to-off)
+ KEYBOARD_KEY_f1=touchpad_on # Fn+F7 Touchpad toggle (off-to-on)
+ KEYBOARD_KEY_f2=touchpad_off # Fn+F7 Touchpad toggle (on-to-off)
KEYBOARD_KEY_f3=prog2 # "P2" programmable button
KEYBOARD_KEY_f4=prog1 # "P1" programmable button
KEYBOARD_KEY_f5=presentation
@@ -125,10 +125,6 @@
KEYBOARD_KEY_f8=fn
KEYBOARD_KEY_f9=prog1 # Launch NTI shadow
-# Acer kernel driver
-evdev:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:*
- KEYBOARD_KEY_82=f21 # Touchpad toggle
-
# Aspire models
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*:*
KEYBOARD_KEY_84=bluetooth # sent when bluetooth module missing, and key pressed
@@ -186,7 +182,7 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311-31*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311R-31*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311RN-31*:pvr*
- KEYBOARD_KEY_8a=f20 # Microphone mute
+ KEYBOARD_KEY_8a=micmute # Microphone mute
# Travelmate C300
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:*
@@ -200,7 +196,7 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*P648-G2-MG*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*P648-G3-M*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*P645-S*:*
- KEYBOARD_KEY_8a=f20 # Microphone mute button; should be micmute
+ KEYBOARD_KEY_8a=micmute # Microphone mute button
# on some models this isn't brightnessup
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5210*:*
@@ -223,7 +219,7 @@
# Swift SF314-511
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnSwiftSF314-511:pvr*
- KEYBOARD_KEY_8a=f20 # Fn+F12, microphone mute
+ KEYBOARD_KEY_8a=micmute # Fn+F12, microphone mute
# Predator PHN16-71
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredatorPHN16-71:*
@@ -242,7 +238,7 @@
# Nitro AN515-58
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnNitro*AN*515-58:pvr*
- KEYBOARD_KEY_8a=f20 # Microphone mute button
+ KEYBOARD_KEY_8a=micmute # Microphone mute button
KEYBOARD_KEY_55=power
###########################################################
@@ -251,7 +247,7 @@
# Alienware/Dell reserves these keys; safe to apply on all their devices
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAlienware*:pn*:*
- KEYBOARD_KEY_81=f21 # Touchpad toggle
+ KEYBOARD_KEY_81=touchpad_toggle # Touchpad toggle
KEYBOARD_KEY_8a=ejectcd
KEYBOARD_KEY_bf=!prog1 # graphics amplifier, cable plug-in event
KEYBOARD_KEY_c1=!prog2 # graphics amplifier, undock-button event
@@ -268,7 +264,7 @@
# Aquarius Cmp NS483
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAquarius*:pnCmp*NS483*:*
KEYBOARD_KEY_56=backslash
- KEYBOARD_KEY_76=f21 # Touchpad Toggle
+ KEYBOARD_KEY_76=touchpad_toggle # Touchpad Toggle
###########################################################
# Asus
@@ -279,16 +275,6 @@
KEYBOARD_KEY_ee=volumedown
KEYBOARD_KEY_ef=mute
-evdev:name:Asus WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
-evdev:name:Eee PC WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
-evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
- KEYBOARD_KEY_6b=f21 # Touchpad Toggle
- KEYBOARD_KEY_7c=f20 # Remap micmute to f20
-
-# USB keyboard in Asus FX503VD
-evdev:input:b0003v0B05p1869*
- KEYBOARD_KEY_ff31007c=f20 # Remap micmute to f20
-
# Asus TF103C misses the home button in its PNP0C40 GPIO resources
# causing the volume-button mappings to be off by one, correct this
evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:*
@@ -345,15 +331,15 @@
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS50_70MU:*
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4XMB,ME,MZ:*
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS5x_NS7xPU:*
- KEYBOARD_KEY_f7=f21 # Touchpad Toggle
- KEYBOARD_KEY_f8=f21 # Touchpad Toggle
+ KEYBOARD_KEY_f7=touchpad_toggle # Touchpad Toggle
+ KEYBOARD_KEY_f8=touchpad_toggle # Touchpad Toggle
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV5xTNC_TND_TNE:*
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4xPZ:*
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV54x_6x_TU:*
- KEYBOARD_KEY_f7=f21 # Touchpad Toggle
- KEYBOARD_KEY_f8=f21 # Touchpad Toggle
- KEYBOARD_KEY_81=f20 # Fn+4; Mic Mute
+ KEYBOARD_KEY_f7=touchpad_toggle # Touchpad Toggle
+ KEYBOARD_KEY_f8=touchpad_toggle # Touchpad Toggle
+ KEYBOARD_KEY_81=micmute # Fn+4; Mic Mute
###########################################################
# Compal
@@ -374,7 +360,7 @@
KEYBOARD_KEY_9f=homepage
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnCompaq:pn*:pvr*:rvn*:rnN14KP6*
- KEYBOARD_KEY_76=f21 # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+f2 toggle touchpad
evdev:input:b0003v049Fp0051*
evdev:input:b0003v049Fp008D*
@@ -420,12 +406,12 @@
KEYBOARD_KEY_99=nextsong # Front panel next song
KEYBOARD_KEY_9a=setup # Tablet tools button
KEYBOARD_KEY_9b=switchvideomode # Display toggle button
- KEYBOARD_KEY_9e=f21 # Touchpad toggle
+ KEYBOARD_KEY_9e=touchpad_toggle # Touchpad toggle
KEYBOARD_KEY_a2=playpause # Front panel play/pause
KEYBOARD_KEY_a4=stopcd # Front panel stop
KEYBOARD_KEY_ed=media # MediaDirect button
KEYBOARD_KEY_d8=screenlock # FIXME: Tablet lock button
- KEYBOARD_KEY_d9=f21 # Touchpad toggle
+ KEYBOARD_KEY_d9=touchpad_toggle # Touchpad toggle
#
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*910:*
@@ -467,7 +453,7 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
KEYBOARD_KEY_88=! # wireless switch
- KEYBOARD_KEY_9e=!f21
+ KEYBOARD_KEY_9e=!touchpad_toggle
# Dell Latitude E[67]*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*E6*:*
@@ -498,17 +484,17 @@
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
# Dell XPS microphone mute
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS*:*
- KEYBOARD_KEY_100150=f20 # Mic mute toggle, should be micmute
+ KEYBOARD_KEY_100150=micmute # Mic mute toggle
# Dell Latitude privacy microphone mute
evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
# Dell Precision privacy microphone mute
evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
- KEYBOARD_KEY_120001=f20 # Mic mute toggle, should be micmute
+ KEYBOARD_KEY_120001=micmute # Mic mute toggle
# Dell Professional Sound Bar AE515
evdev:input:b0003v413CpA506*
- KEYBOARD_KEY_b002f=f20 # Mic mute toggle, should be micmute
+ KEYBOARD_KEY_b002f=micmute # Mic mute toggle
###########################################################
# Everex
@@ -516,7 +502,7 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnEverex:pnXT5000*:*
KEYBOARD_KEY_5c=media
- KEYBOARD_KEY_65=f21 # Fn+F5 Touchpad toggle
+ KEYBOARD_KEY_65=touchpad_toggle # Fn+F5 Touchpad toggle
KEYBOARD_KEY_67=prog3 # Fan speed control button
KEYBOARD_KEY_6f=brightnessup
KEYBOARD_KEY_7f=brightnessdown
@@ -555,7 +541,7 @@
# Amilo Pro v3205
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*AMILO*Pro*V3205*:*
- KEYBOARD_KEY_f4=f21 # FIXME: silent-mode decrease CPU/GPU clock
+ KEYBOARD_KEY_f4=touchpad_toggle # FIXME: silent-mode decrease CPU/GPU clock
KEYBOARD_KEY_f7=switchvideomode # Fn+F3
# Amilo Si 1520
@@ -665,8 +651,8 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*:*
KEYBOARD_KEY_88=media # FIXME: quick play
KEYBOARD_KEY_b7=print
- KEYBOARD_KEY_d8=!f23 # touchpad off
- KEYBOARD_KEY_d9=!f22 # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on # touchpad on
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*Pavilion*dv7*Notebook*PC:*
KEYBOARD_KEY_b7=print
@@ -676,7 +662,7 @@
# Pavilion 13 x360 (Tablet mode and SYSRQ key)
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*13*x360*:*
- KEYBOARD_KEY_d7=!f23 # touchpad off
+ KEYBOARD_KEY_d7=!touchpad_off # touchpad off
KEYBOARD_KEY_d9=unknown
KEYBOARD_KEY_d2=sysrq # Fn+Print = SYSRQ
@@ -694,7 +680,7 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPSpectrex360Convertible13*:*
# ENVY x360 13
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPENVYx360Convertible13*:*
- KEYBOARD_KEY_82=f20 # Microphone mute button, should be micmute
+ KEYBOARD_KEY_82=micmute # Microphone mute button
# Spectre x360 16 2022
evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*HP[sS][pP][eE][cC][tT][rR][eE]*x3602-in-1*:*
@@ -707,7 +693,7 @@
evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHPElitex21013G3:*
KEYBOARD_KEY_f8=unknown # rfkill is also reported by HP Wireless hotkeys
KEYBOARD_KEY_64=calendar
- KEYBOARD_KEY_81=f20 # Microphone mute button
+ KEYBOARD_KEY_81=micmute # Microphone mute button
KEYBOARD_KEY_ee=switchvideomode # Switch display outputs
KEYBOARD_KEY_92=brightnessdown
KEYBOARD_KEY_97=brightnessup
@@ -725,20 +711,33 @@
# Presario
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*Presario*CQ*:*
- KEYBOARD_KEY_d8=f21
- KEYBOARD_KEY_d9=f21
+ KEYBOARD_KEY_d8=touchpad_toggle
+ KEYBOARD_KEY_d9=touchpad_toggle
# 2510p 2530p
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2510p*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2530p*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*G60*Notebook*PC:*
- KEYBOARD_KEY_d8=!f23 # touchpad off
- KEYBOARD_KEY_d9=!f22 # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on # touchpad on
# 2570p
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2570p*:*
KEYBOARD_KEY_f8=wlan # Wireless HW switch button
+# 2170p running coreboot
+evdev:atkbd:dmi:bvncoreboot:bvr*:bd*:svnHewlett-Packard*:pn*EliteBook2170p:*
+evdev:atkbd:dmi:bvncoreboot:bvr*:bd*:svnHP*:pn*EliteBook2170p:*
+ KEYBOARD_KEY_66=backspace
+ KEYBOARD_KEY_be=battery # Fn+F2
+ KEYBOARD_KEY_d7=switchvideomode # Fn+F4
+ KEYBOARD_KEY_a3=mute # Fn+F5
+ KEYBOARD_KEY_a1=volumedown # Fn+F6
+ KEYBOARD_KEY_a2=volumeup # Fn+F7
+ KEYBOARD_KEY_a4=brightnessdown # Fn+F9
+ KEYBOARD_KEY_c3=brightnessup # Fn+F10
+ KEYBOARD_KEY_e3=wlan # Fn+F12
+
# Elitebook 2760p
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2760p*:*
KEYBOARD_KEY_89=battery # Fn+F8
@@ -747,15 +746,15 @@
KEYBOARD_KEY_87=volumedown
KEYBOARD_KEY_92=brightnessdown
KEYBOARD_KEY_97=brightnessup
- KEYBOARD_KEY_d8=!f23 # touchpad off
- KEYBOARD_KEY_d9=!f22 # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on # touchpad on
KEYBOARD_KEY_b3=brightness_auto # Auto brightness
# TX2
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][xX]2*:*
KEYBOARD_KEY_c2=media
- KEYBOARD_KEY_d8=!f23 # Toggle touchpad button on tx2 (OFF)
- KEYBOARD_KEY_d9=!f22 # Toggle touchpad button on tx2 (ON)
+ KEYBOARD_KEY_d8=!touchpad_off # Toggle touchpad button on tx2 (OFF)
+ KEYBOARD_KEY_d9=!touchpad_on # Toggle touchpad button on tx2 (ON)
# Presario 2100
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnPresario*2100*:*
@@ -780,8 +779,8 @@
# HDX9494nr
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHDX9494NR:*
KEYBOARD_KEY_b2=www # Fn+F3
- KEYBOARD_KEY_d8=!f23 # touchpad off
- KEYBOARD_KEY_d9=!f22 # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on # touchpad on
# HP EliteBook 725 G2
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPLicrice:*
@@ -800,7 +799,7 @@
# HP ZBook
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPZBook*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBook*:*
- KEYBOARD_KEY_81=f20 # Fn+F8; Microphone mute button, should be micmute
+ KEYBOARD_KEY_81=micmute # Fn+F8; Microphone mute button
# HP ZBook Studio G5
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBookStudioG5*:*
@@ -813,9 +812,9 @@
# HP ProBook 11 G1
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPProBook11G1:*
- KEYBOARD_KEY_81=f20 # Fn+F8; Microphone mute button, should be micmute
- KEYBOARD_KEY_d8=f21 # touchpad toggle
- KEYBOARD_KEY_d9=f21 # touchpad toggle
+ KEYBOARD_KEY_81=micmute # Fn+F8; Microphone mute button
+ KEYBOARD_KEY_d8=touchpad_toggle # touchpad toggle
+ KEYBOARD_KEY_d9=touchpad_toggle # touchpad toggle
# HP ZBook Studio G4
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPZBookStudioG4:*
@@ -823,13 +822,13 @@
# HP EliteBook Folio 1040 G2
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPEliteBookFolio1040G2:*
- KEYBOARD_KEY_d8=!f23 # touchpad off
- KEYBOARD_KEY_d9=!f22 # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on # touchpad on
# HP EliteBook Folio G1
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPEliteBookFolioG1:*
KEYBOARD_KEY_64=calendar
- KEYBOARD_KEY_81=f20
+ KEYBOARD_KEY_81=micmute
# HP EliteBook 845 G7
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook845G7*:pvr*
@@ -862,14 +861,14 @@
# HP ProBook 11G2
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPProBook11G2*:pvr*
- KEYBOARD_KEY_d8=!f23 # Fn+F2: touchpad off
- KEYBOARD_KEY_d9=!f22 # Fn+F2: touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off # Fn+F2: touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on # Fn+F2: touchpad on
# HP mt44 Mobile Thin Client
evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*mt44*Mobile*Thin*Client*:*
KEYBOARD_KEY_64=calendar # Calendar icon (Fn + F12)
KEYBOARD_KEY_6d=displaytoggle # Display icon
- KEYBOARD_KEY_81=f20 # Fn+F8; Microphone mute button, should be micmute
+ KEYBOARD_KEY_81=micmute # Fn+F8; Microphone mute button
KEYBOARD_KEY_85=unknown # lid close; also reported via special evdev
KEYBOARD_KEY_f8=wlan # Wireless HW switch button
@@ -887,7 +886,7 @@
# HP Dev One
evdev:atkbd:dmi:*:rvnHP:rn8A78:*
- KEYBOARD_KEY_81=f20 # Fn+F8; Microphone mute button
+ KEYBOARD_KEY_81=micmute # Fn+F8; Microphone mute button
KEYBOARD_KEY_f9=prog1 # Fn+F12; Programmable hotkey
# HP Victus
@@ -910,14 +909,18 @@
KEYBOARD_KEY_c8=pageup
KEYBOARD_KEY_d0=pagedown
+# HP 430 Programmable Wireless Keypad
+evdev:input:b0005v03F0p854Ae044C*
+ KEYBOARD_KEY_700f3=macro1
+ KEYBOARD_KEY_700f4=macro2
+ KEYBOARD_KEY_700fc=macro3
+ KEYBOARD_KEY_700fd=macro4
+ KEYBOARD_KEY_700fe=macro5
+
##########################################################
# Huawei
##########################################################
-# Huawei WMI hotkeys driver
-evdev:name:Huawei WMI hotkeys:dmi:bvn*:bvr*:bd*:svnHUAWEI:*
- KEYBOARD_KEY_287=f20 # Microphone mute button, should be micmute
-
# Huawei MACH-WX9 and EUL-WX9
evdev:atkbd:dmi:bvn*:bvr*:svnHUAWEI*:pnMACH-WX9:*
evdev:atkbd:dmi:bvn*:bvr*:svnHUAWEI*:pnEUL-WX9:*
@@ -977,7 +980,7 @@
# LEAP W502
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnJP-IK:pnLEAPW502:pvr*
- KEYBOARD_KEY_76=f21 # touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle # touchpad toggle
###########################################################
# Kvadra
@@ -985,7 +988,7 @@
# LE14U/LE15U
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnKVADRA*:pn*LE1*U*:*
- KEYBOARD_KEY_76=f21 # Fn+F1 Toggle touchpad, sends meta+ctrl+toggle
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+F1 Toggle touchpad, sends meta+ctrl+toggle
###########################################################
# Lenovo
@@ -998,7 +1001,7 @@
KEYBOARD_KEY_03=sleep
KEYBOARD_KEY_04=wlan
KEYBOARD_KEY_06=switchvideomode
- KEYBOARD_KEY_07=f21
+ KEYBOARD_KEY_07=touchpad_toggle
KEYBOARD_KEY_08=f24
KEYBOARD_KEY_0b=suspend
KEYBOARD_KEY_0f=brightnessup
@@ -1009,7 +1012,6 @@
KEYBOARD_KEY_15=volumedown
KEYBOARD_KEY_16=mute
KEYBOARD_KEY_17=prog1
- KEYBOARD_KEY_1a=f20 # Microphone mute button; should be micmute
KEYBOARD_KEY_45=bookmarks
KEYBOARD_KEY_46=selective_screenshot # Fn + PrtSc, on Windows: Snipping tool
KEYBOARD_KEY_4a=prog3 # Fn + Right shift, on Windows: No idea
@@ -1023,14 +1025,14 @@
KEYBOARD_KEY_090013=battery # Fn+F3
KEYBOARD_KEY_090014=wlan # Fn+F5
KEYBOARD_KEY_090016=switchvideomode # Fn+F7
- KEYBOARD_KEY_090017=f21 # Fn+F8 touchpad toggle
+ KEYBOARD_KEY_090017=touchpad_toggle # Fn+F8 touchpad toggle
KEYBOARD_KEY_090019=suspend # Fn+F12
KEYBOARD_KEY_09001a=brightnessup # Fn+Home
KEYBOARD_KEY_09001b=brightnessdown # Fn+End
KEYBOARD_KEY_09001d=zoom # Fn+Space
KEYBOARD_KEY_090011=prog1 # ThinkVantage button
KEYBOARD_KEY_090015=camera # Fn+F6 headset/camera VoIP key ??
- KEYBOARD_KEY_090010=f20 # Microphone mute button; should be micmute
+ KEYBOARD_KEY_090010=micmute # Microphone mute button
# Lenovo 3000
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*3000*:pvr*
@@ -1052,8 +1054,8 @@
KEYBOARD_KEY_b9=brightnessup # does nothing in BIOS
KEYBOARD_KEY_ba=brightnessdown # does nothing in BIOS
KEYBOARD_KEY_f1=camera # BIOS toggles camera power
- KEYBOARD_KEY_f2=f21 # touchpad toggle (key alternately emits F2 and F3)
- KEYBOARD_KEY_f3=f21
+ KEYBOARD_KEY_f2=touchpad_toggle # touchpad toggle (key alternately emits F2 and F3)
+ KEYBOARD_KEY_f3=touchpad_toggle
# Lenovo IdeaPad 5
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrIdeaPad5*:*
@@ -1089,17 +1091,14 @@
# IdeaPad
evdev:name:Ideapad extra buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:*
KEYBOARD_KEY_0d=rfkill # airplane mode switch (toggle all wireless devices)
- KEYBOARD_KEY_08=f20 # micmute
- KEYBOARD_KEY_42=f23
- KEYBOARD_KEY_43=f22
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*Y550*:pvr*
KEYBOARD_KEY_95=media
KEYBOARD_KEY_a3=play
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*U300s*:pvr*
- KEYBOARD_KEY_f1=f21
- KEYBOARD_KEY_ce=f20 # micmute
+ KEYBOARD_KEY_f1=touchpad_toggle
+ KEYBOARD_KEY_ce=micmute
evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*IdeaPad*Z370*:pvr*
# Lenovo IdeaPad Flex 5
@@ -1120,16 +1119,16 @@
evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*20378*:pvr*
# Lenovo IdeaPad Z500
evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*5931*:pvr*
- KEYBOARD_KEY_f3=f21 # Fn+F6 (toggle touchpad)
+ KEYBOARD_KEY_f3=touchpad_toggle # Fn+F6 (toggle touchpad)
# V480
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*Lenovo*V480*:pvr*
- KEYBOARD_KEY_f1=f21
+ KEYBOARD_KEY_f1=touchpad_toggle
# Lenovo ThinkCentre M800z/M820z/M920z AIO machines
# key_scancode 00 is KEY_MICMUTE
evdev:name:Microphone Mute Button:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:*
- KEYBOARD_KEY_00=f20
+ KEYBOARD_KEY_00=micmute
# enhanced USB keyboard
evdev:input:b0003v04B3p301B*
@@ -1144,7 +1143,7 @@
# Lenovo Ideapad D330-10IGM
evdev:name:SIPODEV Lenovo HID Device:dmi:*:svnLENOVO:*:pvrLenovoideapadD330-10IGM:*
- KEYBOARD_KEY_70073=f21 # Fn+Supr (Touchpad toggle)
+ KEYBOARD_KEY_70073=touchpad_toggle # Fn+Supr (Touchpad toggle)
evdev:name:SIPODEV Lenovo HID Device Consumer Control:dmi:*:svnLENOVO:*:pvrLenovoideapadD330-10IGM:*
KEYBOARD_KEY_c00ff=fn_esc # Fn+Tab (FnLk toggle)
@@ -1438,10 +1437,15 @@
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
KEYBOARD_KEY_c01b7=audio # My Music (F12)
+# The wireless receiver b0003v046Dp4092* seems to be used by multiple models.
+# See issue #35691. Hence, the entry below cannot be enabled by default. If
+# you're using the model below, consider copying the entry to a custom hwdb
+# file to enable the setting.
+#
# Logitech MX Keys for Mac
-evdev:input:b0003v046Dp4092*
- KEYBOARD_KEY_70035=102nd # '<' key
- KEYBOARD_KEY_70064=grave # '^' key
+#evdev:input:b0003v046Dp4092*
+# KEYBOARD_KEY_70035=102nd # '<' key
+# KEYBOARD_KEY_70064=grave # '^' key
###########################################################
# Maxdata
@@ -1512,7 +1516,6 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*:*
- KEYBOARD_KEY_76=f21 # Toggle touchpad, sends meta+ctrl+toggle
KEYBOARD_KEY_91=config # MSIControl Center
KEYBOARD_KEY_a0=mute # Fn+F9
KEYBOARD_KEY_ae=volumedown # Fn+F7
@@ -1521,16 +1524,20 @@
KEYBOARD_KEY_c2=ejectcd
KEYBOARD_KEY_df=sleep # Fn+F12
KEYBOARD_KEY_e2=bluetooth # satellite dish2
- KEYBOARD_KEY_e4=f21 # Fn+F3 Touchpad disable
+ KEYBOARD_KEY_e4=touchpad_toggle # Fn+F3 Touchpad disable
KEYBOARD_KEY_ec=email # envelope button
KEYBOARD_KEY_ee=camera # Fn+F6 camera disable
- KEYBOARD_KEY_f1=f20 # Microphone mute
+ KEYBOARD_KEY_f1=micmute # Microphone mute
KEYBOARD_KEY_f2=rotate_display # Rotate screen
KEYBOARD_KEY_f6=wlan # satellite dish1
KEYBOARD_KEY_f7=brightnessdown # Fn+F4
KEYBOARD_KEY_f8=brightnessup # Fn+F5
KEYBOARD_KEY_f9=search
+# MSI GF63 toggles touchpad using Fn+F3 where the keyboard key is 29
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGF63*:*
+ KEYBOARD_KEY_85=touchpad_toggle # Toggle touchpad, sends meta+ctrl+toggle
+
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE60*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE70*:*
KEYBOARD_KEY_c2=ejectcd
@@ -1557,6 +1564,7 @@
# Keymaps MSI Prestige And MSI Modern FnKeys and Special keys
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Prestige*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Modern*:*
+ KEYBOARD_KEY_76=touchpad_toggle # Toggle touchpad, sends meta+ctrl+toggle
KEYBOARD_KEY_91=prog1 # Fn+F7 Creation Center, sometime F7
KEYBOARD_KEY_f2=rotate_display # Fn+F12 Screen rotation
KEYBOARD_KEY_8d=prog3 # Fn+A Change True Color selections
@@ -1565,12 +1573,9 @@
KEYBOARD_KEY_97=unknown # Lid close
KEYBOARD_KEY_98=unknown # Lid open
-evdev:name:MSI Laptop hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnM[iI][cC][rR][oO]-S[tT][aA][rR]*:*
- KEYBOARD_KEY_0213=f22
- KEYBOARD_KEY_0214=f23
-
-# MSI Claw
+# MSI Claw, MSI Claw 8
evdev:name:AT Translated Set 2 keyboard:dmi:*:svnMicro-StarInternationalCo.,Ltd.:pnClawA1M:*
+evdev:name:AT Translated Set 2 keyboard:dmi:*:svnMicro-StarInternationalCo.,Ltd.:pnClaw8AI+A2VM:*
KEYBOARD_KEY_b9=f15 # Right Face Button
KEYBOARD_KEY_ba=f16 # Left Face Button
@@ -1580,7 +1585,7 @@
# VersaPro VG-S
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnNEC:pnPC-VK22TGSGS:pvr*
- KEYBOARD_KEY_a8=f21 # Fn+Space touchpad toggle
+ KEYBOARD_KEY_a8=touchpad_toggle # Fn+Space touchpad toggle
KEYBOARD_KEY_67=brightnessdown # Fn+F7 brightness down
KEYBOARD_KEY_65=brightnessup # Fn+F8 brightness up
KEYBOARD_KEY_71=battery # Fn+F4 ECO
@@ -1593,7 +1598,7 @@
evdev:input:b0003v15BAp003C*
KEYBOARD_KEY_70066=sleep # Fn+F1
KEYBOARD_KEY_700f6=wlan # Fn+F2
- KEYBOARD_KEY_700c7=f21 # Fn+F3 touchpad toggle
+ KEYBOARD_KEY_700c7=touchpad_toggle # Fn+F3 touchpad toggle
KEYBOARD_KEY_7006f=brightnessdown # Fn+F7
KEYBOARD_KEY_70070=brightnessup # Fn+F8
KEYBOARD_KEY_7006e=switchvideomode # Fn+F9
@@ -1634,8 +1639,8 @@
KEYBOARD_KEY_f3=f17
KEYBOARD_KEY_f2=f18
KEYBOARD_KEY_f1=f19
- KEYBOARD_KEY_f0=f20 # micmute
- KEYBOARD_KEY_ef=f21
+ KEYBOARD_KEY_f0=micmute
+ KEYBOARD_KEY_ef=touchpad_toggle
KEYBOARD_KEY_ee=chat
KEYBOARD_KEY_e4=chat
KEYBOARD_KEY_dd=menu # Frame
@@ -1677,7 +1682,7 @@
KEYBOARD_KEY_f0=media # Fn+R
KEYBOARD_KEY_f5=switchvideomode # Fn+E
KEYBOARD_KEY_f6=camera # Fn+T
- KEYBOARD_KEY_f7=f21 # Fn+Y (touchpad toggle)
+ KEYBOARD_KEY_f7=touchpad_toggle # Fn+Y (touchpad toggle)
KEYBOARD_KEY_f8=brightnessup # Fn+S
KEYBOARD_KEY_f9=brightnessdown # Fn+A
KEYBOARD_KEY_fb=wlan # Fn+J
@@ -1748,14 +1753,6 @@
KEYBOARD_KEY_70066=sleep
###########################################################
-# Plantronics
-###########################################################
-
-# Plantronics .Audio 626 DSP
-evdev:input:b0003v047FpC006*
- KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute
-
-###########################################################
# Purism
###########################################################
@@ -1818,8 +1815,8 @@
KEYBOARD_KEY_b4=!wlan # Fn+F9 (X60P)
KEYBOARD_KEY_c5=!prog3 # Fn+F8 switch power mode (battery/dynamic/performance)
KEYBOARD_KEY_d5=!wlan # Fn+F12 wlan/airplane switch
- KEYBOARD_KEY_f7=!f22 # Fn+F10 Touchpad on
- KEYBOARD_KEY_f9=!f23 # Fn+F10 Touchpad off
+ KEYBOARD_KEY_f7=!touchpad_on # Fn+F10 Touchpad on
+ KEYBOARD_KEY_f9=!touchpad_off # Fn+F10 Touchpad off
# Series 3
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*300E[457]*:*
@@ -1832,8 +1829,8 @@
KEYBOARD_KEY_89=!brightnessdown # Fn+F2 brightness down
KEYBOARD_KEY_88=!brightnessup # Fn+F3 brightness up
KEYBOARD_KEY_82=!switchvideomode # Fn+F4 display toggle
- KEYBOARD_KEY_f7=!f22 # Fn+F5 touchpad on
- KEYBOARD_KEY_f9=!f23 # Fn+F5 touchpad off
+ KEYBOARD_KEY_f7=!touchpad_on # Fn+F5 touchpad on
+ KEYBOARD_KEY_f9=!touchpad_off # Fn+F5 touchpad off
KEYBOARD_KEY_a0=!mute # Fn+F6 mute
KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume down
KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume up
@@ -1908,8 +1905,8 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:*
KEYBOARD_KEY_74=mute
KEYBOARD_KEY_75=mute
- KEYBOARD_KEY_77=f22 # Touchpad on
- KEYBOARD_KEY_79=f23 # Touchpad off
+ KEYBOARD_KEY_77=touchpad_on # Touchpad on
+ KEYBOARD_KEY_79=touchpad_off # Touchpad off
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:*
KEYBOARD_KEY_ad=leftmeta
@@ -1918,7 +1915,7 @@
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:sku*SCAI*:*
KEYBOARD_KEY_81=!esc
KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
- KEYBOARD_KEY_76=f21 # Fn+F5 Touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+F5 Touchpad toggle
KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume down
KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume up
KEYBOARD_KEY_ac=unknown # Fn+F9 multi-level keyboard backlight toggle - handled by samsung-galaxybook
@@ -1971,7 +1968,7 @@
KEYBOARD_KEY_10=suspend # Fn+F12
evdev:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pnVPC*:*
- KEYBOARD_KEY_05=f21 # Fn+F1 -> KEY_F21 (The actual touchpad toggle)
+ KEYBOARD_KEY_05=touchpad_toggle # Fn+F1
KEYBOARD_KEY_0d=down # Fn+F9 zoomout
KEYBOARD_KEY_0e=up # Fn+F10 zoomin
@@ -1980,19 +1977,23 @@
###########################################################
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pn*:*
- KEYBOARD_KEY_f7=f21 # Touchpad toggle
- KEYBOARD_KEY_f8=f21 # Touchpad toggle
+ KEYBOARD_KEY_81=micmute # Mic mute
+ KEYBOARD_KEY_f7=touchpad_toggle # Touchpad toggle
+ KEYBOARD_KEY_f8=touchpad_toggle # Touchpad toggle
-# Pangolin 12
+# Pangolin
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang12*
- KEYBOARD_KEY_76=f21 # Touchpad toggle
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang13*
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang14*
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang15*
+ KEYBOARD_KEY_76=touchpad_toggle # Touchpad toggle
###########################################################
# T-bao
###########################################################
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnT-bao:pnTbookair:*
- KEYBOARD_KEY_76=f21 # Touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle # Touchpad toggle
###########################################################
# Toshiba
@@ -2008,8 +2009,8 @@
KEYBOARD_KEY_92=stop
KEYBOARD_KEY_93=www
KEYBOARD_KEY_94=media
- KEYBOARD_KEY_9e=f22 # Touchpad on
- KEYBOARD_KEY_9f=f23 # Touchpad off
+ KEYBOARD_KEY_9e=touchpad_on # Touchpad on
+ KEYBOARD_KEY_9f=touchpad_off # Touchpad off
KEYBOARD_KEY_b9=nextsong
KEYBOARD_KEY_d9=brightnessup
KEYBOARD_KEY_ee=screenlock
@@ -2022,8 +2023,8 @@
KEYBOARD_KEY_d9=brightnessup
KEYBOARD_KEY_ee=screenlock
KEYBOARD_KEY_93=media
- KEYBOARD_KEY_9e=f22 # touchpad enable
- KEYBOARD_KEY_9f=f23 # touchpad disable
+ KEYBOARD_KEY_9e=touchpad_on # touchpad enable
+ KEYBOARD_KEY_9f=touchpad_off # touchpad disable
# Satellite P75-A
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:*
@@ -2037,14 +2038,14 @@
KEYBOARD_KEY_13c=brightnessdown
KEYBOARD_KEY_13d=brightnessup
KEYBOARD_KEY_13e=switchvideomode
- KEYBOARD_KEY_13f=f21 # Touchpad toggle
+ KEYBOARD_KEY_13f=touchpad_toggle # Touchpad toggle
# Satellite P75-A7200
evdev:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:*
KEYBOARD_KEY_13c=brightnessdown
KEYBOARD_KEY_13d=brightnessup
KEYBOARD_KEY_13e=switchvideomode
- KEYBOARD_KEY_13f=f21 # Touchpad toggle
+ KEYBOARD_KEY_13f=touchpad_toggle # Touchpad toggle
KEYBOARD_KEY_9e=wlan
# Portege Z830 ACPI quickstart buttons
@@ -2055,7 +2056,7 @@
KEYBOARD_KEY_1=prog2 # TOSHIBA Presentation button
evdev:name:Quickstart Button 3:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnPORTEGEZ830:*
- KEYBOARD_KEY_1=f21 # Touchpad toggle
+ KEYBOARD_KEY_1=touchpad_toggle # Touchpad toggle
###########################################################
# VIA
@@ -2069,7 +2070,7 @@
###########################################################
evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:bd*:svnVIOS:pnLTH17:*
- KEYBOARD_KEY_70073=f21 # Touchpad toggle
+ KEYBOARD_KEY_70073=touchpad_toggle # Touchpad toggle
###########################################################
# WeiHeng
@@ -2077,7 +2078,7 @@
# P325J
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnINET:pnP325J:*
- KEYBOARD_KEY_76=f21 # Touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle # Touchpad toggle
###########################################################
# Xiaomi
@@ -2103,8 +2104,8 @@
KEYBOARD_KEY_93=switchvideomode # Fn+F3 Toggle Video Output
KEYBOARD_KEY_95=brightnessdown # Fn+F4 Brightness Down
KEYBOARD_KEY_91=brightnessup # Fn+F5 Brightness Up
- KEYBOARD_KEY_a5=f23 # Fn+F6 Disable Touchpad
- KEYBOARD_KEY_a6=f22 # Fn+F6 Enable Touchpad
+ KEYBOARD_KEY_a5=touchpad_off # Fn+F6 Disable Touchpad
+ KEYBOARD_KEY_a6=touchpad_on # Fn+F6 Enable Touchpad
KEYBOARD_KEY_a7=bluetooth # Fn+F10 Enable Bluetooth
KEYBOARD_KEY_a9=bluetooth # Fn+F10 Disable Bluetooth
KEYBOARD_KEY_f1=wlan # RF Switch Off
@@ -2204,7 +2205,12 @@
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJPW1[12]F11X*:pvr*:*
# Vaio FE14 (VJFE41F11X, VJE42F11X, VJFE44F11X, VJFE54F11X)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFE*:pvr*:*
- KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+F1 toggle touchpad
+
+# VAIO VJFH52
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFH52F11X*:pvr*:*
+ KEYBOARD_KEY_f7=touchpad_off # Fn+F1 toggle touchpad off
+ KEYBOARD_KEY_f8=touchpad_on # Fn+F1 toggle touchpad on
###########################################################
# Positivo
@@ -2215,23 +2221,23 @@
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivoTecnologiaSA:pn*:pvr*:rvnPositivoTecnologiaSA:rnCF40CM-V2*
# Positivo DUO (k116)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivoTecnologiaSA:pn*:pvr*:rvnPositivoTecnologiaSA:rnK116*
- KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+F1 toggle touchpad
# Positivo (N14NPE-N, N15NPE-N)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivo*:pn*:pvr*:rvnPositivo*:rnN1[45]NPE-N*
- KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+F1 toggle touchpad
KEYBOARD_KEY_dd=search
# Positivo (N15EPE, N14EPE)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivo*:pn*:pvr*:rvnPositivo*:rnN1[45]EPE*
- KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+F1 toggle touchpad
KEYBOARD_KEY_6e=search
# Positivo (CG15D)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnCG15D*
# Positivo Motion (N14AP7, N14DP6, N14DP7, N14DP7-V2, N14DP9, N14JP6, N14KP6)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14[ADJK]P*
- KEYBOARD_KEY_76=f21 # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+f2 toggle touchpad
KEYBOARD_KEY_67=prog1 # Programmable button
KEYBOARD_KEY_68=prog2 # Programmable button
KEYBOARD_KEY_69=prog3 # Programmable button
@@ -2247,7 +2253,7 @@
evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:br*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14EP6*
# Positivo Motion (CW14Q01P) (CW14Q01P-V2)
evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnCW14Q01P*
- KEYBOARD_KEY_70073=f21 # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_70073=touchpad_toggle # Fn+f2 toggle touchpad
KEYBOARD_KEY_7006b=prog1 # Programmable button
KEYBOARD_KEY_7006c=prog2 # Programmable button
KEYBOARD_KEY_7006d=prog3 # Programmable button
@@ -2258,7 +2264,7 @@
###########################################################
# Multilaser Ultra (UL154)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*bvr*:svnMultilaserIndustrial:pn*:pvr*:rvn*:rnUL154*
- KEYBOARD_KEY_76=f21 # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle # Fn+f2 toggle touchpad
###########################################################
# Other
diff -Nru systemd-252.33/hwdb.d/60-sensor.hwdb systemd-252.36/hwdb.d/60-sensor.hwdb
--- systemd-252.33/hwdb.d/60-sensor.hwdb 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-sensor.hwdb 2025-03-06 11:43:10.000000000 +0000
@@ -156,6 +156,10 @@
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+# Asus Transformer Mini T103HAF
+sensor:modalias:platform:HID-SENSOR-200073*:dmi:*svn*ASUSTeK*:pnT103HAF:*
+ ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, -1
+
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnTP201SA:*
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pn*E205SA:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
@@ -164,8 +168,7 @@
sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LD:*
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
-sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q551LB:*
-sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q551LN:*
+sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q5??L*:*
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
sensor:modalias:acpi:KXJ2109*:dmi:*:svnASUSTeK*:pnME176C:*
@@ -305,7 +308,7 @@
# Chuwi Hi10 Max
sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10Max:*
- ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+ ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, 1
# Chuwi Hi12
sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo:pnP02BD6_HI-122LP:*
@@ -510,6 +513,14 @@
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
#########################################
+# Exo
+#########################################
+
+# EXO Wings 2in1 w1125
+sensor:modalias:acpi:SMO8500*:dmi:*:svnEXO*:pnWings:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
+#########################################
# Geo Computers
#########################################
diff -Nru systemd-252.33/hwdb.d/70-lights.hwdb systemd-252.36/hwdb.d/70-lights.hwdb
--- systemd-252.33/hwdb.d/70-lights.hwdb 1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/hwdb.d/70-lights.hwdb 2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,24 @@
+# This file is part of systemd.
+#
+# Database for remote controllable lights that should be accessible to the seat owner,
+# such as Bluetooth or USB lights that are used in conjuction with the computer like
+# streaming lights.
+#
+# To add local entries, copy this file to
+# /etc/udev/hwdb.d/
+# and add your rules there. To load the new rules execute (as root):
+# systemd-hwdb update
+# udevadm trigger
+
+################
+# Logitech
+################
+# Litra Beam
+bluetooth:v046dpc901*
+usb:v046dpc901*
+ ID_AV_LIGHTS=1
+
+# Litra Glow
+bluetooth:v046dpc900*
+usb:v046dpc900*
+ ID_AV_LIGHTS=1
diff -Nru systemd-252.33/hwdb.d/parse_hwdb.py systemd-252.36/hwdb.d/parse_hwdb.py
--- systemd-252.33/hwdb.d/parse_hwdb.py 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/parse_hwdb.py 2025-03-06 11:43:10.000000000 +0000
@@ -158,6 +158,7 @@
('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
('ID_AUTOSUSPEND_DELAY_MS', INTEGER),
('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))),
+ ('ID_AV_LIGHTS', Or((Literal('0'), Literal('1')))),
('ID_PERSIST', Or((Literal('0'), Literal('1')))),
('ID_PDA', Or((Literal('0'), Literal('1')))),
('ID_INPUT', id_input_setting),
diff -Nru systemd-252.33/man/homectl.xml systemd-252.36/man/homectl.xml
--- systemd-252.33/man/homectl.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/homectl.xml 2025-03-06 11:43:10.000000000 +0000
@@ -485,7 +485,7 @@
<listitem><para>Takes a boolean argument. Configures whether to enforce the system's password policy
for this user, regarding quality and strength of selected passwords. Defaults to
on. <option>-P</option> is short for
- <option>---enforce-password-policy=no</option>.</para></listitem>
+ <option>--enforce-password-policy=no</option>.</para></listitem>
</varlistentry>
<varlistentry>
diff -Nru systemd-252.33/man/meson.build systemd-252.36/man/meson.build
--- systemd-252.33/man/meson.build 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/meson.build 2025-03-06 11:43:10.000000000 +0000
@@ -221,7 +221,8 @@
'update-dbus-docs',
output : 'update-dbus-docs',
command : [update_dbus_docs_py, '--build-dir', project_build_root, '@INPUT@'],
- input : dbus_docs)
+ input : dbus_docs,
+ depends : dbus_programs)
if conf.get('BUILD_MODE_DEVELOPER') == 1
test('dbus-docs-fresh',
diff -Nru systemd-252.33/man/nss-myhostname.xml systemd-252.36/man/nss-myhostname.xml
--- systemd-252.33/man/nss-myhostname.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/nss-myhostname.xml 2025-03-06 11:43:10.000000000 +0000
@@ -73,7 +73,7 @@
<para>To activate the NSS modules, add <literal>myhostname</literal> to the line starting with
<literal>hosts:</literal> in <filename>/etc/nsswitch.conf</filename>.</para>
- <para>It is recommended to place <literal>myhostname</literal> after <literal>file</literal> and before <literal>dns</literal>.
+ <para>It is recommended to place <literal>myhostname</literal> after <literal>files</literal> and before <literal>dns</literal>.
This resolves well-known hostnames like <literal>localhost</literal>
and the machine hostnames locally. It is consistent with the behaviour
of <command>nss-resolve</command>, and still allows overriding via
diff -Nru systemd-252.33/man/org.freedesktop.locale1.xml systemd-252.36/man/org.freedesktop.locale1.xml
--- systemd-252.33/man/org.freedesktop.locale1.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.locale1.xml 2025-03-06 11:43:10.000000000 +0000
@@ -131,7 +131,7 @@
<title>Signals</title>
<para>Whenever the system locale or keymap is changed via the daemon,
- <function>PropertyChanged</function> signals are sent out to which clients can subscribe.</para>
+ <function>PropertyChanged</function> signals are sent out to clients which have subscribed.</para>
</refsect2>
<refsect2>
diff -Nru systemd-252.33/man/org.freedesktop.login1.xml systemd-252.36/man/org.freedesktop.login1.xml
--- systemd-252.33/man/org.freedesktop.login1.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.login1.xml 2025-03-06 11:43:10.000000000 +0000
@@ -664,7 +664,7 @@
<title>Signals</title>
<para>Whenever the inhibition state or idle hint changes, <function>PropertyChanged</function>
- signals are sent out to which clients can subscribe.</para>
+ signals are sent out to clients which have subscribed.</para>
<para>The <function>SessionNew</function>, <function>SessionRemoved</function>,
<function>UserNew</function>, <function>UserRemoved</function>, <function>SeatNew</function>, and
@@ -894,8 +894,13 @@
<para>Whenever <function>ActiveSession</function>, <function>Sessions</function>,
<function>CanGraphical</function>, <function>CanTTY</function>,
- or the idle state changes, <function>PropertyChanged</function> signals are sent out to which clients
- can subscribe.</para>
+ or the idle state changes, <function>PropertyChanged</function> signals are sent out to clients which
+ have subscribed.</para>
+
+ <para>Signals are only emitted on objects referencing a specific seat ID, not on the
+ <literal>/org/freedesktop/login1/seat/self</literal> or
+ <literal>/org/freedesktop/login1/seat/auto</literal> convenience objects, as they can only be
+ dereferenced relative to a method caller.</para>
</refsect2>
<refsect2>
@@ -1015,7 +1020,11 @@
<title>Signals</title>
<para>Whenever <varname>Sessions</varname> or the idle state changes,
- <function>PropertyChanged</function> signals are sent out to which clients can subscribe.</para>
+ <function>PropertyChanged</function> signals are sent out to clients which have subscribed.</para>
+
+ <para>Signals are only emitted on objects referencing a specific UID, not on the
+ <literal>/org/freedesktop/login1/user/self</literal> convenience object, as <varname>self</varname>
+ can only be dereferenced relative to a method caller.</para>
</refsect2>
<refsect2>
@@ -1348,12 +1357,17 @@
open file descriptor in the kernel (except for a limited set of device types).</para>
<para>Whenever <function>Active</function> or the idle state changes,
- <function>PropertyChanged</function> signals are sent out to which clients can subscribe.</para>
+ <function>PropertyChanged</function> signals are sent out to clients which have subscribed.</para>
<para><function>Lock</function>/<function>Unlock</function> is sent when the session is asked to be
screen-locked/unlocked. A session manager of the session should listen to this signal and act
accordingly. This signal is sent out as a result of the <function>Lock()</function> and
<function>Unlock()</function> methods, respectively.</para>
+
+ <para>Signals are only emitted on objects referencing a specific session ID, not on the
+ <literal>/org/freedesktop/login1/session/self</literal> or
+ <literal>/org/freedesktop/login1/session/auto</literal> convenience objects, as they can only be
+ dereferenced relative to a method caller.</para>
</refsect2>
<refsect2>
diff -Nru systemd-252.33/man/org.freedesktop.systemd1.xml systemd-252.36/man/org.freedesktop.systemd1.xml
--- systemd-252.33/man/org.freedesktop.systemd1.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.systemd1.xml 2025-03-06 11:43:10.000000000 +0000
@@ -4328,9 +4328,10 @@
code. <literal>signal</literal> indicates that a service process exited with an uncaught
signal. <literal>core-dump</literal> indicates that a service process exited uncleanly and dumped
core. <literal>watchdog</literal> indicates that a service did not send out watchdog ping messages
- often enough. <literal>start-limit</literal> indicates that a service has been started too frequently
- in a specific time frame (as configured in <varname>StartLimitInterval</varname>,
- <varname>StartLimitBurst</varname>).</para>
+ often enough. <literal>start-limit-hit</literal> indicates that a service has been started too
+ frequently in a specific time frame (as configured in <varname>StartLimitInterval</varname>,
+ <varname>StartLimitBurst</varname>). <literal>oom-kill</literal> indicates that a service was
+ terminated due to an out-of-memory (OOM) situation.</para>
<para><varname>ControlGroup</varname> indicates the control group path the processes of this service
unit are placed in.</para>
diff -Nru systemd-252.33/man/org.freedesktop.timedate1.xml systemd-252.36/man/org.freedesktop.timedate1.xml
--- systemd-252.33/man/org.freedesktop.timedate1.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.timedate1.xml 2025-03-06 11:43:10.000000000 +0000
@@ -148,7 +148,7 @@
over D-Bus. Local clients can access the information directly.</para>
<para>Whenever the <varname>Timezone</varname> and <varname>LocalRTC</varname> settings are changed via
- the daemon, <function>PropertyChanged</function> signals are sent out to which clients can subscribe.
+ the daemon, <function>PropertyChanged</function> signals are sent out to clients which have subscribed.
</para>
<para>Note that this service will not inform you about system time changes. Use
diff -Nru systemd-252.33/man/sd_bus_add_object.xml systemd-252.36/man/sd_bus_add_object.xml
--- systemd-252.33/man/sd_bus_add_object.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/sd_bus_add_object.xml 2025-03-06 11:43:10.000000000 +0000
@@ -593,6 +593,9 @@
<constant>org.freedesktop.systemd1.Privileged</constant> annotation with value
<literal>true</literal> will be shown in introspection data.</para>
+ <para><constant>SD_BUS_VTABLE_UNPRIVILEGED</constant> may not be applied to read-only properties,
+ but read access (to both read-only and writable properties) is always unrestricted.</para>
+
<para>Note that this page describes checks implemented in the D-Bus client. The D-Bus server has an
additional policy that may permit or deny connections, see
"CONFIGURATION FILE" in
diff -Nru systemd-252.33/man/systemd.network.xml systemd-252.36/man/systemd.network.xml
--- systemd-252.33/man/systemd.network.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/systemd.network.xml 2025-03-06 11:43:10.000000000 +0000
@@ -4778,7 +4778,7 @@
EgressUntagged=42
[BridgeVLAN]
-VLAN=100-200
+VLAN=100-299
[BridgeVLAN]
EgressUntagged=300-400</programlisting>
diff -Nru systemd-252.33/man/systemd-stub.xml systemd-252.36/man/systemd-stub.xml
--- systemd-252.33/man/systemd-stub.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/systemd-stub.xml 2025-03-06 11:43:10.000000000 +0000
@@ -164,6 +164,15 @@
measure it as a whole to TPM PCR 4, covering all embedded resources, such as the stub code itself, the
core kernel, the embedded initrd and kernel command line (see above for a full list).</para>
+ <para>Also note that when <command>systemd-stub</command> measures a PE section, it will measure the
+ amount of bytes that the section takes up in memory (<varname>VirtualSize</varname>) and not the amount
+ of bytes that the section takes up on disk (<varname>SizeOfRawData</varname>). This means that if the
+ size in memory is larger than the size on disk, <command>systemd-stub</command> will end up measuring
+ extra zeroes. To avoid this from happening, it is recommended to make sure that the size in memory of
+ each section that is measured by <command>systemd-stub</command> is always smaller than or equal to the
+ size on disk. <command>ukify</command> automatically makes sure this is the case when building UKIs or
+ addons.</para>
+
<para>Also note that the Linux kernel will measure all initrds it receives into TPM PCR 9. This means
every type of initrd will be measured two or three times: the initrd embedded in the kernel image will be
measured to PCR 4, PCR 9 and PCR 11; the initrd synthesized from credentials will be measured to both PCR
diff -Nru systemd-252.33/man/systemd.unit.xml systemd-252.36/man/systemd.unit.xml
--- systemd-252.33/man/systemd.unit.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/systemd.unit.xml 2025-03-06 11:43:10.000000000 +0000
@@ -1723,6 +1723,8 @@
<literal><></literal>, <literal>>=</literal>, <literal>></literal>), and shell-style
wildcard comparisons (<literal>*</literal>, <literal>?</literal>, <literal>[]</literal>) are
supported with the <literal>$=</literal> (match) and <literal>!$=</literal> (non-match).</para>
+
+ <para>If the given key is not found in the file, the match is done against an empty value.</para>
</listitem>
</varlistentry>
diff -Nru systemd-252.33/man/sysupdate.d.xml systemd-252.36/man/sysupdate.d.xml
--- systemd-252.33/man/sysupdate.d.xml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/sysupdate.d.xml 2025-03-06 11:43:10.000000000 +0000
@@ -79,7 +79,7 @@
UUID of 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5 (i.e. the partition type for Verity integrity information
for x86-64 root file systems).</para></listitem>
- <listitem><para>Finally, a file <literal>https://download.example.com/foobarOS_47.efi.xz</literal> (a
+ <listitem><para>Finally, a file <literal>https://download.example.com/foobarOS_47.efi</literal> (a
unified kernel, as per <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader
Specification</ulink> Type #2) should be downloaded, decompressed and written to the ESP file system,
i.e. to <filename>EFI/Linux/foobarOS_47.efi</filename> in the ESP.</para></listitem>
@@ -97,7 +97,7 @@
→ a local, previously empty GPT partition of type 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5, with the label to be
set to <literal>foobarOS_@v_verity</literal>.</para></listitem>
- <listitem><para>A transfer of a file <literal>https://download.example.com/foobarOS_@v.efi.xz</literal>
+ <listitem><para>A transfer of a file <literal>https://download.example.com/foobarOS_@v.efi</literal>
→ a local file <filename>/efi/EFI/Linux/foobarOS_@v.efi</filename>.</para></listitem>
</orderedlist>
@@ -815,7 +815,7 @@
[Source]
Type=url-file
Path=https://download.example.com/
-MatchPattern=foobarOS_@v.efi.xz
+MatchPattern=foobarOS_@v.efi
[Target]
Type=regular-file
@@ -823,7 +823,7 @@
MatchPattern=foobarOS_@v+@l-@d.efi \
foobarOS_@v+@l.efi \
foobarOS_@v.efi
-Mode=0444
+Mode=0644
TriesLeft=3
TriesDone=0
InstancesMax=2</programlisting></para>
@@ -843,7 +843,7 @@
<listitem><para><filename>SHA256SUMS.gpg</filename> – The detached cryptographic signature for the manifest file</para></listitem>
<listitem><para><filename>foobarOS_7_8b8186b1-2b4e-4eb6-ad39-8d4d18d2a8fb.verity.xz</filename> – The Verity image for version 7</para></listitem>
<listitem><para><filename>foobarOS_7_f4d1234f-3ebf-47c4-b31d-4052982f9a2f.root.xz</filename> – The root file system image for version 7</para></listitem>
- <listitem><para><filename>foobarOS_7_efi.xz</filename> – The unified kernel image for version 7</para></listitem>
+ <listitem><para><filename>foobarOS_7.efi</filename> – The unified kernel image for version 7</para></listitem>
</itemizedlist>
<para>For each new OS release a new set of the latter three files would be added, each time with an
diff -Nru systemd-252.33/meson.build systemd-252.36/meson.build
--- systemd-252.33/meson.build 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/meson.build 2025-03-06 11:43:10.000000000 +0000
@@ -876,13 +876,16 @@
nobody_group = get_option('nobody-group')
if not meson.is_cross_build()
- getent_result = run_command('getent', 'passwd', '65534', check : false)
- if getent_result.returncode() == 0
- name = getent_result.stdout().split(':')[0]
- if name != nobody_user
- warning('\n' +
- 'The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) +
- 'Your build will result in an user table setup that is incompatible with the local system.')
+ find_getent_result = find_program('getent', required : false)
+ if find_getent_result.found()
+ getent_result = run_command('getent', 'passwd', '65534', check : false)
+ if getent_result.returncode() == 0
+ name = getent_result.stdout().split(':')[0]
+ if name != nobody_user
+ warning('\n' +
+ 'The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) +
+ 'Your build will result in an user table setup that is incompatible with the local system.')
+ endif
endif
endif
id_result = run_command('id', '-u', nobody_user, check : false)
@@ -895,13 +898,15 @@
endif
endif
- getent_result = run_command('getent', 'group', '65534', check : false)
- if getent_result.returncode() == 0
- name = getent_result.stdout().split(':')[0]
- if name != nobody_group
- warning('\n' +
- 'The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) +
- 'Your build will result in an group table setup that is incompatible with the local system.')
+ if find_getent_result.found()
+ getent_result = run_command('getent', 'group', '65534', check : false)
+ if getent_result.returncode() == 0
+ name = getent_result.stdout().split(':')[0]
+ if name != nobody_group
+ warning('\n' +
+ 'The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) +
+ 'Your build will result in an group table setup that is incompatible with the local system.')
+ endif
endif
endif
id_result = run_command('id', '-g', nobody_group, check : false)
diff -Nru systemd-252.33/mkosi.default.d/centos_epel/10-mkosi.centos_epel systemd-252.36/mkosi.default.d/centos_epel/10-mkosi.centos_epel
--- systemd-252.33/mkosi.default.d/centos_epel/10-mkosi.centos_epel 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/centos_epel/10-mkosi.centos_epel 2025-03-06 11:43:10.000000000 +0000
@@ -77,3 +77,8 @@
pkgconfig(xkbcommon)
python3dist(jinja2)
python3dist(lxml)
+
+Environment=
+ # The kernel versions in CentOS Stream 9 doesn't support orphan_file, but later versions of
+ # mkfs.ext4 enabled it by default, so we disable it explicitly.
+ Environment=SYSTEMD_REPART_MKFS_OPTIONS_EXT4="-O ^orphan_file"
diff -Nru systemd-252.33/mkosi.default.d/debian/10-mkosi.debian systemd-252.36/mkosi.default.d/debian/10-mkosi.debian
--- systemd-252.33/mkosi.default.d/debian/10-mkosi.debian 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/debian/10-mkosi.debian 2025-03-06 11:43:10.000000000 +0000
@@ -18,7 +18,9 @@
iproute2
isc-dhcp-server
libbpf1
+ libcryptsetup12
libfido2-1
+ libgcrypt20
libglib2.0-0
libgnutls30
libidn2-0
@@ -29,6 +31,7 @@
libqrencode4
libip4tc2
libtss2-dev # Use the -dev package to avoid churn in updating version numbers
+ login
netcat-openbsd
polkitd
procps
diff -Nru systemd-252.33/mkosi.default.d/opensuse/10-mkosi.opensuse systemd-252.36/mkosi.default.d/opensuse/10-mkosi.opensuse
--- systemd-252.33/mkosi.default.d/opensuse/10-mkosi.opensuse 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/opensuse/10-mkosi.opensuse 2025-03-06 11:43:10.000000000 +0000
@@ -26,6 +26,7 @@
libqrencode4
libseccomp2
libxkbcommon0
+ libz1
pam
tpm2-0-tss
vim
diff -Nru systemd-252.33/mkosi.default.d/ubuntu/10-mkosi.ubuntu systemd-252.36/mkosi.default.d/ubuntu/10-mkosi.ubuntu
--- systemd-252.33/mkosi.default.d/ubuntu/10-mkosi.ubuntu 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/ubuntu/10-mkosi.ubuntu 2025-03-06 11:43:10.000000000 +0000
@@ -26,6 +26,7 @@
libtss2-dev # Use the -dev package to avoid churn in updating version numbers
linux-tools-common
linux-tools-generic
+ login
netcat-openbsd
polkitd
procps
diff -Nru systemd-252.33/rules.d/70-uaccess.rules.in systemd-252.36/rules.d/70-uaccess.rules.in
--- systemd-252.33/rules.d/70-uaccess.rules.in 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/rules.d/70-uaccess.rules.in 2025-03-06 11:43:10.000000000 +0000
@@ -97,6 +97,10 @@
# This also allows accessing HID devices with the libusb backend of hidapi.
SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
+# USB and Bluetooth controllable lights
+SUBSYSTEM=="hidraw", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess"
+SUBSYSTEM=="usb", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess"
+
# Hardware wallets
SUBSYSTEM=="usb", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"
SUBSYSTEM=="hidraw", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"
diff -Nru systemd-252.33/.semaphore/semaphore.yml systemd-252.36/.semaphore/semaphore.yml
--- systemd-252.33/.semaphore/semaphore.yml 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.semaphore/semaphore.yml 2025-03-06 11:43:10.000000000 +0000
@@ -15,7 +15,7 @@
when: "true"
execution_time_limit:
- hours: 1
+ hours: 2
blocks:
- name: "Setup & test"
diff -Nru systemd-252.33/src/basic/efivars.c systemd-252.36/src/basic/efivars.c
--- systemd-252.33/src/basic/efivars.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/efivars.c 2025-03-06 11:43:10.000000000 +0000
@@ -96,6 +96,22 @@
(void) usleep(EFI_RETRY_DELAY);
}
+ /* Unfortunately kernel reports EOF if there's an inconsistency between efivarfs var list
+ * and what's actually stored in firmware, c.f. #34304. A zero size env var is not allowed in
+ * efi and hence the variable doesn't really exist in the backing store as long as it is zero
+ * sized, and the kernel calls this "uncommitted". Hence we translate EOF back to ENOENT here,
+ * as with kernel behavior before
+ * https://github.com/torvalds/linux/commit/3fab70c165795431f00ddf9be8b84ddd07bd1f8f
+ *
+ * If the kernel changes behaviour (to flush dentries on resume), we can drop
+ * this at some point in the future. But note that the commit is 11
+ * years old at this point so we'll need to deal with the current behaviour for
+ * a long time.
+ */
+ if (n == 0)
+ return log_debug_errno(SYNTHETIC_ERRNO(ENOENT),
+ "EFI variable %s is uncommitted", p);
+
if (n != sizeof(a))
return log_debug_errno(SYNTHETIC_ERRNO(EIO),
"Read %zi bytes from EFI variable %s, expected %zu.", n, p, sizeof(a));
diff -Nru systemd-252.33/src/basic/linux/input-event-codes.h systemd-252.36/src/basic/linux/input-event-codes.h
--- systemd-252.33/src/basic/linux/input-event-codes.h 1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/src/basic/linux/input-event-codes.h 2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,980 @@
+/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
+/*
+ * Input event codes
+ *
+ * *** IMPORTANT ***
+ * This file is not only included from C-code but also from devicetree source
+ * files. As such this file MUST only contain comments and defines.
+ *
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_EVENT_CODES_H
+#define _INPUT_EVENT_CODES_H
+
+/*
+ * Device properties and quirks
+ */
+
+#define INPUT_PROP_POINTER 0x00 /* needs a pointer */
+#define INPUT_PROP_DIRECT 0x01 /* direct input devices */
+#define INPUT_PROP_BUTTONPAD 0x02 /* has button(s) under pad */
+#define INPUT_PROP_SEMI_MT 0x03 /* touch rectangle only */
+#define INPUT_PROP_TOPBUTTONPAD 0x04 /* softbuttons at top of pad */
+#define INPUT_PROP_POINTING_STICK 0x05 /* is a pointing stick */
+#define INPUT_PROP_ACCELEROMETER 0x06 /* has accelerometer */
+
+#define INPUT_PROP_MAX 0x1f
+#define INPUT_PROP_CNT (INPUT_PROP_MAX + 1)
+
+/*
+ * Event types
+ */
+
+#define EV_SYN 0x00
+#define EV_KEY 0x01
+#define EV_REL 0x02
+#define EV_ABS 0x03
+#define EV_MSC 0x04
+#define EV_SW 0x05
+#define EV_LED 0x11
+#define EV_SND 0x12
+#define EV_REP 0x14
+#define EV_FF 0x15
+#define EV_PWR 0x16
+#define EV_FF_STATUS 0x17
+#define EV_MAX 0x1f
+#define EV_CNT (EV_MAX+1)
+
+/*
+ * Synchronization events.
+ */
+
+#define SYN_REPORT 0
+#define SYN_CONFIG 1
+#define SYN_MT_REPORT 2
+#define SYN_DROPPED 3
+#define SYN_MAX 0xf
+#define SYN_CNT (SYN_MAX+1)
+
+/*
+ * Keys and buttons
+ *
+ * Most of the keys/buttons are modeled after USB HUT 1.12
+ * (see http://www.usb.org/developers/hidpage).
+ * Abbreviations in the comments:
+ * AC - Application Control
+ * AL - Application Launch Button
+ * SC - System Control
+ */
+
+#define KEY_RESERVED 0
+#define KEY_ESC 1
+#define KEY_1 2
+#define KEY_2 3
+#define KEY_3 4
+#define KEY_4 5
+#define KEY_5 6
+#define KEY_6 7
+#define KEY_7 8
+#define KEY_8 9
+#define KEY_9 10
+#define KEY_0 11
+#define KEY_MINUS 12
+#define KEY_EQUAL 13
+#define KEY_BACKSPACE 14
+#define KEY_TAB 15
+#define KEY_Q 16
+#define KEY_W 17
+#define KEY_E 18
+#define KEY_R 19
+#define KEY_T 20
+#define KEY_Y 21
+#define KEY_U 22
+#define KEY_I 23
+#define KEY_O 24
+#define KEY_P 25
+#define KEY_LEFTBRACE 26
+#define KEY_RIGHTBRACE 27
+#define KEY_ENTER 28
+#define KEY_LEFTCTRL 29
+#define KEY_A 30
+#define KEY_S 31
+#define KEY_D 32
+#define KEY_F 33
+#define KEY_G 34
+#define KEY_H 35
+#define KEY_J 36
+#define KEY_K 37
+#define KEY_L 38
+#define KEY_SEMICOLON 39
+#define KEY_APOSTROPHE 40
+#define KEY_GRAVE 41
+#define KEY_LEFTSHIFT 42
+#define KEY_BACKSLASH 43
+#define KEY_Z 44
+#define KEY_X 45
+#define KEY_C 46
+#define KEY_V 47
+#define KEY_B 48
+#define KEY_N 49
+#define KEY_M 50
+#define KEY_COMMA 51
+#define KEY_DOT 52
+#define KEY_SLASH 53
+#define KEY_RIGHTSHIFT 54
+#define KEY_KPASTERISK 55
+#define KEY_LEFTALT 56
+#define KEY_SPACE 57
+#define KEY_CAPSLOCK 58
+#define KEY_F1 59
+#define KEY_F2 60
+#define KEY_F3 61
+#define KEY_F4 62
+#define KEY_F5 63
+#define KEY_F6 64
+#define KEY_F7 65
+#define KEY_F8 66
+#define KEY_F9 67
+#define KEY_F10 68
+#define KEY_NUMLOCK 69
+#define KEY_SCROLLLOCK 70
+#define KEY_KP7 71
+#define KEY_KP8 72
+#define KEY_KP9 73
+#define KEY_KPMINUS 74
+#define KEY_KP4 75
+#define KEY_KP5 76
+#define KEY_KP6 77
+#define KEY_KPPLUS 78
+#define KEY_KP1 79
+#define KEY_KP2 80
+#define KEY_KP3 81
+#define KEY_KP0 82
+#define KEY_KPDOT 83
+
+#define KEY_ZENKAKUHANKAKU 85
+#define KEY_102ND 86
+#define KEY_F11 87
+#define KEY_F12 88
+#define KEY_RO 89
+#define KEY_KATAKANA 90
+#define KEY_HIRAGANA 91
+#define KEY_HENKAN 92
+#define KEY_KATAKANAHIRAGANA 93
+#define KEY_MUHENKAN 94
+#define KEY_KPJPCOMMA 95
+#define KEY_KPENTER 96
+#define KEY_RIGHTCTRL 97
+#define KEY_KPSLASH 98
+#define KEY_SYSRQ 99
+#define KEY_RIGHTALT 100
+#define KEY_LINEFEED 101
+#define KEY_HOME 102
+#define KEY_UP 103
+#define KEY_PAGEUP 104
+#define KEY_LEFT 105
+#define KEY_RIGHT 106
+#define KEY_END 107
+#define KEY_DOWN 108
+#define KEY_PAGEDOWN 109
+#define KEY_INSERT 110
+#define KEY_DELETE 111
+#define KEY_MACRO 112
+#define KEY_MUTE 113
+#define KEY_VOLUMEDOWN 114
+#define KEY_VOLUMEUP 115
+#define KEY_POWER 116 /* SC System Power Down */
+#define KEY_KPEQUAL 117
+#define KEY_KPPLUSMINUS 118
+#define KEY_PAUSE 119
+#define KEY_SCALE 120 /* AL Compiz Scale (Expose) */
+
+#define KEY_KPCOMMA 121
+#define KEY_HANGEUL 122
+#define KEY_HANGUEL KEY_HANGEUL
+#define KEY_HANJA 123
+#define KEY_YEN 124
+#define KEY_LEFTMETA 125
+#define KEY_RIGHTMETA 126
+#define KEY_COMPOSE 127
+
+#define KEY_STOP 128 /* AC Stop */
+#define KEY_AGAIN 129
+#define KEY_PROPS 130 /* AC Properties */
+#define KEY_UNDO 131 /* AC Undo */
+#define KEY_FRONT 132
+#define KEY_COPY 133 /* AC Copy */
+#define KEY_OPEN 134 /* AC Open */
+#define KEY_PASTE 135 /* AC Paste */
+#define KEY_FIND 136 /* AC Search */
+#define KEY_CUT 137 /* AC Cut */
+#define KEY_HELP 138 /* AL Integrated Help Center */
+#define KEY_MENU 139 /* Menu (show menu) */
+#define KEY_CALC 140 /* AL Calculator */
+#define KEY_SETUP 141
+#define KEY_SLEEP 142 /* SC System Sleep */
+#define KEY_WAKEUP 143 /* System Wake Up */
+#define KEY_FILE 144 /* AL Local Machine Browser */
+#define KEY_SENDFILE 145
+#define KEY_DELETEFILE 146
+#define KEY_XFER 147
+#define KEY_PROG1 148
+#define KEY_PROG2 149
+#define KEY_WWW 150 /* AL Internet Browser */
+#define KEY_MSDOS 151
+#define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */
+#define KEY_SCREENLOCK KEY_COFFEE
+#define KEY_ROTATE_DISPLAY 153 /* Display orientation for e.g. tablets */
+#define KEY_DIRECTION KEY_ROTATE_DISPLAY
+#define KEY_CYCLEWINDOWS 154
+#define KEY_MAIL 155
+#define KEY_BOOKMARKS 156 /* AC Bookmarks */
+#define KEY_COMPUTER 157
+#define KEY_BACK 158 /* AC Back */
+#define KEY_FORWARD 159 /* AC Forward */
+#define KEY_CLOSECD 160
+#define KEY_EJECTCD 161
+#define KEY_EJECTCLOSECD 162
+#define KEY_NEXTSONG 163
+#define KEY_PLAYPAUSE 164
+#define KEY_PREVIOUSSONG 165
+#define KEY_STOPCD 166
+#define KEY_RECORD 167
+#define KEY_REWIND 168
+#define KEY_PHONE 169 /* Media Select Telephone */
+#define KEY_ISO 170
+#define KEY_CONFIG 171 /* AL Consumer Control Configuration */
+#define KEY_HOMEPAGE 172 /* AC Home */
+#define KEY_REFRESH 173 /* AC Refresh */
+#define KEY_EXIT 174 /* AC Exit */
+#define KEY_MOVE 175
+#define KEY_EDIT 176
+#define KEY_SCROLLUP 177
+#define KEY_SCROLLDOWN 178
+#define KEY_KPLEFTPAREN 179
+#define KEY_KPRIGHTPAREN 180
+#define KEY_NEW 181 /* AC New */
+#define KEY_REDO 182 /* AC Redo/Repeat */
+
+#define KEY_F13 183
+#define KEY_F14 184
+#define KEY_F15 185
+#define KEY_F16 186
+#define KEY_F17 187
+#define KEY_F18 188
+#define KEY_F19 189
+#define KEY_F20 190
+#define KEY_F21 191
+#define KEY_F22 192
+#define KEY_F23 193
+#define KEY_F24 194
+
+#define KEY_PLAYCD 200
+#define KEY_PAUSECD 201
+#define KEY_PROG3 202
+#define KEY_PROG4 203
+#define KEY_ALL_APPLICATIONS 204 /* AC Desktop Show All Applications */
+#define KEY_DASHBOARD KEY_ALL_APPLICATIONS
+#define KEY_SUSPEND 205
+#define KEY_CLOSE 206 /* AC Close */
+#define KEY_PLAY 207
+#define KEY_FASTFORWARD 208
+#define KEY_BASSBOOST 209
+#define KEY_PRINT 210 /* AC Print */
+#define KEY_HP 211
+#define KEY_CAMERA 212
+#define KEY_SOUND 213
+#define KEY_QUESTION 214
+#define KEY_EMAIL 215
+#define KEY_CHAT 216
+#define KEY_SEARCH 217
+#define KEY_CONNECT 218
+#define KEY_FINANCE 219 /* AL Checkbook/Finance */
+#define KEY_SPORT 220
+#define KEY_SHOP 221
+#define KEY_ALTERASE 222
+#define KEY_CANCEL 223 /* AC Cancel */
+#define KEY_BRIGHTNESSDOWN 224
+#define KEY_BRIGHTNESSUP 225
+#define KEY_MEDIA 226
+
+#define KEY_SWITCHVIDEOMODE 227 /* Cycle between available video
+ outputs (Monitor/LCD/TV-out/etc) */
+#define KEY_KBDILLUMTOGGLE 228
+#define KEY_KBDILLUMDOWN 229
+#define KEY_KBDILLUMUP 230
+
+#define KEY_SEND 231 /* AC Send */
+#define KEY_REPLY 232 /* AC Reply */
+#define KEY_FORWARDMAIL 233 /* AC Forward Msg */
+#define KEY_SAVE 234 /* AC Save */
+#define KEY_DOCUMENTS 235
+
+#define KEY_BATTERY 236
+
+#define KEY_BLUETOOTH 237
+#define KEY_WLAN 238
+#define KEY_UWB 239
+
+#define KEY_UNKNOWN 240
+
+#define KEY_VIDEO_NEXT 241 /* drive next video source */
+#define KEY_VIDEO_PREV 242 /* drive previous video source */
+#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */
+#define KEY_BRIGHTNESS_AUTO 244 /* Set Auto Brightness: manual
+ brightness control is off,
+ rely on ambient */
+#define KEY_BRIGHTNESS_ZERO KEY_BRIGHTNESS_AUTO
+#define KEY_DISPLAY_OFF 245 /* display device to off state */
+
+#define KEY_WWAN 246 /* Wireless WAN (LTE, UMTS, GSM, etc.) */
+#define KEY_WIMAX KEY_WWAN
+#define KEY_RFKILL 247 /* Key that controls all radios */
+
+#define KEY_MICMUTE 248 /* Mute / unmute the microphone */
+
+/* Code 255 is reserved for special needs of AT keyboard driver */
+
+#define BTN_MISC 0x100
+#define BTN_0 0x100
+#define BTN_1 0x101
+#define BTN_2 0x102
+#define BTN_3 0x103
+#define BTN_4 0x104
+#define BTN_5 0x105
+#define BTN_6 0x106
+#define BTN_7 0x107
+#define BTN_8 0x108
+#define BTN_9 0x109
+
+#define BTN_MOUSE 0x110
+#define BTN_LEFT 0x110
+#define BTN_RIGHT 0x111
+#define BTN_MIDDLE 0x112
+#define BTN_SIDE 0x113
+#define BTN_EXTRA 0x114
+#define BTN_FORWARD 0x115
+#define BTN_BACK 0x116
+#define BTN_TASK 0x117
+
+#define BTN_JOYSTICK 0x120
+#define BTN_TRIGGER 0x120
+#define BTN_THUMB 0x121
+#define BTN_THUMB2 0x122
+#define BTN_TOP 0x123
+#define BTN_TOP2 0x124
+#define BTN_PINKIE 0x125
+#define BTN_BASE 0x126
+#define BTN_BASE2 0x127
+#define BTN_BASE3 0x128
+#define BTN_BASE4 0x129
+#define BTN_BASE5 0x12a
+#define BTN_BASE6 0x12b
+#define BTN_DEAD 0x12f
+
+#define BTN_GAMEPAD 0x130
+#define BTN_SOUTH 0x130
+#define BTN_A BTN_SOUTH
+#define BTN_EAST 0x131
+#define BTN_B BTN_EAST
+#define BTN_C 0x132
+#define BTN_NORTH 0x133
+#define BTN_X BTN_NORTH
+#define BTN_WEST 0x134
+#define BTN_Y BTN_WEST
+#define BTN_Z 0x135
+#define BTN_TL 0x136
+#define BTN_TR 0x137
+#define BTN_TL2 0x138
+#define BTN_TR2 0x139
+#define BTN_SELECT 0x13a
+#define BTN_START 0x13b
+#define BTN_MODE 0x13c
+#define BTN_THUMBL 0x13d
+#define BTN_THUMBR 0x13e
+
+#define BTN_DIGI 0x140
+#define BTN_TOOL_PEN 0x140
+#define BTN_TOOL_RUBBER 0x141
+#define BTN_TOOL_BRUSH 0x142
+#define BTN_TOOL_PENCIL 0x143
+#define BTN_TOOL_AIRBRUSH 0x144
+#define BTN_TOOL_FINGER 0x145
+#define BTN_TOOL_MOUSE 0x146
+#define BTN_TOOL_LENS 0x147
+#define BTN_TOOL_QUINTTAP 0x148 /* Five fingers on trackpad */
+#define BTN_STYLUS3 0x149
+#define BTN_TOUCH 0x14a
+#define BTN_STYLUS 0x14b
+#define BTN_STYLUS2 0x14c
+#define BTN_TOOL_DOUBLETAP 0x14d
+#define BTN_TOOL_TRIPLETAP 0x14e
+#define BTN_TOOL_QUADTAP 0x14f /* Four fingers on trackpad */
+
+#define BTN_WHEEL 0x150
+#define BTN_GEAR_DOWN 0x150
+#define BTN_GEAR_UP 0x151
+
+#define KEY_OK 0x160
+#define KEY_SELECT 0x161
+#define KEY_GOTO 0x162
+#define KEY_CLEAR 0x163
+#define KEY_POWER2 0x164
+#define KEY_OPTION 0x165
+#define KEY_INFO 0x166 /* AL OEM Features/Tips/Tutorial */
+#define KEY_TIME 0x167
+#define KEY_VENDOR 0x168
+#define KEY_ARCHIVE 0x169
+#define KEY_PROGRAM 0x16a /* Media Select Program Guide */
+#define KEY_CHANNEL 0x16b
+#define KEY_FAVORITES 0x16c
+#define KEY_EPG 0x16d
+#define KEY_PVR 0x16e /* Media Select Home */
+#define KEY_MHP 0x16f
+#define KEY_LANGUAGE 0x170
+#define KEY_TITLE 0x171
+#define KEY_SUBTITLE 0x172
+#define KEY_ANGLE 0x173
+#define KEY_FULL_SCREEN 0x174 /* AC View Toggle */
+#define KEY_ZOOM KEY_FULL_SCREEN
+#define KEY_MODE 0x175
+#define KEY_KEYBOARD 0x176
+#define KEY_ASPECT_RATIO 0x177 /* HUTRR37: Aspect */
+#define KEY_SCREEN KEY_ASPECT_RATIO
+#define KEY_PC 0x178 /* Media Select Computer */
+#define KEY_TV 0x179 /* Media Select TV */
+#define KEY_TV2 0x17a /* Media Select Cable */
+#define KEY_VCR 0x17b /* Media Select VCR */
+#define KEY_VCR2 0x17c /* VCR Plus */
+#define KEY_SAT 0x17d /* Media Select Satellite */
+#define KEY_SAT2 0x17e
+#define KEY_CD 0x17f /* Media Select CD */
+#define KEY_TAPE 0x180 /* Media Select Tape */
+#define KEY_RADIO 0x181
+#define KEY_TUNER 0x182 /* Media Select Tuner */
+#define KEY_PLAYER 0x183
+#define KEY_TEXT 0x184
+#define KEY_DVD 0x185 /* Media Select DVD */
+#define KEY_AUX 0x186
+#define KEY_MP3 0x187
+#define KEY_AUDIO 0x188 /* AL Audio Browser */
+#define KEY_VIDEO 0x189 /* AL Movie Browser */
+#define KEY_DIRECTORY 0x18a
+#define KEY_LIST 0x18b
+#define KEY_MEMO 0x18c /* Media Select Messages */
+#define KEY_CALENDAR 0x18d
+#define KEY_RED 0x18e
+#define KEY_GREEN 0x18f
+#define KEY_YELLOW 0x190
+#define KEY_BLUE 0x191
+#define KEY_CHANNELUP 0x192 /* Channel Increment */
+#define KEY_CHANNELDOWN 0x193 /* Channel Decrement */
+#define KEY_FIRST 0x194
+#define KEY_LAST 0x195 /* Recall Last */
+#define KEY_AB 0x196
+#define KEY_NEXT 0x197
+#define KEY_RESTART 0x198
+#define KEY_SLOW 0x199
+#define KEY_SHUFFLE 0x19a
+#define KEY_BREAK 0x19b
+#define KEY_PREVIOUS 0x19c
+#define KEY_DIGITS 0x19d
+#define KEY_TEEN 0x19e
+#define KEY_TWEN 0x19f
+#define KEY_VIDEOPHONE 0x1a0 /* Media Select Video Phone */
+#define KEY_GAMES 0x1a1 /* Media Select Games */
+#define KEY_ZOOMIN 0x1a2 /* AC Zoom In */
+#define KEY_ZOOMOUT 0x1a3 /* AC Zoom Out */
+#define KEY_ZOOMRESET 0x1a4 /* AC Zoom */
+#define KEY_WORDPROCESSOR 0x1a5 /* AL Word Processor */
+#define KEY_EDITOR 0x1a6 /* AL Text Editor */
+#define KEY_SPREADSHEET 0x1a7 /* AL Spreadsheet */
+#define KEY_GRAPHICSEDITOR 0x1a8 /* AL Graphics Editor */
+#define KEY_PRESENTATION 0x1a9 /* AL Presentation App */
+#define KEY_DATABASE 0x1aa /* AL Database App */
+#define KEY_NEWS 0x1ab /* AL Newsreader */
+#define KEY_VOICEMAIL 0x1ac /* AL Voicemail */
+#define KEY_ADDRESSBOOK 0x1ad /* AL Contacts/Address Book */
+#define KEY_MESSENGER 0x1ae /* AL Instant Messaging */
+#define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */
+#define KEY_BRIGHTNESS_TOGGLE KEY_DISPLAYTOGGLE
+#define KEY_SPELLCHECK 0x1b0 /* AL Spell Check */
+#define KEY_LOGOFF 0x1b1 /* AL Logoff */
+
+#define KEY_DOLLAR 0x1b2
+#define KEY_EURO 0x1b3
+
+#define KEY_FRAMEBACK 0x1b4 /* Consumer - transport controls */
+#define KEY_FRAMEFORWARD 0x1b5
+#define KEY_CONTEXT_MENU 0x1b6 /* GenDesc - system context menu */
+#define KEY_MEDIA_REPEAT 0x1b7 /* Consumer - transport control */
+#define KEY_10CHANNELSUP 0x1b8 /* 10 channels up (10+) */
+#define KEY_10CHANNELSDOWN 0x1b9 /* 10 channels down (10-) */
+#define KEY_IMAGES 0x1ba /* AL Image Browser */
+#define KEY_NOTIFICATION_CENTER 0x1bc /* Show/hide the notification center */
+#define KEY_PICKUP_PHONE 0x1bd /* Answer incoming call */
+#define KEY_HANGUP_PHONE 0x1be /* Decline incoming call */
+
+#define KEY_DEL_EOL 0x1c0
+#define KEY_DEL_EOS 0x1c1
+#define KEY_INS_LINE 0x1c2
+#define KEY_DEL_LINE 0x1c3
+
+#define KEY_FN 0x1d0
+#define KEY_FN_ESC 0x1d1
+#define KEY_FN_F1 0x1d2
+#define KEY_FN_F2 0x1d3
+#define KEY_FN_F3 0x1d4
+#define KEY_FN_F4 0x1d5
+#define KEY_FN_F5 0x1d6
+#define KEY_FN_F6 0x1d7
+#define KEY_FN_F7 0x1d8
+#define KEY_FN_F8 0x1d9
+#define KEY_FN_F9 0x1da
+#define KEY_FN_F10 0x1db
+#define KEY_FN_F11 0x1dc
+#define KEY_FN_F12 0x1dd
+#define KEY_FN_1 0x1de
+#define KEY_FN_2 0x1df
+#define KEY_FN_D 0x1e0
+#define KEY_FN_E 0x1e1
+#define KEY_FN_F 0x1e2
+#define KEY_FN_S 0x1e3
+#define KEY_FN_B 0x1e4
+#define KEY_FN_RIGHT_SHIFT 0x1e5
+
+#define KEY_BRL_DOT1 0x1f1
+#define KEY_BRL_DOT2 0x1f2
+#define KEY_BRL_DOT3 0x1f3
+#define KEY_BRL_DOT4 0x1f4
+#define KEY_BRL_DOT5 0x1f5
+#define KEY_BRL_DOT6 0x1f6
+#define KEY_BRL_DOT7 0x1f7
+#define KEY_BRL_DOT8 0x1f8
+#define KEY_BRL_DOT9 0x1f9
+#define KEY_BRL_DOT10 0x1fa
+
+#define KEY_NUMERIC_0 0x200 /* used by phones, remote controls, */
+#define KEY_NUMERIC_1 0x201 /* and other keypads */
+#define KEY_NUMERIC_2 0x202
+#define KEY_NUMERIC_3 0x203
+#define KEY_NUMERIC_4 0x204
+#define KEY_NUMERIC_5 0x205
+#define KEY_NUMERIC_6 0x206
+#define KEY_NUMERIC_7 0x207
+#define KEY_NUMERIC_8 0x208
+#define KEY_NUMERIC_9 0x209
+#define KEY_NUMERIC_STAR 0x20a
+#define KEY_NUMERIC_POUND 0x20b
+#define KEY_NUMERIC_A 0x20c /* Phone key A - HUT Telephony 0xb9 */
+#define KEY_NUMERIC_B 0x20d
+#define KEY_NUMERIC_C 0x20e
+#define KEY_NUMERIC_D 0x20f
+
+#define KEY_CAMERA_FOCUS 0x210
+#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */
+
+#define KEY_TOUCHPAD_TOGGLE 0x212 /* Request switch touchpad on or off */
+#define KEY_TOUCHPAD_ON 0x213
+#define KEY_TOUCHPAD_OFF 0x214
+
+#define KEY_CAMERA_ZOOMIN 0x215
+#define KEY_CAMERA_ZOOMOUT 0x216
+#define KEY_CAMERA_UP 0x217
+#define KEY_CAMERA_DOWN 0x218
+#define KEY_CAMERA_LEFT 0x219
+#define KEY_CAMERA_RIGHT 0x21a
+
+#define KEY_ATTENDANT_ON 0x21b
+#define KEY_ATTENDANT_OFF 0x21c
+#define KEY_ATTENDANT_TOGGLE 0x21d /* Attendant call on or off */
+#define KEY_LIGHTS_TOGGLE 0x21e /* Reading light on or off */
+
+#define BTN_DPAD_UP 0x220
+#define BTN_DPAD_DOWN 0x221
+#define BTN_DPAD_LEFT 0x222
+#define BTN_DPAD_RIGHT 0x223
+
+#define KEY_ALS_TOGGLE 0x230 /* Ambient light sensor */
+#define KEY_ROTATE_LOCK_TOGGLE 0x231 /* Display rotation lock */
+#define KEY_REFRESH_RATE_TOGGLE 0x232 /* Display refresh rate toggle */
+
+#define KEY_BUTTONCONFIG 0x240 /* AL Button Configuration */
+#define KEY_TASKMANAGER 0x241 /* AL Task/Project Manager */
+#define KEY_JOURNAL 0x242 /* AL Log/Journal/Timecard */
+#define KEY_CONTROLPANEL 0x243 /* AL Control Panel */
+#define KEY_APPSELECT 0x244 /* AL Select Task/Application */
+#define KEY_SCREENSAVER 0x245 /* AL Screen Saver */
+#define KEY_VOICECOMMAND 0x246 /* Listening Voice Command */
+#define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */
+#define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */
+#define KEY_EMOJI_PICKER 0x249 /* Show/hide emoji picker (HUTRR101) */
+#define KEY_DICTATE 0x24a /* Start or Stop Voice Dictation Session (HUTRR99) */
+#define KEY_CAMERA_ACCESS_ENABLE 0x24b /* Enables programmatic access to camera devices. (HUTRR72) */
+#define KEY_CAMERA_ACCESS_DISABLE 0x24c /* Disables programmatic access to camera devices. (HUTRR72) */
+#define KEY_CAMERA_ACCESS_TOGGLE 0x24d /* Toggles the current state of the camera access control. (HUTRR72) */
+#define KEY_ACCESSIBILITY 0x24e /* Toggles the system bound accessibility UI/command (HUTRR116) */
+#define KEY_DO_NOT_DISTURB 0x24f /* Toggles the system-wide "Do Not Disturb" control (HUTRR94)*/
+
+#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
+#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
+
+#define KEY_KBDINPUTASSIST_PREV 0x260
+#define KEY_KBDINPUTASSIST_NEXT 0x261
+#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
+#define KEY_KBDINPUTASSIST_NEXTGROUP 0x263
+#define KEY_KBDINPUTASSIST_ACCEPT 0x264
+#define KEY_KBDINPUTASSIST_CANCEL 0x265
+
+/* Diagonal movement keys */
+#define KEY_RIGHT_UP 0x266
+#define KEY_RIGHT_DOWN 0x267
+#define KEY_LEFT_UP 0x268
+#define KEY_LEFT_DOWN 0x269
+
+#define KEY_ROOT_MENU 0x26a /* Show Device's Root Menu */
+/* Show Top Menu of the Media (e.g. DVD) */
+#define KEY_MEDIA_TOP_MENU 0x26b
+#define KEY_NUMERIC_11 0x26c
+#define KEY_NUMERIC_12 0x26d
+/*
+ * Toggle Audio Description: refers to an audio service that helps blind and
+ * visually impaired consumers understand the action in a program. Note: in
+ * some countries this is referred to as "Video Description".
+ */
+#define KEY_AUDIO_DESC 0x26e
+#define KEY_3D_MODE 0x26f
+#define KEY_NEXT_FAVORITE 0x270
+#define KEY_STOP_RECORD 0x271
+#define KEY_PAUSE_RECORD 0x272
+#define KEY_VOD 0x273 /* Video on Demand */
+#define KEY_UNMUTE 0x274
+#define KEY_FASTREVERSE 0x275
+#define KEY_SLOWREVERSE 0x276
+/*
+ * Control a data application associated with the currently viewed channel,
+ * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
+ */
+#define KEY_DATA 0x277
+#define KEY_ONSCREEN_KEYBOARD 0x278
+/* Electronic privacy screen control */
+#define KEY_PRIVACY_SCREEN_TOGGLE 0x279
+
+/* Select an area of screen to be copied */
+#define KEY_SELECTIVE_SCREENSHOT 0x27a
+
+/* Move the focus to the next or previous user controllable element within a UI container */
+#define KEY_NEXT_ELEMENT 0x27b
+#define KEY_PREVIOUS_ELEMENT 0x27c
+
+/* Toggle Autopilot engagement */
+#define KEY_AUTOPILOT_ENGAGE_TOGGLE 0x27d
+
+/* Shortcut Keys */
+#define KEY_MARK_WAYPOINT 0x27e
+#define KEY_SOS 0x27f
+#define KEY_NAV_CHART 0x280
+#define KEY_FISHING_CHART 0x281
+#define KEY_SINGLE_RANGE_RADAR 0x282
+#define KEY_DUAL_RANGE_RADAR 0x283
+#define KEY_RADAR_OVERLAY 0x284
+#define KEY_TRADITIONAL_SONAR 0x285
+#define KEY_CLEARVU_SONAR 0x286
+#define KEY_SIDEVU_SONAR 0x287
+#define KEY_NAV_INFO 0x288
+#define KEY_BRIGHTNESS_MENU 0x289
+
+/*
+ * Some keyboards have keys which do not have a defined meaning, these keys
+ * are intended to be programmed / bound to macros by the user. For most
+ * keyboards with these macro-keys the key-sequence to inject, or action to
+ * take, is all handled by software on the host side. So from the kernel's
+ * point of view these are just normal keys.
+ *
+ * The KEY_MACRO# codes below are intended for such keys, which may be labeled
+ * e.g. G1-G18, or S1 - S30. The KEY_MACRO# codes MUST NOT be used for keys
+ * where the marking on the key does indicate a defined meaning / purpose.
+ *
+ * The KEY_MACRO# codes MUST also NOT be used as fallback for when no existing
+ * KEY_FOO define matches the marking / purpose. In this case a new KEY_FOO
+ * define MUST be added.
+ */
+#define KEY_MACRO1 0x290
+#define KEY_MACRO2 0x291
+#define KEY_MACRO3 0x292
+#define KEY_MACRO4 0x293
+#define KEY_MACRO5 0x294
+#define KEY_MACRO6 0x295
+#define KEY_MACRO7 0x296
+#define KEY_MACRO8 0x297
+#define KEY_MACRO9 0x298
+#define KEY_MACRO10 0x299
+#define KEY_MACRO11 0x29a
+#define KEY_MACRO12 0x29b
+#define KEY_MACRO13 0x29c
+#define KEY_MACRO14 0x29d
+#define KEY_MACRO15 0x29e
+#define KEY_MACRO16 0x29f
+#define KEY_MACRO17 0x2a0
+#define KEY_MACRO18 0x2a1
+#define KEY_MACRO19 0x2a2
+#define KEY_MACRO20 0x2a3
+#define KEY_MACRO21 0x2a4
+#define KEY_MACRO22 0x2a5
+#define KEY_MACRO23 0x2a6
+#define KEY_MACRO24 0x2a7
+#define KEY_MACRO25 0x2a8
+#define KEY_MACRO26 0x2a9
+#define KEY_MACRO27 0x2aa
+#define KEY_MACRO28 0x2ab
+#define KEY_MACRO29 0x2ac
+#define KEY_MACRO30 0x2ad
+
+/*
+ * Some keyboards with the macro-keys described above have some extra keys
+ * for controlling the host-side software responsible for the macro handling:
+ * -A macro recording start/stop key. Note that not all keyboards which emit
+ * KEY_MACRO_RECORD_START will also emit KEY_MACRO_RECORD_STOP if
+ * KEY_MACRO_RECORD_STOP is not advertised, then KEY_MACRO_RECORD_START
+ * should be interpreted as a recording start/stop toggle;
+ * -Keys for switching between different macro (pre)sets, either a key for
+ * cycling through the configured presets or keys to directly select a preset.
+ */
+#define KEY_MACRO_RECORD_START 0x2b0
+#define KEY_MACRO_RECORD_STOP 0x2b1
+#define KEY_MACRO_PRESET_CYCLE 0x2b2
+#define KEY_MACRO_PRESET1 0x2b3
+#define KEY_MACRO_PRESET2 0x2b4
+#define KEY_MACRO_PRESET3 0x2b5
+
+/*
+ * Some keyboards have a buildin LCD panel where the contents are controlled
+ * by the host. Often these have a number of keys directly below the LCD
+ * intended for controlling a menu shown on the LCD. These keys often don't
+ * have any labeling so we just name them KEY_KBD_LCD_MENU#
+ */
+#define KEY_KBD_LCD_MENU1 0x2b8
+#define KEY_KBD_LCD_MENU2 0x2b9
+#define KEY_KBD_LCD_MENU3 0x2ba
+#define KEY_KBD_LCD_MENU4 0x2bb
+#define KEY_KBD_LCD_MENU5 0x2bc
+
+#define BTN_TRIGGER_HAPPY 0x2c0
+#define BTN_TRIGGER_HAPPY1 0x2c0
+#define BTN_TRIGGER_HAPPY2 0x2c1
+#define BTN_TRIGGER_HAPPY3 0x2c2
+#define BTN_TRIGGER_HAPPY4 0x2c3
+#define BTN_TRIGGER_HAPPY5 0x2c4
+#define BTN_TRIGGER_HAPPY6 0x2c5
+#define BTN_TRIGGER_HAPPY7 0x2c6
+#define BTN_TRIGGER_HAPPY8 0x2c7
+#define BTN_TRIGGER_HAPPY9 0x2c8
+#define BTN_TRIGGER_HAPPY10 0x2c9
+#define BTN_TRIGGER_HAPPY11 0x2ca
+#define BTN_TRIGGER_HAPPY12 0x2cb
+#define BTN_TRIGGER_HAPPY13 0x2cc
+#define BTN_TRIGGER_HAPPY14 0x2cd
+#define BTN_TRIGGER_HAPPY15 0x2ce
+#define BTN_TRIGGER_HAPPY16 0x2cf
+#define BTN_TRIGGER_HAPPY17 0x2d0
+#define BTN_TRIGGER_HAPPY18 0x2d1
+#define BTN_TRIGGER_HAPPY19 0x2d2
+#define BTN_TRIGGER_HAPPY20 0x2d3
+#define BTN_TRIGGER_HAPPY21 0x2d4
+#define BTN_TRIGGER_HAPPY22 0x2d5
+#define BTN_TRIGGER_HAPPY23 0x2d6
+#define BTN_TRIGGER_HAPPY24 0x2d7
+#define BTN_TRIGGER_HAPPY25 0x2d8
+#define BTN_TRIGGER_HAPPY26 0x2d9
+#define BTN_TRIGGER_HAPPY27 0x2da
+#define BTN_TRIGGER_HAPPY28 0x2db
+#define BTN_TRIGGER_HAPPY29 0x2dc
+#define BTN_TRIGGER_HAPPY30 0x2dd
+#define BTN_TRIGGER_HAPPY31 0x2de
+#define BTN_TRIGGER_HAPPY32 0x2df
+#define BTN_TRIGGER_HAPPY33 0x2e0
+#define BTN_TRIGGER_HAPPY34 0x2e1
+#define BTN_TRIGGER_HAPPY35 0x2e2
+#define BTN_TRIGGER_HAPPY36 0x2e3
+#define BTN_TRIGGER_HAPPY37 0x2e4
+#define BTN_TRIGGER_HAPPY38 0x2e5
+#define BTN_TRIGGER_HAPPY39 0x2e6
+#define BTN_TRIGGER_HAPPY40 0x2e7
+
+/* We avoid low common keys in module aliases so they don't get huge. */
+#define KEY_MIN_INTERESTING KEY_MUTE
+#define KEY_MAX 0x2ff
+#define KEY_CNT (KEY_MAX+1)
+
+/*
+ * Relative axes
+ */
+
+#define REL_X 0x00
+#define REL_Y 0x01
+#define REL_Z 0x02
+#define REL_RX 0x03
+#define REL_RY 0x04
+#define REL_RZ 0x05
+#define REL_HWHEEL 0x06
+#define REL_DIAL 0x07
+#define REL_WHEEL 0x08
+#define REL_MISC 0x09
+/*
+ * 0x0a is reserved and should not be used in input drivers.
+ * It was used by HID as REL_MISC+1 and userspace needs to detect if
+ * the next REL_* event is correct or is just REL_MISC + n.
+ * We define here REL_RESERVED so userspace can rely on it and detect
+ * the situation described above.
+ */
+#define REL_RESERVED 0x0a
+#define REL_WHEEL_HI_RES 0x0b
+#define REL_HWHEEL_HI_RES 0x0c
+#define REL_MAX 0x0f
+#define REL_CNT (REL_MAX+1)
+
+/*
+ * Absolute axes
+ */
+
+#define ABS_X 0x00
+#define ABS_Y 0x01
+#define ABS_Z 0x02
+#define ABS_RX 0x03
+#define ABS_RY 0x04
+#define ABS_RZ 0x05
+#define ABS_THROTTLE 0x06
+#define ABS_RUDDER 0x07
+#define ABS_WHEEL 0x08
+#define ABS_GAS 0x09
+#define ABS_BRAKE 0x0a
+#define ABS_HAT0X 0x10
+#define ABS_HAT0Y 0x11
+#define ABS_HAT1X 0x12
+#define ABS_HAT1Y 0x13
+#define ABS_HAT2X 0x14
+#define ABS_HAT2Y 0x15
+#define ABS_HAT3X 0x16
+#define ABS_HAT3Y 0x17
+#define ABS_PRESSURE 0x18
+#define ABS_DISTANCE 0x19
+#define ABS_TILT_X 0x1a
+#define ABS_TILT_Y 0x1b
+#define ABS_TOOL_WIDTH 0x1c
+
+#define ABS_VOLUME 0x20
+#define ABS_PROFILE 0x21
+
+#define ABS_MISC 0x28
+
+/*
+ * 0x2e is reserved and should not be used in input drivers.
+ * It was used by HID as ABS_MISC+6 and userspace needs to detect if
+ * the next ABS_* event is correct or is just ABS_MISC + n.
+ * We define here ABS_RESERVED so userspace can rely on it and detect
+ * the situation described above.
+ */
+#define ABS_RESERVED 0x2e
+
+#define ABS_MT_SLOT 0x2f /* MT slot being modified */
+#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
+#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
+#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
+#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
+#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
+#define ABS_MT_POSITION_X 0x35 /* Center X touch position */
+#define ABS_MT_POSITION_Y 0x36 /* Center Y touch position */
+#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
+#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
+#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
+#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
+#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */
+#define ABS_MT_TOOL_X 0x3c /* Center X tool position */
+#define ABS_MT_TOOL_Y 0x3d /* Center Y tool position */
+
+
+#define ABS_MAX 0x3f
+#define ABS_CNT (ABS_MAX+1)
+
+/*
+ * Switch events
+ */
+
+#define SW_LID 0x00 /* set = lid shut */
+#define SW_TABLET_MODE 0x01 /* set = tablet mode */
+#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
+#define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any"
+ set = radio enabled */
+#define SW_RADIO SW_RFKILL_ALL /* deprecated */
+#define SW_MICROPHONE_INSERT 0x04 /* set = inserted */
+#define SW_DOCK 0x05 /* set = plugged into dock */
+#define SW_LINEOUT_INSERT 0x06 /* set = inserted */
+#define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */
+#define SW_VIDEOOUT_INSERT 0x08 /* set = inserted */
+#define SW_CAMERA_LENS_COVER 0x09 /* set = lens covered */
+#define SW_KEYPAD_SLIDE 0x0a /* set = keypad slide out */
+#define SW_FRONT_PROXIMITY 0x0b /* set = front proximity sensor active */
+#define SW_ROTATE_LOCK 0x0c /* set = rotate locked/disabled */
+#define SW_LINEIN_INSERT 0x0d /* set = inserted */
+#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
+#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
+#define SW_MACHINE_COVER 0x10 /* set = cover closed */
+#define SW_MAX 0x10
+#define SW_CNT (SW_MAX+1)
+
+/*
+ * Misc events
+ */
+
+#define MSC_SERIAL 0x00
+#define MSC_PULSELED 0x01
+#define MSC_GESTURE 0x02
+#define MSC_RAW 0x03
+#define MSC_SCAN 0x04
+#define MSC_TIMESTAMP 0x05
+#define MSC_MAX 0x07
+#define MSC_CNT (MSC_MAX+1)
+
+/*
+ * LEDs
+ */
+
+#define LED_NUML 0x00
+#define LED_CAPSL 0x01
+#define LED_SCROLLL 0x02
+#define LED_COMPOSE 0x03
+#define LED_KANA 0x04
+#define LED_SLEEP 0x05
+#define LED_SUSPEND 0x06
+#define LED_MUTE 0x07
+#define LED_MISC 0x08
+#define LED_MAIL 0x09
+#define LED_CHARGING 0x0a
+#define LED_MAX 0x0f
+#define LED_CNT (LED_MAX+1)
+
+/*
+ * Autorepeat values
+ */
+
+#define REP_DELAY 0x00
+#define REP_PERIOD 0x01
+#define REP_MAX 0x01
+#define REP_CNT (REP_MAX+1)
+
+/*
+ * Sounds
+ */
+
+#define SND_CLICK 0x00
+#define SND_BELL 0x01
+#define SND_TONE 0x02
+#define SND_MAX 0x07
+#define SND_CNT (SND_MAX+1)
+
+#endif
diff -Nru systemd-252.33/src/basic/linux/input.h systemd-252.36/src/basic/linux/input.h
--- systemd-252.33/src/basic/linux/input.h 1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/src/basic/linux/input.h 2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,516 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_H
+#define _INPUT_H
+
+
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <linux/types.h>
+
+#include "input-event-codes.h"
+
+/*
+ * The event structure itself
+ * Note that __USE_TIME_BITS64 is defined by libc based on
+ * application's request to use 64 bit time_t.
+ */
+
+struct input_event {
+#if (__BITS_PER_LONG != 32 || !defined(__USE_TIME_BITS64)) && !defined(__KERNEL__)
+ struct timeval time;
+#define input_event_sec time.tv_sec
+#define input_event_usec time.tv_usec
+#else
+ __kernel_ulong_t __sec;
+#if defined(__sparc__) && defined(__arch64__)
+ unsigned int __usec;
+ unsigned int __pad;
+#else
+ __kernel_ulong_t __usec;
+#endif
+#define input_event_sec __sec
+#define input_event_usec __usec
+#endif
+ __u16 type;
+ __u16 code;
+ __s32 value;
+};
+
+/*
+ * Protocol version.
+ */
+
+#define EV_VERSION 0x010001
+
+/*
+ * IOCTLs (0x00 - 0x7f)
+ */
+
+struct input_id {
+ __u16 bustype;
+ __u16 vendor;
+ __u16 product;
+ __u16 version;
+};
+
+/**
+ * struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls
+ * @value: latest reported value for the axis.
+ * @minimum: specifies minimum value for the axis.
+ * @maximum: specifies maximum value for the axis.
+ * @fuzz: specifies fuzz value that is used to filter noise from
+ * the event stream.
+ * @flat: values that are within this value will be discarded by
+ * joydev interface and reported as 0 instead.
+ * @resolution: specifies resolution for the values reported for
+ * the axis.
+ *
+ * Note that input core does not clamp reported values to the
+ * [minimum, maximum] limits, such task is left to userspace.
+ *
+ * The default resolution for main axes (ABS_X, ABS_Y, ABS_Z,
+ * ABS_MT_POSITION_X, ABS_MT_POSITION_Y) is reported in units
+ * per millimeter (units/mm), resolution for rotational axes
+ * (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
+ * The resolution for the size axes (ABS_MT_TOUCH_MAJOR,
+ * ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR, ABS_MT_WIDTH_MINOR)
+ * is reported in units per millimeter (units/mm).
+ * When INPUT_PROP_ACCELEROMETER is set the resolution changes.
+ * The main axes (ABS_X, ABS_Y, ABS_Z) are then reported in
+ * units per g (units/g) and in units per degree per second
+ * (units/deg/s) for rotational axes (ABS_RX, ABS_RY, ABS_RZ).
+ */
+struct input_absinfo {
+ __s32 value;
+ __s32 minimum;
+ __s32 maximum;
+ __s32 fuzz;
+ __s32 flat;
+ __s32 resolution;
+};
+
+/**
+ * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
+ * @scancode: scancode represented in machine-endian form.
+ * @len: length of the scancode that resides in @scancode buffer.
+ * @index: index in the keymap, may be used instead of scancode
+ * @flags: allows to specify how kernel should handle the request. For
+ * example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
+ * should perform lookup in keymap by @index instead of @scancode
+ * @keycode: key code assigned to this scancode
+ *
+ * The structure is used to retrieve and modify keymap data. Users have
+ * option of performing lookup either by @scancode itself or by @index
+ * in keymap entry. EVIOCGKEYCODE will also return scancode or index
+ * (depending on which element was used to perform lookup).
+ */
+struct input_keymap_entry {
+#define INPUT_KEYMAP_BY_INDEX (1 << 0)
+ __u8 flags;
+ __u8 len;
+ __u16 index;
+ __u32 keycode;
+ __u8 scancode[32];
+};
+
+struct input_mask {
+ __u32 type;
+ __u32 codes_size;
+ __u64 codes_ptr;
+};
+
+#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */
+#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */
+#define EVIOCGREP _IOR('E', 0x03, unsigned int[2]) /* get repeat settings */
+#define EVIOCSREP _IOW('E', 0x03, unsigned int[2]) /* set repeat settings */
+
+#define EVIOCGKEYCODE _IOR('E', 0x04, unsigned int[2]) /* get keycode */
+#define EVIOCGKEYCODE_V2 _IOR('E', 0x04, struct input_keymap_entry)
+#define EVIOCSKEYCODE _IOW('E', 0x04, unsigned int[2]) /* set keycode */
+#define EVIOCSKEYCODE_V2 _IOW('E', 0x04, struct input_keymap_entry)
+
+#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
+#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */
+#define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len) /* get unique identifier */
+#define EVIOCGPROP(len) _IOC(_IOC_READ, 'E', 0x09, len) /* get device properties */
+
+/**
+ * EVIOCGMTSLOTS(len) - get MT slot values
+ * @len: size of the data buffer in bytes
+ *
+ * The ioctl buffer argument should be binary equivalent to
+ *
+ * struct input_mt_request_layout {
+ * __u32 code;
+ * __s32 values[num_slots];
+ * };
+ *
+ * where num_slots is the (arbitrary) number of MT slots to extract.
+ *
+ * The ioctl size argument (len) is the size of the buffer, which
+ * should satisfy len = (num_slots + 1) * sizeof(__s32). If len is
+ * too small to fit all available slots, the first num_slots are
+ * returned.
+ *
+ * Before the call, code is set to the wanted ABS_MT event type. On
+ * return, values[] is filled with the slot values for the specified
+ * ABS_MT code.
+ *
+ * If the request code is not an ABS_MT value, -EINVAL is returned.
+ */
+#define EVIOCGMTSLOTS(len) _IOC(_IOC_READ, 'E', 0x0a, len)
+
+#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global key state */
+#define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len) /* get all LEDs */
+#define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */
+#define EVIOCGSW(len) _IOC(_IOC_READ, 'E', 0x1b, len) /* get all switch states */
+
+#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + (ev), len) /* get event bits */
+#define EVIOCGABS(abs) _IOR('E', 0x40 + (abs), struct input_absinfo) /* get abs value/limits */
+#define EVIOCSABS(abs) _IOW('E', 0xc0 + (abs), struct input_absinfo) /* set abs value/limits */
+
+#define EVIOCSFF _IOW('E', 0x80, struct ff_effect) /* send a force effect to a force feedback device */
+#define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */
+#define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */
+
+#define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */
+#define EVIOCREVOKE _IOW('E', 0x91, int) /* Revoke device access */
+
+/**
+ * EVIOCGMASK - Retrieve current event mask
+ *
+ * This ioctl allows user to retrieve the current event mask for specific
+ * event type. The argument must be of type "struct input_mask" and
+ * specifies the event type to query, the address of the receive buffer and
+ * the size of the receive buffer.
+ *
+ * The event mask is a per-client mask that specifies which events are
+ * forwarded to the client. Each event code is represented by a single bit
+ * in the event mask. If the bit is set, the event is passed to the client
+ * normally. Otherwise, the event is filtered and will never be queued on
+ * the client's receive buffer.
+ *
+ * Event masks do not affect global state of the input device. They only
+ * affect the file descriptor they are applied to.
+ *
+ * The default event mask for a client has all bits set, i.e. all events
+ * are forwarded to the client. If the kernel is queried for an unknown
+ * event type or if the receive buffer is larger than the number of
+ * event codes known to the kernel, the kernel returns all zeroes for those
+ * codes.
+ *
+ * At maximum, codes_size bytes are copied.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked, EFAULT
+ * if the receive-buffer points to invalid memory, or EINVAL if the kernel
+ * does not implement the ioctl.
+ */
+#define EVIOCGMASK _IOR('E', 0x92, struct input_mask) /* Get event-masks */
+
+/**
+ * EVIOCSMASK - Set event mask
+ *
+ * This ioctl is the counterpart to EVIOCGMASK. Instead of receiving the
+ * current event mask, this changes the client's event mask for a specific
+ * type. See EVIOCGMASK for a description of event-masks and the
+ * argument-type.
+ *
+ * This ioctl provides full forward compatibility. If the passed event type
+ * is unknown to the kernel, or if the number of event codes specified in
+ * the mask is bigger than what is known to the kernel, the ioctl is still
+ * accepted and applied. However, any unknown codes are left untouched and
+ * stay cleared. That means, the kernel always filters unknown codes
+ * regardless of what the client requests. If the new mask doesn't cover
+ * all known event-codes, all remaining codes are automatically cleared and
+ * thus filtered.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked. EFAULT is
+ * returned if the receive-buffer points to invalid memory. EINVAL is returned
+ * if the kernel does not implement the ioctl.
+ */
+#define EVIOCSMASK _IOW('E', 0x93, struct input_mask) /* Set event-masks */
+
+#define EVIOCSCLOCKID _IOW('E', 0xa0, int) /* Set clockid to be used for timestamps */
+
+/*
+ * IDs.
+ */
+
+#define ID_BUS 0
+#define ID_VENDOR 1
+#define ID_PRODUCT 2
+#define ID_VERSION 3
+
+#define BUS_PCI 0x01
+#define BUS_ISAPNP 0x02
+#define BUS_USB 0x03
+#define BUS_HIL 0x04
+#define BUS_BLUETOOTH 0x05
+#define BUS_VIRTUAL 0x06
+
+#define BUS_ISA 0x10
+#define BUS_I8042 0x11
+#define BUS_XTKBD 0x12
+#define BUS_RS232 0x13
+#define BUS_GAMEPORT 0x14
+#define BUS_PARPORT 0x15
+#define BUS_AMIGA 0x16
+#define BUS_ADB 0x17
+#define BUS_I2C 0x18
+#define BUS_HOST 0x19
+#define BUS_GSC 0x1A
+#define BUS_ATARI 0x1B
+#define BUS_SPI 0x1C
+#define BUS_RMI 0x1D
+#define BUS_CEC 0x1E
+#define BUS_INTEL_ISHTP 0x1F
+#define BUS_AMD_SFH 0x20
+
+/*
+ * MT_TOOL types
+ */
+#define MT_TOOL_FINGER 0x00
+#define MT_TOOL_PEN 0x01
+#define MT_TOOL_PALM 0x02
+#define MT_TOOL_DIAL 0x0a
+#define MT_TOOL_MAX 0x0f
+
+/*
+ * Values describing the status of a force-feedback effect
+ */
+#define FF_STATUS_STOPPED 0x00
+#define FF_STATUS_PLAYING 0x01
+#define FF_STATUS_MAX 0x01
+
+/*
+ * Structures used in ioctls to upload effects to a device
+ * They are pieces of a bigger structure (called ff_effect)
+ */
+
+/*
+ * All duration values are expressed in ms. Values above 32767 ms (0x7fff)
+ * should not be used and have unspecified results.
+ */
+
+/**
+ * struct ff_replay - defines scheduling of the force-feedback effect
+ * @length: duration of the effect
+ * @delay: delay before effect should start playing
+ */
+struct ff_replay {
+ __u16 length;
+ __u16 delay;
+};
+
+/**
+ * struct ff_trigger - defines what triggers the force-feedback effect
+ * @button: number of the button triggering the effect
+ * @interval: controls how soon the effect can be re-triggered
+ */
+struct ff_trigger {
+ __u16 button;
+ __u16 interval;
+};
+
+/**
+ * struct ff_envelope - generic force-feedback effect envelope
+ * @attack_length: duration of the attack (ms)
+ * @attack_level: level at the beginning of the attack
+ * @fade_length: duration of fade (ms)
+ * @fade_level: level at the end of fade
+ *
+ * The @attack_level and @fade_level are absolute values; when applying
+ * envelope force-feedback core will convert to positive/negative
+ * value based on polarity of the default level of the effect.
+ * Valid range for the attack and fade levels is 0x0000 - 0x7fff
+ */
+struct ff_envelope {
+ __u16 attack_length;
+ __u16 attack_level;
+ __u16 fade_length;
+ __u16 fade_level;
+};
+
+/**
+ * struct ff_constant_effect - defines parameters of a constant force-feedback effect
+ * @level: strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_constant_effect {
+ __s16 level;
+ struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
+ * @start_level: beginning strength of the effect; may be negative
+ * @end_level: final strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_ramp_effect {
+ __s16 start_level;
+ __s16 end_level;
+ struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_condition_effect - defines a spring or friction force-feedback effect
+ * @right_saturation: maximum level when joystick moved all way to the right
+ * @left_saturation: same for the left side
+ * @right_coeff: controls how fast the force grows when the joystick moves
+ * to the right
+ * @left_coeff: same for the left side
+ * @deadband: size of the dead zone, where no force is produced
+ * @center: position of the dead zone
+ */
+struct ff_condition_effect {
+ __u16 right_saturation;
+ __u16 left_saturation;
+
+ __s16 right_coeff;
+ __s16 left_coeff;
+
+ __u16 deadband;
+ __s16 center;
+};
+
+/**
+ * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
+ * @waveform: kind of the effect (wave)
+ * @period: period of the wave (ms)
+ * @magnitude: peak value
+ * @offset: mean value of the wave (roughly)
+ * @phase: 'horizontal' shift
+ * @envelope: envelope data
+ * @custom_len: number of samples (FF_CUSTOM only)
+ * @custom_data: buffer of samples (FF_CUSTOM only)
+ *
+ * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
+ * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
+ * for the time being as no driver supports it yet.
+ *
+ * Note: the data pointed by custom_data is copied by the driver.
+ * You can therefore dispose of the memory after the upload/update.
+ */
+struct ff_periodic_effect {
+ __u16 waveform;
+ __u16 period;
+ __s16 magnitude;
+ __s16 offset;
+ __u16 phase;
+
+ struct ff_envelope envelope;
+
+ __u32 custom_len;
+ __s16 *custom_data;
+};
+
+/**
+ * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
+ * @strong_magnitude: magnitude of the heavy motor
+ * @weak_magnitude: magnitude of the light one
+ *
+ * Some rumble pads have two motors of different weight. Strong_magnitude
+ * represents the magnitude of the vibration generated by the heavy one.
+ */
+struct ff_rumble_effect {
+ __u16 strong_magnitude;
+ __u16 weak_magnitude;
+};
+
+/**
+ * struct ff_effect - defines force feedback effect
+ * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
+ * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
+ * @id: an unique id assigned to an effect
+ * @direction: direction of the effect
+ * @trigger: trigger conditions (struct ff_trigger)
+ * @replay: scheduling of the effect (struct ff_replay)
+ * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
+ * ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
+ * defining effect parameters
+ *
+ * This structure is sent through ioctl from the application to the driver.
+ * To create a new effect application should set its @id to -1; the kernel
+ * will return assigned @id which can later be used to update or delete
+ * this effect.
+ *
+ * Direction of the effect is encoded as follows:
+ * 0 deg -> 0x0000 (down)
+ * 90 deg -> 0x4000 (left)
+ * 180 deg -> 0x8000 (up)
+ * 270 deg -> 0xC000 (right)
+ */
+struct ff_effect {
+ __u16 type;
+ __s16 id;
+ __u16 direction;
+ struct ff_trigger trigger;
+ struct ff_replay replay;
+
+ union {
+ struct ff_constant_effect constant;
+ struct ff_ramp_effect ramp;
+ struct ff_periodic_effect periodic;
+ struct ff_condition_effect condition[2]; /* One for each axis */
+ struct ff_rumble_effect rumble;
+ } u;
+};
+
+/*
+ * Force feedback effect types
+ */
+
+#define FF_RUMBLE 0x50
+#define FF_PERIODIC 0x51
+#define FF_CONSTANT 0x52
+#define FF_SPRING 0x53
+#define FF_FRICTION 0x54
+#define FF_DAMPER 0x55
+#define FF_INERTIA 0x56
+#define FF_RAMP 0x57
+
+#define FF_EFFECT_MIN FF_RUMBLE
+#define FF_EFFECT_MAX FF_RAMP
+
+/*
+ * Force feedback periodic effect types
+ */
+
+#define FF_SQUARE 0x58
+#define FF_TRIANGLE 0x59
+#define FF_SINE 0x5a
+#define FF_SAW_UP 0x5b
+#define FF_SAW_DOWN 0x5c
+#define FF_CUSTOM 0x5d
+
+#define FF_WAVEFORM_MIN FF_SQUARE
+#define FF_WAVEFORM_MAX FF_CUSTOM
+
+/*
+ * Set ff device properties
+ */
+
+#define FF_GAIN 0x60
+#define FF_AUTOCENTER 0x61
+
+/*
+ * ff->playback(effect_id = FF_GAIN) is the first effect_id to
+ * cause a collision with another ff method, in this case ff->set_gain().
+ * Therefore the greatest safe value for effect_id is FF_GAIN - 1,
+ * and thus the total number of effects should never exceed FF_GAIN.
+ */
+#define FF_MAX_EFFECTS FF_GAIN
+
+#define FF_MAX 0x7f
+#define FF_CNT (FF_MAX+1)
+
+#endif /* _INPUT_H */
diff -Nru systemd-252.33/src/basic/missing_sched.h systemd-252.36/src/basic/missing_sched.h
--- systemd-252.33/src/basic/missing_sched.h 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/missing_sched.h 2025-03-06 11:43:10.000000000 +0000
@@ -8,6 +8,13 @@
#define CLONE_NEWCGROUP 0x02000000
#endif
+/* b3e5838252665ee4cfa76b82bdf1198dca81e5be (5.2) */
+#ifndef CLONE_PIDFD
+# define CLONE_PIDFD 0x00001000
+#else
+assert_cc(CLONE_PIDFD == 0x00001000);
+#endif
+
/* 769071ac9f20b6a447410c7eaa55d1a5233ef40c (5.8) */
#ifndef CLONE_NEWTIME
#define CLONE_NEWTIME 0x00000080
diff -Nru systemd-252.33/src/basic/random-util.c systemd-252.36/src/basic/random-util.c
--- systemd-252.33/src/basic/random-util.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/random-util.c 2025-03-06 11:43:10.000000000 +0000
@@ -44,7 +44,6 @@
uint8_t auxval[16];
} state = {
/* Arbitrary domain separation to prevent other usage of AT_RANDOM from clashing. */
- .label = "systemd fallback random bytes v1",
.call_id = fallback_counter++,
.stamp_mono = now(CLOCK_MONOTONIC),
.stamp_real = now(CLOCK_REALTIME),
@@ -52,6 +51,7 @@
.tid = gettid(),
};
+ memcpy(state.label, "systemd fallback random bytes v1", sizeof(state.label));
#if HAVE_SYS_AUXV_H
memcpy(state.auxval, ULONG_TO_PTR(getauxval(AT_RANDOM)), sizeof(state.auxval));
#endif
diff -Nru systemd-252.33/src/basic/raw-clone.h systemd-252.36/src/basic/raw-clone.h
--- systemd-252.33/src/basic/raw-clone.h 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/raw-clone.h 2025-03-06 11:43:10.000000000 +0000
@@ -11,6 +11,7 @@
#include "log.h"
#include "macro.h"
+#include "missing_sched.h"
/**
* raw_clone() - uses clone to create a new process with clone flags
diff -Nru systemd-252.33/src/basic/recurse-dir.c systemd-252.36/src/basic/recurse-dir.c
--- systemd-252.33/src/basic/recurse-dir.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/recurse-dir.c 2025-03-06 11:43:10.000000000 +0000
@@ -270,7 +270,7 @@
if (r < 0) {
log_debug_errno(r, "Failed to stat directory entry '%s': %m", p);
- assert(errno <= RECURSE_DIR_SKIP_STAT_INODE_ERROR_MAX - RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE);
+ assert(-r <= RECURSE_DIR_SKIP_STAT_INODE_ERROR_MAX - RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE);
r = func(RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE + -r,
p,
@@ -300,7 +300,7 @@
* guarantee that RECURSE_DIR_ENTRY is strictly issued for
* non-directory dirents. */
- log_debug_errno(r, "Non-directory entry '%s' suddenly became a directory: %m", p);
+ log_debug("Non-directory entry '%s' suddenly became a directory.", p);
r = func(RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE + EISDIR,
p,
diff -Nru systemd-252.33/src/boot/efi/boot.c systemd-252.36/src/boot/efi/boot.c
--- systemd-252.33/src/boot/efi/boot.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/boot/efi/boot.c 2025-03-06 11:43:10.000000000 +0000
@@ -1391,7 +1391,7 @@
err = root->Open(root, &handle, old_path, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
if (err != EFI_SUCCESS) {
- log_error_stall(L"Error opening boot entry: %r", err);
+ log_error_stall(L"Error opening boot entry '%ls': %r", old_path, err);
return err;
}
diff -Nru systemd-252.33/src/boot/efi/pe.c systemd-252.36/src/boot/efi/pe.c
--- systemd-252.33/src/boot/efi/pe.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/boot/efi/pe.c 2025-03-06 11:43:10.000000000 +0000
@@ -9,7 +9,6 @@
#define DOS_FILE_MAGIC "MZ"
#define PE_FILE_MAGIC "PE\0\0"
-#define MAX_SECTIONS 96
#if defined(__i386__)
# define TARGET_MACHINE_TYPE EFI_IMAGE_MACHINE_IA32
@@ -128,7 +127,6 @@
(pe->FileHeader.Machine == TARGET_MACHINE_TYPE ||
(allow_compatibility && pe->FileHeader.Machine == TARGET_MACHINE_TYPE_COMPATIBILITY)) &&
pe->FileHeader.NumberOfSections > 0 &&
- pe->FileHeader.NumberOfSections <= MAX_SECTIONS &&
IN_SET(pe->OptionalHeader.Magic, OPTHDR32_MAGIC, OPTHDR64_MAGIC);
}
diff -Nru systemd-252.33/src/core/automount.c systemd-252.36/src/core/automount.c
--- systemd-252.33/src/core/automount.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/automount.c 2025-03-06 11:43:10.000000000 +0000
@@ -4,7 +4,6 @@
#include <fcntl.h>
#include <limits.h>
#include <linux/auto_dev-ioctl.h>
-#include <linux/auto_fs4.h>
#include <sys/epoll.h>
#include <sys/mount.h>
#include <sys/stat.h>
diff -Nru systemd-252.33/src/core/dbus.c systemd-252.36/src/core/dbus.c
--- systemd-252.33/src/core/dbus.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/dbus.c 2025-03-06 11:43:10.000000000 +0000
@@ -131,10 +131,16 @@
assert(message);
assert_se(bus = sd_bus_message_get_bus(message));
- if (bus == m->api_bus)
+ if (bus == m->api_bus) {
+ log_notice("Got disconnect on API bus.");
bus_done_api(m);
- if (bus == m->system_bus)
+ }
+ if (bus == m->system_bus) {
+ /* If we are the system manager, this is already logged by the API bus. */
+ if (!MANAGER_IS_SYSTEM(m))
+ log_notice("Got disconnect on system bus.");
bus_done_system(m);
+ }
if (set_remove(m->private_buses, bus)) {
log_debug("Got disconnect on private connection.");
diff -Nru systemd-252.33/src/core/dbus-manager.c systemd-252.36/src/core/dbus-manager.c
--- systemd-252.33/src/core/dbus-manager.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/dbus-manager.c 2025-03-06 11:43:10.000000000 +0000
@@ -2643,7 +2643,7 @@
flags = unit_file_bools_to_flags(runtime, force);
dep = unit_dependency_from_string(type);
- if (dep < 0)
+ if (dep < 0 || !IN_SET(dep, UNIT_WANTS, UNIT_REQUIRES))
return -EINVAL;
r = unit_file_add_dependency(m->unit_file_scope, flags, NULL, l, target, dep, &changes, &n_changes);
diff -Nru systemd-252.33/src/core/device.c systemd-252.36/src/core/device.c
--- systemd-252.33/src/core/device.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/device.c 2025-03-06 11:43:10.000000000 +0000
@@ -550,7 +550,7 @@
for (;;) {
_cleanup_free_ char *word = NULL, *k = NULL;
- r = extract_first_word(&wants, &word, NULL, EXTRACT_UNQUOTE);
+ r = extract_first_word(&wants, &word, NULL, EXTRACT_UNQUOTE | EXTRACT_RETAIN_ESCAPE);
if (r == 0)
break;
if (r == -ENOMEM)
diff -Nru systemd-252.33/src/core/job.c systemd-252.36/src/core/job.c
--- systemd-252.33/src/core/job.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/job.c 2025-03-06 11:43:10.000000000 +0000
@@ -402,9 +402,8 @@
return IN_SET(b, UNIT_ACTIVE, UNIT_RELOADING);
case JOB_RELOAD:
- return
- b == UNIT_RELOADING;
-
+ /* Reload jobs are never consider redundant/duplicate. Refer jobs_may_late_merge() for
+ * a detailed justification. */
case JOB_RESTART:
/* Restart jobs must always be kept.
*
diff -Nru systemd-252.33/src/core/manager-dump.c systemd-252.36/src/core/manager-dump.c
--- systemd-252.33/src/core/manager-dump.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/manager-dump.c 2025-03-06 11:43:10.000000000 +0000
@@ -59,6 +59,9 @@
timestamp_is_set(t->realtime) ? FORMAT_TIMESTAMP(t->realtime) :
FORMAT_TIMESPAN(t->monotonic, 1));
}
+
+ for (const char *n = sd_bus_track_first(m->subscribed); n; n = sd_bus_track_next(m->subscribed))
+ fprintf(f, "%sSubscribed: %s\n", strempty(prefix), n);
}
void manager_dump(Manager *m, FILE *f, char **patterns, const char *prefix) {
diff -Nru systemd-252.33/src/core/path.c systemd-252.36/src/core/path.c
--- systemd-252.33/src/core/path.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/path.c 2025-03-06 11:43:10.000000000 +0000
@@ -589,7 +589,7 @@
}
if (path_check_good(p, initial, from_trigger_notify, &trigger_path)) {
- log_unit_debug(UNIT(p), "Got triggered.");
+ log_unit_debug(UNIT(p), "Got triggered by '%s'.", trigger_path);
path_enter_running(p, trigger_path);
return;
}
@@ -603,7 +603,7 @@
* recheck */
if (path_check_good(p, false, from_trigger_notify, &trigger_path)) {
- log_unit_debug(UNIT(p), "Got triggered.");
+ log_unit_debug(UNIT(p), "Got triggered by '%s'.", trigger_path);
path_enter_running(p, trigger_path);
return;
}
diff -Nru systemd-252.33/src/core/unit-serialize.c systemd-252.36/src/core/unit-serialize.c
--- systemd-252.33/src/core/unit-serialize.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/unit-serialize.c 2025-03-06 11:43:10.000000000 +0000
@@ -39,10 +39,12 @@
if (markers == 0)
return 0;
+ bool space = false;
+
fputs("markers=", f);
for (UnitMarker m = 0; m < _UNIT_MARKER_MAX; m++)
if (FLAGS_SET(markers, 1u << m))
- fputs(unit_marker_to_string(m), f);
+ fputs_with_space(f, unit_marker_to_string(m), /* separator = */ NULL, &space);
fputc('\n', f);
return 0;
}
diff -Nru systemd-252.33/src/fuzz/fuzz-compress.c systemd-252.36/src/fuzz/fuzz-compress.c
--- systemd-252.33/src/fuzz/fuzz-compress.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/fuzz/fuzz-compress.c 2025-03-06 11:43:10.000000000 +0000
@@ -63,7 +63,7 @@
size_t sw_len = MIN(data_len - 1, h->sw_len);
r = decompress_startswith(alg, buf, csize, &buf2, h->data, sw_len, h->data[sw_len]);
- assert_se(r > 0);
+ assert_se(r >= 0);
return 0;
}
diff -Nru systemd-252.33/src/home/homectl.c systemd-252.36/src/home/homectl.c
--- systemd-252.33/src/home/homectl.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/home/homectl.c 2025-03-06 11:43:10.000000000 +0000
@@ -2263,7 +2263,7 @@
" --enforce-password-policy=BOOL\n"
" Control whether to enforce system's password\n"
" policy for this user\n"
- " -P Same as --enforce-password-password=no\n"
+ " -P Same as --enforce-password-policy=no\n"
" --password-change-now=BOOL\n"
" Require the password to be changed on next login\n"
" --password-change-min=TIME\n"
Binary files /tmp/aaTPyuKjzL/systemd-252.33/src/import/import-pubring.gpg and /tmp/LOBDKmAF_9/systemd-252.36/src/import/import-pubring.gpg differ
diff -Nru systemd-252.33/src/import/pull-tar.c systemd-252.36/src/import/pull-tar.c
--- systemd-252.33/src/import/pull-tar.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/import/pull-tar.c 2025-03-06 11:43:10.000000000 +0000
@@ -408,7 +408,7 @@
r = install_file(
AT_FDCWD, i->local,
AT_FDCWD, NULL,
- (i->flags & PULL_READ_ONLY) ? INSTALL_READ_ONLY : 0 |
+ (i->flags & PULL_READ_ONLY ? INSTALL_READ_ONLY : 0) |
(i->flags & PULL_SYNC ? INSTALL_SYNCFS : 0));
if (r < 0) {
log_error_errno(r, "Failed to finalize '%s': %m", i->local);
diff -Nru systemd-252.33/src/journal/journalctl.c systemd-252.36/src/journal/journalctl.c
--- systemd-252.33/src/journal/journalctl.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/journal/journalctl.c 2025-03-06 11:43:10.000000000 +0000
@@ -1865,15 +1865,18 @@
state_size = FSPRG_stateinbytes(FSPRG_RECOMMENDED_SECPAR);
state = alloca_safe(state_size);
- log_info("Generating seed...");
+ if (!arg_quiet)
+ log_info("Generating seed...");
r = crypto_random_bytes(seed, seed_size);
if (r < 0)
return log_error_errno(r, "Failed to acquire random seed: %m");
- log_info("Generating key pair...");
+ if (!arg_quiet)
+ log_info("Generating key pair...");
FSPRG_GenMK(NULL, mpk, seed, seed_size, FSPRG_RECOMMENDED_SECPAR);
- log_info("Generating sealing key...");
+ if (!arg_quiet)
+ log_info("Generating sealing key...");
FSPRG_GenState0(state, mpk, seed, seed_size);
assert(arg_interval > 0);
@@ -1888,7 +1891,7 @@
r = chattr_secret(fd, CHATTR_WARN_UNSUPPORTED_FLAGS);
if (r < 0)
- log_full_errno(ERRNO_IS_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING,
+ log_full_errno(ERRNO_IS_NOT_SUPPORTED(r) || arg_quiet ? LOG_DEBUG : LOG_WARNING,
r, "Failed to set file attributes on '%s', ignoring: %m", k);
struct FSSHeader h = {
@@ -1921,7 +1924,7 @@
if (r < 0)
return r;
- if (on_tty()) {
+ if (on_tty() && !arg_quiet) {
hn = gethostname_malloc();
if (hn)
hostname_cleanup(hn);
@@ -1952,7 +1955,7 @@
puts(key);
- if (on_tty()) {
+ if (on_tty() && !arg_quiet) {
fprintf(stderr, "%s", ansi_normal());
#if HAVE_QRENCODE
_cleanup_free_ char *url = NULL;
diff -Nru systemd-252.33/src/journal/journald-server.c systemd-252.36/src/journal/journald-server.c
--- systemd-252.33/src/journal/journald-server.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/journal/journald-server.c 2025-03-06 11:43:10.000000000 +0000
@@ -854,8 +854,9 @@
if (!f)
return;
- if (journal_file_rotate_suggested(f->file, s->max_file_usec, LOG_INFO)) {
- log_info("%s: Journal header limits reached or header out-of-date, rotating.", f->file->path);
+ if (journal_file_rotate_suggested(f->file, s->max_file_usec, LOG_DEBUG)) {
+ log_debug("%s: Journal header limits reached or header out-of-date, rotating.",
+ f->file->path);
rotate = true;
}
}
diff -Nru systemd-252.33/src/libsystemd/sd-id128/sd-id128.c systemd-252.36/src/libsystemd/sd-id128/sd-id128.c
--- systemd-252.33/src/libsystemd/sd-id128/sd-id128.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/libsystemd/sd-id128/sd-id128.c 2025-03-06 11:43:10.000000000 +0000
@@ -7,6 +7,7 @@
#include "sd-id128.h"
#include "alloc-util.h"
+#include "errno-util.h"
#include "fd-util.h"
#include "hexdecoct.h"
#include "hmac.h"
@@ -173,8 +174,10 @@
key = request_key("user", "invocation_id", NULL, 0);
if (key == -1) {
- /* Keyring support not available? No invocation key stored? */
- if (IN_SET(errno, ENOSYS, ENOKEY))
+ /* Keyring support not available? Keyring access locked down? No invocation key stored? */
+ if (ERRNO_IS_NOT_SUPPORTED(errno) ||
+ ERRNO_IS_PRIVILEGE(errno) ||
+ errno == ENOKEY)
return -ENXIO;
return -errno;
diff -Nru systemd-252.33/src/libsystemd/sd-journal/journal-file.c systemd-252.36/src/libsystemd/sd-journal/journal-file.c
--- systemd-252.33/src/libsystemd/sd-journal/journal-file.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/libsystemd/sd-journal/journal-file.c 2025-03-06 11:43:10.000000000 +0000
@@ -2452,7 +2452,7 @@
Object **ret_object,
uint64_t *ret_offset) {
- uint64_t p = 0, a, t = 0, k;
+ uint64_t p = 0, a, t = 0, k = 0; /* Explicit initialization of k to appease gcc */
ChainCacheItem *ci;
Object *o;
int r;
diff -Nru systemd-252.33/src/locale/kbd-model-map systemd-252.36/src/locale/kbd-model-map
--- systemd-252.33/src/locale/kbd-model-map 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/locale/kbd-model-map 2025-03-06 11:43:10.000000000 +0000
@@ -70,3 +70,4 @@
es-dvorak es microsoftpro dvorak terminate:ctrl_alt_bksp
lv lv pc105 apostrophe terminate:ctrl_alt_bksp
lv-tilde lv pc105 tilde terminate:ctrl_alt_bksp
+ge ge,us pc105 - terminate:ctrl_alt_bksp
diff -Nru systemd-252.33/src/login/logind.c systemd-252.36/src/login/logind.c
--- systemd-252.33/src/login/logind.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/login/logind.c 2025-03-06 11:43:10.000000000 +0000
@@ -87,6 +87,8 @@
(void) sd_event_set_watchdog(m->event, true);
+ dual_timestamp_get(&m->init_ts);
+
manager_reset_config(m);
*ret = TAKE_PTR(m);
diff -Nru systemd-252.33/src/login/logind-core.c systemd-252.36/src/login/logind-core.c
--- systemd-252.33/src/login/logind-core.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/login/logind-core.c 2025-03-06 11:43:10.000000000 +0000
@@ -401,10 +401,14 @@
int manager_get_idle_hint(Manager *m, dual_timestamp *t) {
Session *s;
bool idle_hint;
- dual_timestamp ts = DUAL_TIMESTAMP_NULL;
+ dual_timestamp ts;
assert(m);
+ /* Initialize the baseline timestamp with the time the manager got initialized to avoid reporting
+ * unreasonable large idle periods starting with the Unix epoch. */
+ ts = m->init_ts;
+
idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false, false, 0, NULL);
HASHMAP_FOREACH(s, m->sessions) {
diff -Nru systemd-252.33/src/login/logind.h systemd-252.36/src/login/logind.h
--- systemd-252.33/src/login/logind.h 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/login/logind.h 2025-03-06 11:43:10.000000000 +0000
@@ -139,6 +139,8 @@
char *efi_loader_entry_one_shot;
struct stat efi_loader_entry_one_shot_stat;
+
+ dual_timestamp init_ts;
};
void manager_reset_config(Manager *m);
diff -Nru systemd-252.33/src/network/netdev/wireguard.c systemd-252.36/src/network/netdev/wireguard.c
--- systemd-252.33/src/network/netdev/wireguard.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/network/netdev/wireguard.c 2025-03-06 11:43:10.000000000 +0000
@@ -1127,7 +1127,7 @@
r = wireguard_read_key_file(w->private_key_file, w->private_key);
if (r < 0)
return log_netdev_error_errno(netdev, r,
- "Failed to read private key from %s. Ignoring network device.",
+ "Failed to read private key from '%s', ignoring network device: %m",
w->private_key_file);
if (eqzero(w->private_key))
diff -Nru systemd-252.33/src/resolve/resolved-dns-dnssec.c systemd-252.36/src/resolve/resolved-dns-dnssec.c
--- systemd-252.33/src/resolve/resolved-dns-dnssec.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-dnssec.c 2025-03-06 11:43:10.000000000 +0000
@@ -1473,7 +1473,7 @@
r = dnssec_verify_dnskey_by_ds(dnskey, ds, false);
if (IN_SET(r, -EKEYREJECTED, -EOPNOTSUPP))
- return 0; /* The DNSKEY is revoked or otherwise invalid, or we don't support the digest algorithm */
+ continue; /* The DNSKEY is revoked or otherwise invalid, or we don't support the digest algorithm */
if (r < 0)
return r;
if (r > 0)
diff -Nru systemd-252.33/src/resolve/resolved-dns-query.c systemd-252.36/src/resolve/resolved-dns-query.c
--- systemd-252.33/src/resolve/resolved-dns-query.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-query.c 2025-03-06 11:43:10.000000000 +0000
@@ -10,6 +10,7 @@
#include "resolved-dns-query.h"
#include "resolved-dns-synthesize.h"
#include "resolved-etc-hosts.h"
+#include "resolved-timeouts.h"
#include "string-util.h"
#define QUERIES_MAX 2048
@@ -48,6 +49,8 @@
assert(c);
+ (void) event_source_disable(c->timeout_event_source);
+
/* Detach all the DnsTransactions attached to this query */
while ((t = set_steal_first(c->transactions))) {
@@ -62,6 +65,8 @@
assert(c);
+ (void) event_source_disable(c->timeout_event_source);
+
/* Abandon all the DnsTransactions attached to this query */
while ((t = set_steal_first(c->transactions))) {
@@ -94,6 +99,8 @@
if (!c)
return NULL;
+ c->timeout_event_source = sd_event_source_disable_unref(c->timeout_event_source);
+
dns_query_candidate_stop(c);
dns_query_candidate_unlink(c);
@@ -312,6 +319,30 @@
return r;
}
+static void dns_query_accept(DnsQuery *q, DnsQueryCandidate *c);
+
+static int on_candidate_timeout(sd_event_source *s, usec_t usec, void *userdata) {
+ DnsQueryCandidate *c = userdata;
+
+ assert(s);
+ assert(c);
+
+ log_debug("Accepting incomplete query candidate after expedited timeout on partial success.");
+ dns_query_accept(c->query, c);
+
+ return 0;
+}
+
+static bool dns_query_candidate_has_partially_succeeded(DnsQueryCandidate *c) {
+ DnsTransaction *t;
+
+ SET_FOREACH(t, c->transactions)
+ if (t->state == DNS_TRANSACTION_SUCCESS)
+ return true;
+
+ return false;
+}
+
void dns_query_candidate_notify(DnsQueryCandidate *c) {
DnsTransactionState state;
int r;
@@ -323,11 +354,24 @@
state = dns_query_candidate_state(c);
- if (DNS_TRANSACTION_IS_LIVE(state))
+ if (DNS_TRANSACTION_IS_LIVE(state)) {
+ if (dns_query_candidate_has_partially_succeeded(c))
+ (void) event_reset_time_relative(
+ c->query->manager->event,
+ &c->timeout_event_source,
+ CLOCK_BOOTTIME,
+ CANDIDATE_EXPEDITED_TIMEOUT_USEC, /* accuracy_usec= */ 0,
+ on_candidate_timeout, c,
+ /* priority= */ 0, "candidate-timeout",
+ /* force_reset= */ false);
+
return;
+ }
if (state != DNS_TRANSACTION_SUCCESS && c->search_domain) {
+ (void) event_source_disable(c->timeout_event_source);
+
r = dns_query_candidate_next_search_domain(c);
if (r < 0)
goto fail;
diff -Nru systemd-252.33/src/resolve/resolved-dns-query.h systemd-252.36/src/resolve/resolved-dns-query.h
--- systemd-252.33/src/resolve/resolved-dns-query.h 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-query.h 2025-03-06 11:43:10.000000000 +0000
@@ -25,6 +25,7 @@
DnsSearchDomain *search_domain;
Set *transactions;
+ sd_event_source *timeout_event_source;
LIST_FIELDS(DnsQueryCandidate, candidates_by_query);
LIST_FIELDS(DnsQueryCandidate, candidates_by_scope);
diff -Nru systemd-252.33/src/resolve/resolved-dns-scope.c systemd-252.36/src/resolve/resolved-dns-scope.c
--- systemd-252.33/src/resolve/resolved-dns-scope.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-scope.c 2025-03-06 11:43:10.000000000 +0000
@@ -15,6 +15,7 @@
#include "resolved-dns-zone.h"
#include "resolved-llmnr.h"
#include "resolved-mdns.h"
+#include "resolved-timeouts.h"
#include "socket-util.h"
#include "strv.h"
diff -Nru systemd-252.33/src/resolve/resolved-dns-stream.c systemd-252.36/src/resolve/resolved-dns-stream.c
--- systemd-252.33/src/resolve/resolved-dns-stream.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-stream.c 2025-03-06 11:43:10.000000000 +0000
@@ -359,7 +359,8 @@
}
}
- while ((revents & (EPOLLIN|EPOLLHUP|EPOLLRDHUP)) &&
+ while (s->identified && /* Only read data once we identified the peer, because we cannot fill in the DNS packet meta info otherwise */
+ (revents & (EPOLLIN|EPOLLHUP|EPOLLRDHUP)) &&
(!s->read_packet ||
s->n_read < sizeof(s->read_size) + s->read_packet->size)) {
diff -Nru systemd-252.33/src/resolve/resolved-dns-transaction.c systemd-252.36/src/resolve/resolved-dns-transaction.c
--- systemd-252.33/src/resolve/resolved-dns-transaction.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-transaction.c 2025-03-06 11:43:10.000000000 +0000
@@ -14,13 +14,10 @@
#include "resolved-dns-transaction.h"
#include "resolved-dnstls.h"
#include "resolved-llmnr.h"
+#include "resolved-timeouts.h"
#include "string-table.h"
#define TRANSACTIONS_MAX 4096
-#define TRANSACTION_TCP_TIMEOUT_USEC (10U*USEC_PER_SEC)
-
-/* After how much time to repeat classic DNS requests */
-#define DNS_TIMEOUT_USEC (SD_RESOLVED_QUERY_TIMEOUT_USEC / DNS_TRANSACTION_ATTEMPTS_MAX)
static void dns_transaction_reset_answer(DnsTransaction *t) {
assert(t);
@@ -1600,13 +1597,10 @@
case DNS_PROTOCOL_DNS:
- /* When we do TCP, grant a much longer timeout, as in this case there's no need for us to quickly
- * resend, as the kernel does that anyway for us, and we really don't want to interrupt it in that
- * needlessly. */
if (t->stream)
return TRANSACTION_TCP_TIMEOUT_USEC;
- return DNS_TIMEOUT_USEC;
+ return TRANSACTION_UDP_TIMEOUT_USEC;
case DNS_PROTOCOL_MDNS:
if (t->probing)
diff -Nru systemd-252.33/src/resolve/resolved-dns-transaction.h systemd-252.36/src/resolve/resolved-dns-transaction.h
--- systemd-252.33/src/resolve/resolved-dns-transaction.h 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-transaction.h 2025-03-06 11:43:10.000000000 +0000
@@ -202,24 +202,3 @@
const char* dns_transaction_source_to_string(DnsTransactionSource p) _const_;
DnsTransactionSource dns_transaction_source_from_string(const char *s) _pure_;
-
-/* LLMNR Jitter interval, see RFC 4795 Section 7 */
-#define LLMNR_JITTER_INTERVAL_USEC (100 * USEC_PER_MSEC)
-
-/* mDNS probing interval, see RFC 6762 Section 8.1 */
-#define MDNS_PROBING_INTERVAL_USEC (250 * USEC_PER_MSEC)
-
-/* Maximum attempts to send DNS requests, across all DNS servers */
-#define DNS_TRANSACTION_ATTEMPTS_MAX 24
-
-/* Maximum attempts to send LLMNR requests, see RFC 4795 Section 2.7 */
-#define LLMNR_TRANSACTION_ATTEMPTS_MAX 3
-
-/* Maximum attempts to send MDNS requests, see RFC 6762 Section 8.1 */
-#define MDNS_TRANSACTION_ATTEMPTS_MAX 3
-
-#define TRANSACTION_ATTEMPTS_MAX(p) ((p) == DNS_PROTOCOL_LLMNR ? \
- LLMNR_TRANSACTION_ATTEMPTS_MAX : \
- (p) == DNS_PROTOCOL_MDNS ? \
- MDNS_TRANSACTION_ATTEMPTS_MAX : \
- DNS_TRANSACTION_ATTEMPTS_MAX)
diff -Nru systemd-252.33/src/resolve/resolved-dns-trust-anchor.c systemd-252.36/src/resolve/resolved-dns-trust-anchor.c
--- systemd-252.33/src/resolve/resolved-dns-trust-anchor.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-trust-anchor.c 2025-03-06 11:43:10.000000000 +0000
@@ -25,6 +25,10 @@
{ 0xE0, 0x6D, 0x44, 0xB8, 0x0B, 0x8F, 0x1D, 0x39, 0xA9, 0x5C, 0x0B, 0x0D, 0x7C, 0x65, 0xD0, 0x84,
0x58, 0xE8, 0x80, 0x40, 0x9B, 0xBC, 0x68, 0x34, 0x57, 0x10, 0x42, 0x37, 0xC7, 0xF8, 0xEC, 0x8D };
+static const uint8_t root_digest3[] =
+ { 0x68, 0x3D, 0x2D, 0x0A, 0xCB, 0x8C, 0x9B, 0x71, 0x2A, 0x19, 0x48, 0xB2, 0x7F, 0x74, 0x12, 0x19,
+ 0x29, 0x8D, 0x0A, 0x45, 0x0D, 0x61, 0x2C, 0x48, 0x3A, 0xF4, 0x44, 0xA4, 0xC0, 0xFB, 0x2B, 0x16 };
+
static bool dns_trust_anchor_knows_domain_positive(DnsTrustAnchor *d, const char *name) {
assert(d);
@@ -95,6 +99,9 @@
r = add_root_ksk(answer, key, 20326, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest2, sizeof(root_digest2));
if (r < 0)
return r;
+ r = add_root_ksk(answer, key, 38696, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest3, sizeof(root_digest3));
+ if (r < 0)
+ return r;
r = hashmap_put(d->positive_by_key, key, answer);
if (r < 0)
diff -Nru systemd-252.33/src/resolve/resolved-timeouts.h systemd-252.36/src/resolve/resolved-timeouts.h
--- systemd-252.33/src/resolve/resolved-timeouts.h 1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/src/resolve/resolved-timeouts.h 2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "time-util.h"
+#include "resolved-def.h"
+
+/* LLMNR Jitter interval, see RFC 4795 Section 7 */
+#define LLMNR_JITTER_INTERVAL_USEC (100 * USEC_PER_MSEC)
+
+/* mDNS probing interval, see RFC 6762 Section 8.1 */
+#define MDNS_PROBING_INTERVAL_USEC (250 * USEC_PER_MSEC)
+
+/* Maximum attempts to send DNS requests, across all DNS servers */
+#define DNS_TRANSACTION_ATTEMPTS_MAX 24
+
+/* Maximum attempts to send LLMNR requests, see RFC 4795 Section 2.7 */
+#define LLMNR_TRANSACTION_ATTEMPTS_MAX 3
+
+/* Maximum attempts to send MDNS requests, see RFC 6762 Section 8.1 */
+#define MDNS_TRANSACTION_ATTEMPTS_MAX 3
+
+#define TRANSACTION_ATTEMPTS_MAX(p) (\
+ (p) == DNS_PROTOCOL_LLMNR ? \
+ LLMNR_TRANSACTION_ATTEMPTS_MAX : \
+ (p) == DNS_PROTOCOL_MDNS ? \
+ MDNS_TRANSACTION_ATTEMPTS_MAX : \
+ DNS_TRANSACTION_ATTEMPTS_MAX)
+
+/* After how much time to repeat classic DNS requests */
+#define TRANSACTION_UDP_TIMEOUT_USEC (SD_RESOLVED_QUERY_TIMEOUT_USEC / DNS_TRANSACTION_ATTEMPTS_MAX)
+
+/* When we do TCP, grant a much longer timeout, as in this case there's no need for us to quickly
+ * resend, as the kernel does that anyway for us, and we really don't want to interrupt it in that
+ * needlessly. */
+#define TRANSACTION_TCP_TIMEOUT_USEC (10 * USEC_PER_SEC)
+
+/* Should be longer than transaction timeout for a single UDP transaction, so we get at least
+ * one transaction retry before timeouting the whole candidate */
+#define CANDIDATE_EXPEDITED_TIMEOUT_USEC (TRANSACTION_UDP_TIMEOUT_USEC + 1 * USEC_PER_SEC)
diff -Nru systemd-252.33/src/shared/bus-wait-for-jobs.c systemd-252.36/src/shared/bus-wait-for-jobs.c
--- systemd-252.33/src/shared/bus-wait-for-jobs.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/bus-wait-for-jobs.c 2025-03-06 11:43:10.000000000 +0000
@@ -168,14 +168,15 @@
static const struct {
const char *result, *explanation;
} explanations[] = {
- { "resources", "of unavailable resources or another system error" },
- { "protocol", "the service did not take the steps required by its unit configuration" },
- { "timeout", "a timeout was exceeded" },
- { "exit-code", "the control process exited with error code" },
- { "signal", "a fatal signal was delivered to the control process" },
- { "core-dump", "a fatal signal was delivered causing the control process to dump core" },
- { "watchdog", "the service failed to send watchdog ping" },
- { "start-limit", "start of the service was attempted too often" }
+ { "resources", "of unavailable resources or another system error" },
+ { "protocol", "the service did not take the steps required by its unit configuration" },
+ { "timeout", "a timeout was exceeded" },
+ { "exit-code", "the control process exited with error code" },
+ { "signal", "a fatal signal was delivered to the control process" },
+ { "core-dump", "a fatal signal was delivered causing the control process to dump core" },
+ { "watchdog", "the service failed to send watchdog ping" },
+ { "start-limit-hit", "start of the service was attempted too often" },
+ { "oom-kill", "of an out-of-memory (OOM) siutation" },
};
assert(service);
@@ -220,7 +221,7 @@
finish:
/* For some results maybe additional explanation is required */
- if (streq_ptr(result, "start-limit"))
+ if (streq_ptr(result, "start-limit-hit"))
log_info("To force a start use \"%1$s reset-failed %2$s\"\n"
"followed by \"%1$s start %2$s\" again.",
systemctl,
diff -Nru systemd-252.33/src/shared/clock-util.c systemd-252.36/src/shared/clock-util.c
--- systemd-252.33/src/shared/clock-util.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/clock-util.c 2025-03-06 11:43:10.000000000 +0000
@@ -27,10 +27,11 @@
if (fd < 0)
return -errno;
- /* This leaves the timezone fields of struct tm
- * uninitialized! */
+ /* This leaves the timezone fields of struct tm uninitialized! */
if (ioctl(fd, RTC_RD_TIME, tm) < 0)
- return -errno;
+ /* Some drivers return -EINVAL in case the time could not be kept, i.e. power loss
+ * happened. Let's turn that into a clearly recognizable error */
+ return errno == EINVAL ? -ENODATA : -errno;
/* We don't know daylight saving, so we reset this in order not
* to confuse mktime(). */
diff -Nru systemd-252.33/src/shared/condition.c systemd-252.36/src/shared/condition.c
--- systemd-252.33/src/shared/condition.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/condition.c 2025-03-06 11:43:10.000000000 +0000
@@ -276,7 +276,9 @@
if (r < 0)
return log_debug_errno(r, "Failed to parse os-release: %m");
- r = version_or_fnmatch_compare(operator, actual_value, word);
+ /* If not found, use "". This means that missing and empty assignments
+ * in the file have the same result. */
+ r = version_or_fnmatch_compare(operator, strempty(actual_value), word);
if (r < 0)
return r;
if (!r)
diff -Nru systemd-252.33/src/shared/copy.c systemd-252.36/src/shared/copy.c
--- systemd-252.33/src/shared/copy.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/copy.c 2025-03-06 11:43:10.000000000 +0000
@@ -1052,11 +1052,16 @@
if (fchmod(fdt, st->st_mode & 07777) < 0)
r = -errno;
+ /* Run hardlink context cleanup now because it potentially changes timestamps */
+ hardlink_context_destroy(&our_hardlink_context);
(void) copy_xattr(dirfd(d), fdt, copy_flags);
(void) futimens(fdt, (struct timespec[]) { st->st_atim, st->st_mtim });
- } else if (FLAGS_SET(copy_flags, COPY_RESTORE_DIRECTORY_TIMESTAMPS))
+ } else if (FLAGS_SET(copy_flags, COPY_RESTORE_DIRECTORY_TIMESTAMPS)) {
+ /* Run hardlink context cleanup now because it potentially changes timestamps */
+ hardlink_context_destroy(&our_hardlink_context);
/* If the directory already exists, make sure the timestamps stay the same as before. */
(void) futimens(fdt, (struct timespec[]) { dt_st.st_atim, dt_st.st_mtim });
+ }
if (copy_flags & COPY_FSYNC_FULL) {
if (fsync(fdt) < 0)
diff -Nru systemd-252.33/src/shared/dissect-image.c systemd-252.36/src/shared/dissect-image.c
--- systemd-252.33/src/shared/dissect-image.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/dissect-image.c 2025-03-06 11:43:10.000000000 +0000
@@ -2774,7 +2774,7 @@
a = hexmem(root_hash, root_hash_size);
b = hexmem(verity->root_hash, verity->root_hash_size);
- return log_debug_errno(r, "Root hash in signature JSON data (%s) doesn't match configured hash (%s).", strna(a), strna(b));
+ return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Root hash in signature JSON data (%s) doesn't match configured hash (%s).", strna(a), strna(b));
}
sig = json_variant_by_key(v, "signature");
diff -Nru systemd-252.33/src/shared/hwdb-util.c systemd-252.36/src/shared/hwdb-util.c
--- systemd-252.33/src/shared/hwdb-util.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/hwdb-util.c 2025-03-06 11:43:10.000000000 +0000
@@ -469,7 +469,7 @@
_cleanup_fclose_ FILE *f = NULL;
_cleanup_strv_free_ char **match_list = NULL;
uint32_t line_number = 0;
- int r, err;
+ int r;
f = fopen(filename, "re");
if (!f)
@@ -509,24 +509,23 @@
break;
if (line[0] == ' ') {
- r = log_syntax(NULL, LOG_WARNING, filename, line_number, SYNTHETIC_ERRNO(EINVAL),
- "Match expected but got indented property \"%s\", ignoring line.", line);
+ log_syntax(NULL, LOG_WARNING, filename, line_number, 0,
+ "Match expected but got indented property \"%s\", ignoring line.", line);
break;
}
/* start of record, first match */
state = HW_MATCH;
- err = strv_extend(&match_list, line);
- if (err < 0)
- return err;
-
+ r = strv_extend(&match_list, line);
+ if (r < 0)
+ return r;
break;
case HW_MATCH:
if (len == 0) {
- r = log_syntax(NULL, LOG_WARNING, filename, line_number, SYNTHETIC_ERRNO(EINVAL),
- "Property expected, ignoring record with no properties.");
+ log_syntax(NULL, LOG_WARNING, filename, line_number, 0,
+ "Property expected, ignoring record with no properties.");
state = HW_NONE;
match_list = strv_free(match_list);
break;
@@ -534,18 +533,15 @@
if (line[0] != ' ') {
/* another match */
- err = strv_extend(&match_list, line);
- if (err < 0)
- return err;
-
+ r = strv_extend(&match_list, line);
+ if (r < 0)
+ return r;
break;
}
/* first data */
state = HW_DATA;
- err = insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
- if (err < 0)
- r = err;
+ (void) insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
break;
case HW_DATA:
@@ -557,16 +553,14 @@
}
if (line[0] != ' ') {
- r = log_syntax(NULL, LOG_WARNING, filename, line_number, SYNTHETIC_ERRNO(EINVAL),
- "Property or empty line expected, got \"%s\", ignoring record.", line);
+ log_syntax(NULL, LOG_WARNING, filename, line_number, 0,
+ "Property or empty line expected, got \"%s\", ignoring record.", line);
state = HW_NONE;
match_list = strv_free(match_list);
break;
}
- err = insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
- if (err < 0)
- r = err;
+ (void) insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
break;
};
}
diff -Nru systemd-252.33/src/shared/libfido2-util.c systemd-252.36/src/shared/libfido2-util.c
--- systemd-252.33/src/shared/libfido2-util.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/libfido2-util.c 2025-03-06 11:43:10.000000000 +0000
@@ -693,13 +693,17 @@
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Token asks for PIN but doesn't advertise 'clientPin' feature.");
+ AskPasswordFlags askpw_flags = ASK_PASSWORD_ACCEPT_CACHED;
+
for (;;) {
_cleanup_(strv_free_erasep) char **pin = NULL;
- r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, 0, &pin);
+ r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, askpw_flags, &pin);
if (r < 0)
return log_error_errno(r, "Failed to acquire user PIN: %m");
+ askpw_flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
+
r = FIDO_ERR_PIN_INVALID;
STRV_FOREACH(i, pin) {
if (isempty(*i)) {
diff -Nru systemd-252.33/src/shared/machine-id-setup.c systemd-252.36/src/shared/machine-id-setup.c
--- systemd-252.33/src/shared/machine-id-setup.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/machine-id-setup.c 2025-03-06 11:43:10.000000000 +0000
@@ -60,7 +60,7 @@
return 0;
}
- } else if (IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_AMAZON, VIRTUALIZATION_QEMU, VIRTUALIZATION_XEN)) {
+ } else if (IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_AMAZON, VIRTUALIZATION_QEMU, VIRTUALIZATION_XEN, VIRTUALIZATION_BHYVE)) {
/* If we are not running in a container, see if we are running in a VM that provides
* a system UUID via the SMBIOS/DMI interfaces. Such environments include QEMU/KVM
diff -Nru systemd-252.33/src/shared/serialize.c systemd-252.36/src/shared/serialize.c
--- systemd-252.33/src/shared/serialize.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/serialize.c 2025-03-06 11:43:10.000000000 +0000
@@ -23,10 +23,8 @@
/* Make sure that anything we serialize we can also read back again with read_line() with a maximum line size
* of LONG_LINE_MAX. This is a safety net only. All code calling us should filter this out earlier anyway. */
- if (strlen(key) + 1 + strlen(value) + 1 > LONG_LINE_MAX) {
- log_warning("Attempted to serialize overly long item '%s', refusing.", key);
- return -EINVAL;
- }
+ if (strlen(key) + 1 + strlen(value) + 1 > LONG_LINE_MAX)
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Attempted to serialize overly long item '%s', refusing.", key);
fputs(key, f);
fputc('=', f);
@@ -53,7 +51,10 @@
}
int serialize_item_format(FILE *f, const char *key, const char *format, ...) {
- char buf[LONG_LINE_MAX];
+ _cleanup_free_ char *allocated = NULL;
+ char buf[256]; /* Something resonably short that fits nicely on any stack (i.e. is considerably less
+ * than LONG_LINE_MAX (1MiB!) */
+ const char *b;
va_list ap;
int k;
@@ -61,18 +62,35 @@
assert(key);
assert(format);
+ /* First, let's try to format this into a stack buffer */
va_start(ap, format);
k = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap);
- if (k < 0 || (size_t) k >= sizeof(buf) || strlen(key) + 1 + k + 1 > LONG_LINE_MAX) {
- log_warning("Attempted to serialize overly long item '%s', refusing.", key);
- return -EINVAL;
+ if (k < 0)
+ return log_warning_errno(errno, "Failed to serialize item '%s', ignoring: %m", key);
+ if (strlen(key) + 1 + k + 1 > LONG_LINE_MAX) /* See above */
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Attempted to serialize overly long item '%s', refusing.", key);
+
+ if ((size_t) k < sizeof(buf))
+ b = buf; /* Yay, it fit! */
+ else {
+ /* So the string didn't fit in the short buffer above, but was not above our total limit,
+ * hence let's format it via dynamic memory */
+
+ va_start(ap, format);
+ k = vasprintf(&allocated, format, ap);
+ va_end(ap);
+
+ if (k < 0)
+ return log_warning_errno(errno, "Failed to serialize item '%s', ignoring: %m", key);
+
+ b = allocated;
}
fputs(key, f);
fputc('=', f);
- fputs(buf, f);
+ fputs(b, f);
fputc('\n', f);
return 1;
diff -Nru systemd-252.33/src/shared/userdb.c systemd-252.36/src/shared/userdb.c
--- systemd-252.33/src/shared/userdb.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/userdb.c 2025-03-06 11:43:10.000000000 +0000
@@ -773,6 +773,7 @@
/* If NSS isn't covered elsewhere, let's iterate through it first, since it probably contains
* the more traditional sources, which are probably good to show first. */
+ errno = 0;
pw = getpwent();
if (pw) {
_cleanup_free_ char *buffer = NULL;
diff -Nru systemd-252.33/src/stdio-bridge/stdio-bridge.c systemd-252.36/src/stdio-bridge/stdio-bridge.c
--- systemd-252.33/src/stdio-bridge/stdio-bridge.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/stdio-bridge/stdio-bridge.c 2025-03-06 11:43:10.000000000 +0000
@@ -244,9 +244,9 @@
t = usec_sub_unsigned(MIN(timeout_a, timeout_b), now(CLOCK_MONOTONIC));
struct pollfd p[3] = {
- { .fd = fd, .events = events_a },
- { .fd = STDIN_FILENO, .events = events_b & POLLIN },
- { .fd = STDOUT_FILENO, .events = events_b & POLLOUT },
+ { .fd = fd, .events = events_a },
+ { .fd = in_fd, .events = events_b & POLLIN },
+ { .fd = out_fd, .events = events_b & POLLOUT },
};
r = ppoll_usec(p, ELEMENTSOF(p), t);
diff -Nru systemd-252.33/src/systemctl/systemctl-is-system-running.c systemd-252.36/src/systemctl/systemctl-is-system-running.c
--- systemd-252.33/src/systemctl/systemctl-is-system-running.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/systemctl/systemctl-is-system-running.c 2025-03-06 11:43:10.000000000 +0000
@@ -66,6 +66,10 @@
}
if (arg_wait && STR_IN_SET(state, "initializing", "starting")) {
+ /* The signal handler will allocate memory and assign to 'state', hence need to free previous
+ * one before entering the event loop. */
+ state = mfree(state);
+
r = sd_event_loop(event);
if (r < 0) {
log_warning_errno(r, "Failed to get property from event loop: %m");
@@ -73,6 +77,8 @@
puts("unknown");
return EXIT_FAILURE;
}
+
+ assert(state);
}
if (!arg_quiet)
diff -Nru systemd-252.33/src/test/test-condition.c systemd-252.36/src/test/test-condition.c
--- systemd-252.33/src/test/test-condition.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/test/test-condition.c 2025-03-06 11:43:10.000000000 +0000
@@ -1238,6 +1238,24 @@
assert_se(condition_test(condition, environ) > 0);
condition_free(condition);
+ /* Test shell style globs */
+
+ assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_LIKE$=*THISHOPEFULLYWONTEXIST*", false, false)));
+ assert_se(condition_test(condition, environ) == 0);
+ condition_free(condition);
+
+ assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_THISHOPEFULLYWONTEXIST$=*rhel*", false, false)));
+ assert_se(condition_test(condition, environ) == 0);
+ condition_free(condition);
+
+ assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_LIKE!$=*THISHOPEFULLYWONTEXIST*", false, false)));
+ assert_se(condition_test(condition, environ) >= 0);
+ condition_free(condition);
+
+ assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_THISHOPEFULLYWONTEXIST!$=*rhel*", false, false)));
+ assert_se(condition_test(condition, environ) >= 0);
+ condition_free(condition);
+
/* load_os_release_pairs() removes quotes, we have to add them back,
* otherwise we get a string: "PRETTY_NAME=Debian GNU/Linux 10 (buster)"
* which is wrong, as the value is not quoted anymore. */
diff -Nru systemd-252.33/src/test/test-fd-util.c systemd-252.36/src/test/test-fd-util.c
--- systemd-252.33/src/test/test-fd-util.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/test/test-fd-util.c 2025-03-06 11:43:10.000000000 +0000
@@ -347,6 +347,8 @@
test_close_all_fds_inner();
_exit(EXIT_SUCCESS);
}
+ if (ERRNO_IS_PRIVILEGE(r))
+ return (void) log_tests_skipped("Lacking privileges for test in namespace with /proc/ overmounted");
assert_se(r >= 0);
if (!is_seccomp_available()) {
diff -Nru systemd-252.33/src/test/test-loop-block.c systemd-252.36/src/test/test-loop-block.c
--- systemd-252.33/src/test/test-loop-block.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/test/test-loop-block.c 2025-03-06 11:43:10.000000000 +0000
@@ -218,15 +218,11 @@
dissected = dissected_image_unref(dissected);
#endif
- if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) {
- log_tests_skipped("not running privileged");
- return 0;
- }
+ if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0)
+ return log_tests_skipped("not running privileged");
- if (detect_container() > 0) {
- log_tests_skipped("Test not supported in a container, requires udev/uevent notifications");
- return 0;
- }
+ if (detect_container() > 0)
+ return log_tests_skipped("Test not supported in a container, requires udev/uevent notifications");
assert_se(loop_device_make(fd, O_RDWR, 0, UINT64_MAX, 0, LO_FLAGS_PARTSCAN, LOCK_EX, &loop) >= 0);
diff -Nru systemd-252.33/src/timedate/timedated.c systemd-252.36/src/timedate/timedated.c
--- systemd-252.33/src/timedate/timedated.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/timedate/timedated.c 2025-03-06 11:43:10.000000000 +0000
@@ -590,6 +590,8 @@
log_warning("/dev/rtc is busy. Is somebody keeping it open continuously? That's not a good idea... Returning a bogus RTC timestamp.");
else if (r == -ENOENT)
log_debug("/dev/rtc not found.");
+ else if (r == -ENODATA)
+ log_debug("/dev/rtc has no valid time, power loss probably occurred?");
else if (r < 0)
return sd_bus_error_set_errnof(error, r, "Failed to read RTC: %m");
else
diff -Nru systemd-252.33/src/tmpfiles/tmpfiles.c systemd-252.36/src/tmpfiles/tmpfiles.c
--- systemd-252.33/src/tmpfiles/tmpfiles.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/tmpfiles/tmpfiles.c 2025-03-06 11:43:10.000000000 +0000
@@ -2048,7 +2048,7 @@
if (r < 0)
return log_error_errno(r, "Failed to extract filename from path '%s': %m", i->path);
if (r == O_DIRECTORY)
- return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for creating FIFO, is a directory.", i->path);
+ return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for creating symlink, is a directory.", i->path);
pfd = path_open_parent_safe(i->path, i->allow_failure);
if (pfd < 0)
diff -Nru systemd-252.33/src/udev/generate-keyboard-keys-list.sh systemd-252.36/src/udev/generate-keyboard-keys-list.sh
--- systemd-252.33/src/udev/generate-keyboard-keys-list.sh 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/udev/generate-keyboard-keys-list.sh 2025-03-06 11:43:10.000000000 +0000
@@ -3,7 +3,7 @@
set -eu
set -o pipefail
-${1:?} -dM -include linux/input.h - </dev/null | awk '
+${1:?} -dM -include "${2:?}" - </dev/null | awk '
/\<(KEY_(MAX|MIN_INTERESTING))|(BTN_(MISC|MOUSE|JOYSTICK|GAMEPAD|DIGI|WHEEL|TRIGGER_HAPPY))\>/ { next }
/^#define[ \t]+(KEY|BTN)_[^ ]+[ \t]+[0-9BK]/ { print $2 }
'
diff -Nru systemd-252.33/src/udev/meson.build systemd-252.36/src/udev/meson.build
--- systemd-252.33/src/udev/meson.build 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/udev/meson.build 2025-03-06 11:43:10.000000000 +0000
@@ -60,8 +60,9 @@
generate_keyboard_keys_list = find_program('generate-keyboard-keys-list.sh')
keyboard_keys_list_txt = custom_target(
'keyboard-keys-list.txt',
+ input : files('../basic/linux/input.h'),
output : 'keyboard-keys-list.txt',
- command : [generate_keyboard_keys_list, cpp],
+ command : [generate_keyboard_keys_list, cpp, '@INPUT@'],
capture : true)
generate_keyboard_keys_gperf = find_program('generate-keyboard-keys-gperf.sh')
diff -Nru systemd-252.33/src/udev/udev-watch.c systemd-252.36/src/udev/udev-watch.c
--- systemd-252.33/src/udev/udev-watch.c 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/udev/udev-watch.c 2025-03-06 11:43:10.000000000 +0000
@@ -160,13 +160,13 @@
if (ret_wd)
*ret_wd = wd;
- r = 0;
+ r = 1;
finalize:
/* 5. remove symlink ID -> wd.
* The file is always owned by the device. Hence, it is safe to remove it unconditionally. */
if (unlinkat(dirfd, id, 0) < 0 && errno != ENOENT)
- log_device_debug_errno(dev, errno, "Failed to remove '/run/udev/watch/%s': %m", id);
+ log_device_debug_errno(dev, errno, "Failed to remove '/run/udev/watch/%s', ignoring: %m", id);
return r;
}
@@ -245,7 +245,7 @@
/* First, clear symlinks. */
r = udev_watch_clear(dev, dirfd, &wd);
- if (r < 0)
+ if (r <= 0)
return r;
/* Then, remove inotify watch. */
diff -Nru systemd-252.33/test/fuzz/fuzz-compress/issue-36472 systemd-252.36/test/fuzz/fuzz-compress/issue-36472
--- systemd-252.33/test/fuzz/fuzz-compress/issue-36472 1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/test/fuzz/fuzz-compress/issue-36472 2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1 @@
+�000000000�00000000000000000000
diff -Nru systemd-252.33/test/fuzz/.gitattributes systemd-252.36/test/fuzz/.gitattributes
--- systemd-252.33/test/fuzz/.gitattributes 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/fuzz/.gitattributes 2025-03-06 11:43:10.000000000 +0000
@@ -1,5 +1,6 @@
/*/* -whitespace
/fuzz-bus-match/* binary
+/fuzz-compress/* binary
/fuzz-dhcp*/* binary
/fuzz-dns-packet/* binary
/fuzz-fido-id-desc/ binary
diff -Nru systemd-252.33/test/knot-data/knot.conf systemd-252.36/test/knot-data/knot.conf
--- systemd-252.33/test/knot-data/knot.conf 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/knot-data/knot.conf 2025-03-06 11:43:10.000000000 +0000
@@ -50,6 +50,7 @@
ksk-submission: parent_zone_sbm
nsec3-iterations: 0
nsec3: on
+ nsec3-salt-length: 8
propagation-delay: 1s
signing-threads: 4
zone-max-ttl: 1s
diff -Nru systemd-252.33/test/test-keymap-util/kbd-model-map systemd-252.36/test/test-keymap-util/kbd-model-map
--- systemd-252.33/test/test-keymap-util/kbd-model-map 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/test-keymap-util/kbd-model-map 2025-03-06 11:43:10.000000000 +0000
@@ -70,3 +70,4 @@
es-dvorak es microsoftpro dvorak terminate:ctrl_alt_bksp
lv lv pc105 apostrophe terminate:ctrl_alt_bksp
lv-tilde lv pc105 tilde terminate:ctrl_alt_bksp
+ge ge,us pc105 - terminate:ctrl_alt_bksp
diff -Nru systemd-252.33/test/test-network/conf/25-routing-policy-rule-manual.network systemd-252.36/test/test-network/conf/25-routing-policy-rule-manual.network
--- systemd-252.33/test/test-network/conf/25-routing-policy-rule-manual.network 1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/test/test-network/conf/25-routing-policy-rule-manual.network 2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Match]
+Name=test1
+Name=test2
+
+[Link]
+ActivationPolicy=manual
+
+[Network]
+IPv6AcceptRA=no
+
+[RoutingPolicyRule]
+Family=both
+Priority=10
+SuppressPrefixLength=0
+Table=51819
+
+[RoutingPolicyRule]
+Family=both
+FirewallMark=911
+InvertRule=true
+Priority=11
+Table=51820
diff -Nru systemd-252.33/test/test-network/systemd-networkd-tests.py systemd-252.36/test/test-network/systemd-networkd-tests.py
--- systemd-252.33/test/test-network/systemd-networkd-tests.py 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/test-network/systemd-networkd-tests.py 2025-03-06 11:43:10.000000000 +0000
@@ -2626,6 +2626,45 @@
print(output)
self.assertIn('10113: from all iif test1 lookup 1011', output)
+ def test_routing_policy_rule_manual(self):
+ # For issue #36244.
+ copy_network_unit(
+ '11-dummy.netdev',
+ '25-routing-policy-rule-manual.network')
+ start_networkd()
+ self.wait_operstate('test1', operstate='off', setup_state='configuring', setup_timeout=20)
+
+ check_output('ip link add test2 type dummy')
+ self.wait_operstate('test2', operstate='off', setup_state='configuring', setup_timeout=20)
+
+ networkctl('up', 'test2')
+ self.wait_online('test2:degraded')
+
+ # The request for the routing policy rules are bound to test1. Hence, we need to wait for the rules
+ # being configured explicitly.
+ for _ in range(20):
+ time.sleep(0.5)
+
+ output = check_output('ip -4 rule list table 51819')
+ if output != '10: from all lookup 51819 suppress_prefixlength 0 proto static':
+ continue
+
+ output = check_output('ip -6 rule list table 51819')
+ if output != '10: from all lookup 51819 suppress_prefixlength 0 proto static':
+ continue
+
+ output = check_output('ip -4 rule list table 51820')
+ if output != '11: not from all fwmark 0x38f lookup 51820 proto static':
+ continue
+
+ output = check_output('ip -6 rule list table 51820')
+ if output != '11: not from all fwmark 0x38f lookup 51820 proto static':
+ continue
+
+ break
+ else:
+ self.assertFalse(True)
+
@expectedFailureIfRoutingPolicyPortRangeIsNotAvailable()
def test_routing_policy_rule_port_range(self):
copy_network_unit('25-fibrule-port-range.network', '11-dummy.netdev')
diff -Nru systemd-252.33/test/units/testsuite-64.sh systemd-252.36/test/units/testsuite-64.sh
--- systemd-252.33/test/units/testsuite-64.sh 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/units/testsuite-64.sh 2025-03-06 11:43:10.000000000 +0000
@@ -832,7 +832,7 @@
"/dev/disk/by-label/$part_name" # ext4 partition
)
# Create a simple RAID 1 with an ext4 filesystem
- echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..1} -v -f --level=1 --raid-devices=2
+ printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..1} -v -f --level=1 --raid-devices=2
udevadm wait --settle --timeout=30 "$raid_dev"
mkfs.ext4 -L "$part_name" "$raid_dev"
udevadm wait --settle --timeout=30 "${expected_symlinks[@]}"
@@ -861,7 +861,7 @@
"/dev/disk/by-label/$part_name" # ext4 partition
)
# Create a simple RAID 5 with an ext4 filesystem
- echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..2} -v -f --level=5 --raid-devices=3
+ printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..2} -v -f --level=5 --raid-devices=3
udevadm wait --settle --timeout=30 "$raid_dev"
mkfs.ext4 -L "$part_name" "$raid_dev"
udevadm wait --settle --timeout=30 "${expected_symlinks[@]}"
@@ -901,7 +901,7 @@
"/dev/disk/by-id/md-uuid-$uuid-part3"
)
# Create a simple RAID 10 with an ext4 filesystem
- echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..3} -v -f --level=10 --raid-devices=4
+ printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..3} -v -f --level=10 --raid-devices=4
udevadm wait --settle --timeout=30 "$raid_dev"
# Partition the raid device
# Here, 'udevadm lock' is meaningless, as udevd does not lock MD devices.
@@ -954,7 +954,7 @@
"/dev/disk/by-label/$part_name" # ext4 partition
)
# Create a RAID 10 with LVM + ext4
- echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadmlvm{0..3} -v -f --level=10 --raid-devices=4
+ printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadmlvm{0..3} -v -f --level=10 --raid-devices=4
udevadm wait --settle --timeout=30 "$raid_dev"
# Create an LVM on the MD
lvm pvcreate -y "$raid_dev"
diff -Nru systemd-252.33/tools/dbus_exporter.py systemd-252.36/tools/dbus_exporter.py
--- systemd-252.33/tools/dbus_exporter.py 2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/tools/dbus_exporter.py 2025-03-06 11:43:10.000000000 +0000
@@ -1,13 +1,21 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1-or-later
+import os
from argparse import ArgumentParser
from pathlib import Path
from subprocess import run, PIPE
def extract_interfaces_xml(output_dir, executable):
+ # If proc is not mounted, set LD_ORIGIN_PATH so that shared/core libs can be found,
+ # as glibc looks at /proc/self/exe when resolving RPATH
+ env = os.environ.copy()
+ if not os.path.exists('/proc/self'):
+ env["LD_ORIGIN_PATH"] = executable.parent.as_posix()
+
proc = run(
args=[executable.absolute(), '--bus-introspect', 'list'],
stdout=PIPE,
+ env=env,
check=True,
universal_newlines=True)
@@ -17,6 +25,7 @@
proc = run(
args=[executable.absolute(), '--bus-introspect', interface_name],
stdout=PIPE,
+ env=env,
check=True,
universal_newlines=True)
Attachment:
signature.asc
Description: This is a digitally signed message part