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