Compare commits

..

No commits in common. "961b341e8537a69455c130b98b50f51ed011e362" and "d3dcf4e3b95e3d3149ee169dc13b43e2e1a02cec" have entirely different histories.

24 changed files with 207 additions and 163 deletions

View File

@ -5,8 +5,8 @@
# Match string formats:
# <subsystem>:<modalias>
#
# pci:v<vendor>d<device>
# usb:v<vendor>p<product>
# pci:v<vendor>d<device>:
# usb:v<vendor>p<product>:
#
# To add local entries, create a new file
# /etc/udev/hwdb.d/61-autosuspend-local.hwdb
@ -24,6 +24,8 @@
#
# Allowed properties are:
# ID_AUTOSUSPEND=1
#
# All matches should end in ':*' to allow future expansions of the match key.
# Sort by brand, model
@ -32,7 +34,7 @@
#########################################
# AU9540 Smartcard Reader
usb:v058Fp9540*
usb:v058Fp9540:*
ID_AUTOSUSPEND=1
#########################################
@ -40,9 +42,9 @@ usb:v058Fp9540*
#########################################
# X1C8 Touchscreen
usb:v04F3p2B7C*
usb:v04F3p2B7C:*
# T14 Gen 1 Touchscreen
usb:v04F3p2ACC*
usb:v04F3p2ACC:*
ID_AUTOSUSPEND=1
#########################################
@ -50,14 +52,14 @@ usb:v04F3p2ACC*
#########################################
# Emulated USB HID devices
usb:v0627p0001:*QEMU USB Keyboard*
usb:v0627p0001:*QEMU USB Mouse*
usb:v0627p0001:*QEMU USB Tablet*
usb:v0627p0001:*QEMU USB Keyboard*:*
usb:v0627p0001:*QEMU USB Mouse*:*
usb:v0627p0001:*QEMU USB Tablet*:*
ID_AUTOSUSPEND=1
#########################################
# Wacom
#########################################
usb:v056Ap51A0*
usb:v056Ap51A0:*
ID_AUTOSUSPEND=1

View File

@ -35,6 +35,8 @@
# the struct input_absinfo as listed in linux/input.h. If a field is missing
# the field will be left as-is. Not all fields need to be present. e.g. ::45
# sets the resolution to 45 units/mm.
#
# All matches should end in ':*' to allow future expansions of the match key.
# Sort by brand, model
@ -43,9 +45,9 @@
#########################################
# Hyperpen 12000U
evdev:input:b0003v08CAp0010*
evdev:input:b0003v08CAp0010:*
# Hyperpen 6000U
evdev:input:b0003v08CAp0020*
evdev:input:b0003v08CAp0020:*
EVDEV_ABS_00=::20
EVDEV_ABS_01=::20
@ -54,48 +56,48 @@ evdev:input:b0003v08CAp0020*
#########################################
# Macbook2,1 (late 2006), single-button touchpad
evdev:input:b0003v05ACp021B*
evdev:input:b0003v05ACp021B:*
# Macbook4,1
evdev:input:b0003v05ACp0229*
evdev:input:b0003v05ACp022A*
evdev:input:b0003v05ACp0229:*
evdev:input:b0003v05ACp022A:*
EVDEV_ABS_00=256:1471:12
EVDEV_ABS_01=256:831:12
# Macbook5,1 (unibody), aka wellspring3
evdev:input:b0003v05ACp0236*
evdev:input:b0003v05ACp0237*
evdev:input:b0003v05ACp0238*
evdev:input:b0003v05ACp0236:*
evdev:input:b0003v05ACp0237:*
evdev:input:b0003v05ACp0238:*
EVDEV_ABS_00=::92
EVDEV_ABS_01=::90
EVDEV_ABS_35=::92
EVDEV_ABS_36=::90
# Macbook8 (unibody, March 2011)
evdev:input:b0003v05ACp0245*
evdev:input:b0003v05ACp0246*
evdev:input:b0003v05ACp0247*
evdev:input:b0003v05ACp0245:*
evdev:input:b0003v05ACp0246:*
evdev:input:b0003v05ACp0247:*
EVDEV_ABS_00=::92
EVDEV_ABS_01=::91
EVDEV_ABS_35=::92
EVDEV_ABS_36=::91
# Macbook8,2 (unibody)
evdev:input:b0003v05ACp0252*
evdev:input:b0003v05ACp0253*
evdev:input:b0003v05ACp0254*
evdev:input:b0003v05ACp0252:*
evdev:input:b0003v05ACp0253:*
evdev:input:b0003v05ACp0254:*
EVDEV_ABS_00=::94
EVDEV_ABS_01=::92
EVDEV_ABS_35=::94
EVDEV_ABS_36=::92
# MacbookPro10,1 (unibody, June 2012)
evdev:input:b0003v05ACp0262*
evdev:input:b0003v05ACp0263*
evdev:input:b0003v05ACp0264*
evdev:input:b0003v05ACp0262:*
evdev:input:b0003v05ACp0263:*
evdev:input:b0003v05ACp0264:*
# MacbookPro10,2 (unibody, October 2012)
evdev:input:b0003v05ACp0259*
evdev:input:b0003v05ACp025A*
evdev:input:b0003v05ACp025B*
evdev:input:b0003v05ACp0259:*
evdev:input:b0003v05ACp025A:*
evdev:input:b0003v05ACp025B:*
EVDEV_ABS_00=::94
EVDEV_ABS_01=::92
EVDEV_ABS_35=::94
@ -292,7 +294,7 @@ evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:bvn*:bvr*:bd*:svnDellInc.:pnXPSM1530:*
#####
# Fujitsu Component - USB Touch Panel
evdev:input:b0003v0430p0530*
evdev:input:b0003v0430p0530:*
EVDEV_ABS_00=0:4096:16
EVDEV_ABS_01=0:4096:16
@ -444,7 +446,7 @@ evdev:name:Synaptics TM3289-002:dmi:*svnLENOVO*:pvrThinkPadX1Carbon5th:*
EVDEV_ABS_36=::19
# Lenovo Thinkpad X1 Tablet Gen3
evdev:input:b0003v17EFp60B5*
evdev:input:b0003v17EFp60B5:*
EVDEV_ABS_00=::12
EVDEV_ABS_01=::11
EVDEV_ABS_35=::12
@ -637,7 +639,7 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnTOSHIBA:pnSATELLITER830:*
#########################################
# Trust Flex Graphics Tablet
evdev:input:b0003v2179p0004*
evdev:input:b0003v2179p0004:*
EVDEV_ABS_00=::234
EVDEV_ABS_01=::328
@ -646,11 +648,11 @@ evdev:input:b0003v2179p0004*
#########################################
# WALTOP International Corp. Slim Tablet
evdev:input:b0003v172Fp0031*
evdev:input:b0003v172Fp0031:*
EVDEV_ABS_00=0:10000:400
EVDEV_ABS_01=0:6250:400
#WALTOP International Corp. Graphics Tablet
evdev:input:b0003v172Fp0047*
evdev:input:b0003v172Fp0047:*
EVDEV_ABS_00=0:20000:80
EVDEV_ABS_01=0:12500:80

View File

@ -9,7 +9,7 @@
# ABI.
#
# Match string formats:
# id-input:modalias:<modalias>
# id-input:modalias:<modalias pattern>
#
# To add local entries, create a new file
# /etc/udev/hwdb.d/61-input-id-local.hwdb
@ -48,27 +48,28 @@
# NOT allowed in this file are:
# ID_INPUT_WIDTH_MM, ID_INPUT_HEIGHT_MM, ID_INPUT_TOUCHPAD_INTEGRATION
#
# All matches should end in ':*' to allow future expansions of the match key.
# Example:
# id-input:modalias:input:b0003v1234pABCD*
# id-input:modalias:input:b0003v1234pABCD:*
# ID_INPUT_TOUCHPAD=1
# ID_INPUT=1
# Sort by brand, model
# UC-Logic TABLET 1060N Pad
id-input:modalias:input:b0003v5543p0081*
id-input:modalias:input:b0003v5543p0081:*
ID_INPUT_TABLET=1
ID_INPUT_TABLET_PAD=1
# XP-PEN STAR 06
id-input:modalias:input:b0003v28bdp0078*
id-input:modalias:input:b0003v28bdp0078:*
ID_INPUT_TABLET=1
# Lite-On Tech IBM USB Travel Keyboard with Ultra Nav Mouse
id-input:modalias:input:b0003v04B3p301Ee0100-e0,1,2,4*
id-input:modalias:input:b0003v04B3p301Ee0100-e0,1,2,4*:*
ID_INPUT_POINTINGSTICK=1
# Logitech Ultrathin Touch Mouse
id-input:modalias:input:b0005v046DpB00De0700*
id-input:modalias:input:b0005v046DpB00De0700:*
ID_INPUT_MOUSE=1

View File

@ -47,6 +47,8 @@
# /sys/class/input/input?/capabilities/ev" and <vendor> is the
# firmware-provided string exported by the kernel DMI modalias,
# see /sys/class/dmi/id/modalias
#
# All matches should end in ':*' to allow future expansions of the match key.
# ######################### KEY MAPPING ######################################
#
@ -228,7 +230,7 @@ evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
KEYBOARD_KEY_6b=f21 # Touchpad Toggle
# USB keyboard in Asus FX503VD
evdev:input:b0003v0B05p1869*
evdev:input:b0003v0B05p1869:*
KEYBOARD_KEY_ff31007c=f20 # Remap micmute to f20
###########################################################
@ -266,7 +268,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnCompaq*:pn*Evo*N*:*
KEYBOARD_KEY_9e=email
KEYBOARD_KEY_9f=homepage
evdev:input:b0003v049Fp0051*
evdev:input:b0003v049Fp0051:*
KEYBOARD_KEY_0c0011=presentation
KEYBOARD_KEY_0c0012=addressbook
KEYBOARD_KEY_0c0013=info
@ -463,7 +465,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnGeminiDevices:pnNC14V1006:*
###########################################################
# Slimstar 320
evdev:input:b0003v0458p0708*
evdev:input:b0003v0458p0708:*
KEYBOARD_KEY_0900f0=scrollup
KEYBOARD_KEY_0900f1=scrolldown
KEYBOARD_KEY_0900f3=back
@ -713,7 +715,7 @@ evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnIBM*:pn*:*
KEYBOARD_KEY_17=prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor")
# IBM Thinkpad USB Keyboard Trackpoint
evdev:input:b0003v04B3p301[89]*
evdev:input:b0003v04B3p301[89]:*
KEYBOARD_KEY_900f0=screenlock
KEYBOARD_KEY_900f1=wlan
KEYBOARD_KEY_900f2=switchvideomode
@ -757,7 +759,7 @@ evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:*
KEYBOARD_KEY_45=bookmarks
# ThinkPad Keyboard with TrackPoint
evdev:input:b0003v17EFp6009*
evdev:input:b0003v17EFp6009:*
KEYBOARD_KEY_090012=screenlock # Fn+F2
KEYBOARD_KEY_090013=battery # Fn+F3
KEYBOARD_KEY_090014=wlan # Fn+F5
@ -864,7 +866,7 @@ evdev:name:Microphone Mute Button:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:*
KEYBOARD_KEY_00=f20
# enhanced USB keyboard
evdev:input:b0003v04B3p301B*
evdev:input:b0003v04B3p301B:*
KEYBOARD_KEY_90001=prog1 # ThinkVantage
KEYBOARD_KEY_90002=screenlock
KEYBOARD_KEY_90003=file
@ -882,7 +884,7 @@ evdev:input:b0003v04B3p301B*
# 27MHz wireless keyboards, these all have a PID of 00?? and all send c10xx
# logitech custom consumer usage-page codes. The mappings below are the most
# common, but some mapping may differ, especially the Fn F1-F12 mappings
evdev:input:b0003v046Dp00*
evdev:input:b0003v046Dp00??:*
KEYBOARD_KEY_c0183=media # HUT:config, kbd:Media/Music player button
KEYBOARD_KEY_c1001=chat # Messenger button
KEYBOARD_KEY_c1002=camera # Webcam button
@ -932,7 +934,7 @@ evdev:input:b0003v046Dp00*
KEYBOARD_KEY_c104c=prog4 # Smartkey D (Fn + F12) → XF86Launch4
# Cordless Access Keyboard (27 MHz, modelnumber Y-RH35)
evdev:input:b0003v046Dp0042*
evdev:input:b0003v046Dp0042:*
KEYBOARD_KEY_c1041=new
KEYBOARD_KEY_c1042=reply
KEYBOARD_KEY_c1043=forward
@ -947,7 +949,7 @@ evdev:input:b0003v046Dp0042*
KEYBOARD_KEY_c104c=audio
# "Cordless Rechargeable Desktop" keyboard (27 MHz, modelnumber Y-RK49)
evdev:input:b0003v046Dp0045*
evdev:input:b0003v046Dp0045:*
KEYBOARD_KEY_c1041=new
KEYBOARD_KEY_c1042=reply
KEYBOARD_KEY_c1043=forward
@ -958,7 +960,7 @@ evdev:input:b0003v046Dp0045*
KEYBOARD_KEY_c104c=audio
# S510 keyboard (27 MHz, modelnumber Y-RAK73)
evdev:input:b0003v046Dp0056*
evdev:input:b0003v046Dp0056:*
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
# MX3000 keyboard (27 MHz, modelnumber Y-RAM74)
@ -967,7 +969,7 @@ evdev:input:b0003v046Dp0056*
# Note if the "Special Button Function" in the HID++ features register gets
# cleared then the scroll-wheel events for these buttons go away and then
# tilting the scrollwheel left/right starts sending c1022 / c1024 events
evdev:input:b0003v046Dp0057*
evdev:input:b0003v046Dp0057:*
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
#KEYBOARD_KEY_c101d=scrolldown # Button below scrollwheel (see note above)
@ -976,7 +978,7 @@ evdev:input:b0003v046Dp0057*
#KEYBOARD_KEY_c1024=scrollright # Right click on scroll-wheel (see note above)
# MX3200 keyboard (27 MHz, modelnumber Y-RAV80)
evdev:input:b0003v046Dp005C*
evdev:input:b0003v046Dp005C:*
KEYBOARD_KEY_c1001=phone # VOIP button
KEYBOARD_KEY_c1016=record # Record button
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
@ -989,13 +991,13 @@ evdev:input:b0003v046Dp005C*
KEYBOARD_KEY_c1048=prog4 # Smartkey D (Fn + F8) → XF86Launch4
# EX100 keyboard (27 MHz, modelnumber Y-RBH94)
evdev:input:b0003v046Dp0065*
evdev:input:b0003v046Dp0065:*
KEYBOARD_KEY_c104b=battery # Battery icon (Fn + F11)
KEYBOARD_KEY_c104c=ejectcd # Eject icon (Fn + F12)
# S520 keyboard (27 MHz, modelnumber Y-RBA97)
# Note this one uses non-standard codes for FN + F9 - Fn + F12?
evdev:input:b0003v046Dp0066*
evdev:input:b0003v046Dp0066:*
KEYBOARD_KEY_c100e=prog4 # Smartkey D (Fn + F12) → XF86Launch4
KEYBOARD_KEY_c1019=prog1 # Smartkey A (Fn + F9) → XF86Launch1
KEYBOARD_KEY_c101a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
@ -1011,12 +1013,12 @@ evdev:input:b0003v046Dp0066*
KEYBOARD_KEY_c106f=battery # Battery icon
# S510 remote control (27 MHz)
evdev:input:b0003v046Dp00FE*
evdev:input:b0003v046Dp00FE:*
KEYBOARD_KEY_c1018=media # Media button
# MX5000 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB305*
evdev:input:b0005v046DpB305*
evdev:input:b0003v046DpB305:*
evdev:input:b0005v046DpB305:*
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
KEYBOARD_KEY_c1004=send # Send and receive / sync button
KEYBOARD_KEY_c1006=coffee # Status (online/away) button
@ -1031,8 +1033,8 @@ evdev:input:b0005v046DpB305*
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
# MX5500 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB30B*
evdev:input:b0005v046DpB30B*
evdev:input:b0003v046DpB30B:*
evdev:input:b0005v046DpB30B:*
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
KEYBOARD_KEY_c100f=config # Window with gear icon
@ -1042,12 +1044,12 @@ evdev:input:b0005v046DpB30B*
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
# Logitech K811
evdev:input:b0005v046DpB317*
evdev:input:b0005v046DpB317:*
KEYBOARD_KEY_70047=brightnessdown
KEYBOARD_KEY_70048=brightnessup
# iTouch
evdev:input:b0003v046DpC308*
evdev:input:b0003v046DpC308:*
KEYBOARD_KEY_90001=shop # Shopping
KEYBOARD_KEY_90002=config # iTouch
KEYBOARD_KEY_90003=finance # Finance
@ -1056,12 +1058,12 @@ evdev:input:b0003v046DpC308*
KEYBOARD_KEY_c0183=media # Media
# Cordless Desktop S510
evdev:input:b0003v046DpC50C*
evdev:input:b0003v046DpC50C:*
KEYBOARD_KEY_d4=up # zoomin
KEYBOARD_KEY_cc=down # zoomout
# Wave cordless
evdev:input:b0003v046DpC317*
evdev:input:b0003v046DpC317:*
KEYBOARD_KEY_9001c=scale # expo
KEYBOARD_KEY_9001f=down # zoomout
KEYBOARD_KEY_90020=up # zoomin
@ -1080,7 +1082,7 @@ evdev:input:b0003v046DpC317*
KEYBOARD_KEY_9004c=ejectclosecd
# Wave cordless
evdev:input:b0003v046DpC517*
evdev:input:b0003v046DpC517:*
KEYBOARD_KEY_c101f=down # zoomout
KEYBOARD_KEY_c1020=up # zoomin
KEYBOARD_KEY_c1005=camera
@ -1096,7 +1098,7 @@ evdev:input:b0003v046DpC517*
KEYBOARD_KEY_c104c=ejectclosecd
# Cordless Wave Pro
evdev:input:b0003v046DpC529*
evdev:input:b0003v046DpC529:*
KEYBOARD_KEY_0c01b6=camera
KEYBOARD_KEY_0c0183=media
KEYBOARD_KEY_0c0184=wordprocessor
@ -1111,13 +1113,13 @@ evdev:input:b0003v046DpC529*
KEYBOARD_KEY_0c022e=down # zoomout
# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
evdev:input:b0003v046DpC52D:*
KEYBOARD_KEY_070029=presentation
KEYBOARD_KEY_07003e=presentation
KEYBOARD_KEY_070037=displaytoggle
# Internet Navigator
evdev:input:b0003v046DpC309*
evdev:input:b0003v046DpC309:*
KEYBOARD_KEY_90001=chat # Messenger/SMS
KEYBOARD_KEY_90002=camera # webcam
KEYBOARD_KEY_90003=prog1 # iTouch
@ -1189,12 +1191,12 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMedion*:pnErazer*:*
###########################################################
# Microsoft Natural Ergonomic Keyboard 4000
evdev:input:b0003v045Ep00DB*
evdev:input:b0003v045Ep00DB:*
KEYBOARD_KEY_c022d=up # zoomin
KEYBOARD_KEY_c022e=down # zoomout
# Microsoft (Razer produced) Reclusa keyboard
evdev:input:b0003v1532p0200*
evdev:input:b0003v1532p0200:*
KEYBOARD_KEY_c01c9=shuffle
KEYBOARD_KEY_c01ca=up # zoomin
KEYBOARD_KEY_c01cb=down # zoomout
@ -1257,7 +1259,7 @@ evdev:name:MSI Laptop hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnM[iI][cC][rR][oO]-S[tT][a
###########################################################
# Teres-I
evdev:input:b0003v15BAp003C*
evdev:input:b0003v15BAp003C:*
KEYBOARD_KEY_70066=sleep # Fn+F1
KEYBOARD_KEY_700f6=wlan # Fn+F2
KEYBOARD_KEY_700c7=f21 # Fn+F3 touchpad toggle
@ -1369,7 +1371,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnOQO*Inc.*:pnOQO*Model*2*:*
# The key code identifiers used below exactly match the text
# labels on the keys/buttons (or standard icons on the buttons
# that have no text labels), except as noted.
evdev:input:b0003v05A4p9735*
evdev:input:b0003v05A4p9735:*
KEYBOARD_KEY_c0015=back
KEYBOARD_KEY_c0012=forward
KEYBOARD_KEY_c000c=stop
@ -1400,7 +1402,7 @@ evdev:input:b0003v05A4p9735*
###########################################################
# Plantronics .Audio 626 DSP
evdev:input:b0003v047FpC006*
evdev:input:b0003v047FpC006:*
KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute
###########################################################
@ -1697,7 +1699,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnZepto:pnZnote*6615WD:*
##########################################
# Ideazon Zboard Merc
evdev:input:b0003v1038p0210*
evdev:input:b0003v1038p0210:*
KEYBOARD_KEY_c0227=q
KEYBOARD_KEY_c0223=w
KEYBOARD_KEY_c0221=e
@ -1735,7 +1737,7 @@ evdev:input:b0003v1038p0210*
KEYBOARD_KEY_70079=f6
# Ideazon Zboard Fang
evdev:input:b0003v1038p0310*
evdev:input:b0003v1038p0310:*
KEYBOARD_KEY_70059=1
KEYBOARD_KEY_7005b=3
KEYBOARD_KEY_70040=equal
@ -1787,13 +1789,13 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDIXONSP:pnDIXON*:*
# with an accompanying variant (defined with XKB_FIXED_VARIANT) if necessary.
# Yubico Yubico Yubikey II"
evdev:input:b0003v1050p0010*
evdev:input:b0003v1050p0010:*
# Yubico Yubikey NEO OTP+CCID
evdev:input:b0003v1050p0111*
evdev:input:b0003v1050p0111:*
# Yubico Yubikey NEO OTP+U2F+CCID
evdev:input:b0003v1050p0116*
evdev:input:b0003v1050p0116:*
# OKE Electron Company USB barcode reader
evdev:input:b0003v05FEp1010*
evdev:input:b0003v05FEp1010:*
XKB_FIXED_LAYOUT=us
XKB_FIXED_VARIANT=
@ -1806,12 +1808,12 @@ evdev:input:b0003v05FEp1010*
# Presence of a LED is implicit when the property is absent.
# Logitech K750
evdev:input:b0003v046Dp4002*
evdev:input:b0003v046Dp4002:*
KEYBOARD_LED_NUMLOCK=0
KEYBOARD_LED_CAPSLOCK=0
# PFU Limited HHKB Professional JP
evdev:input:b0003v04FEp000D*
evdev:input:b0003v04FEp000D:*
KEYBOARD_LED_NUMLOCK=0
KEYBOARD_LED_CAPSLOCK=0

View File

@ -67,6 +67,8 @@
# or 'display'. The default, when unset, is equivalent to:
# ACCEL_LOCATION=display
#
# All matches should end in ':*' to allow future expansions of the match key.
# Sort by brand, model
#########################################

View File

@ -36,6 +36,8 @@
#
# If the property is missing, user-space can assume:
# ID_INPUT_JOYSTICK_INTEGRATION=external
#
# All matches should end in ':*' to allow future expansions of the match key.
joystick:bluetooth:*
ID_INPUT_JOYSTICK_INTEGRATION=external
@ -45,6 +47,6 @@ joystick:bluetooth:*
###########################################################
# GPD Win, Classic and XBox 360 compat modes
joystick:usb:v11c5p5507*
joystick:usb:v045ep028e*
joystick:usb:v11c5p5507:*
joystick:usb:v045ep028e:*
ID_INPUT_JOYSTICK_INTEGRATION=internal

View File

@ -13,7 +13,7 @@
#
# Supported hardware matches are:
# - Generic input devices match:
# evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
# evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV:*
# This matches on the kernel modalias of the input-device, mainly:
# ZZZZ is the bus-id (see /usr/include/linux/input.h BUS_*), YYYY, XXXX and
# WWW are the 4-digit hex uppercase vendor, product and version ID and VVVV
@ -27,6 +27,8 @@
# <vendor> is the firmware-provided string from the kernel DMI modalias,
# see /sys/class/dmi/id/modalias
#
# All matches should end in ':*' to allow future expansions of the match key.
#
# To add local entries, create a new file
# /etc/udev/hwdb.d/71-pointingstick-local.hwdb
# and add your rules there. To load the new rules execute (as root):
@ -155,6 +157,6 @@ evdev:name:TPPS/2 IBM TrackPoint:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*:pvrThinkPadX20?
POINTINGSTICK_CONST_ACCEL=1.25
# Lenovo UltraNav SK-8845 (USB keyboard)
evdev:input:b0003v06CBp0009*
evdev:input:b0003v06CBp0009:*
POINTINGSTICK_CONST_ACCEL=2.5
POINTINGSTICK_SENSITIVITY=200

View File

@ -15,6 +15,8 @@
#
# vid/pid as 4-digit hex lowercase vendor/product
#
# All matches should end in ':*' to allow future expansions of the match key.
#
# To add local entries, create a new file
# /etc/udev/hwdb.d/71-touchpad-local.hwdb
# and add your rules there. To load the new rules execute (as root):
@ -59,11 +61,11 @@ touchpad:usb:v044ep1221:*
###########################################################
# Logitech
###########################################################
touchpad:usb:v046d*
touchpad:usb:v046dp????:*
ID_INPUT_TOUCHPAD_INTEGRATION=external
###########################################################
# Wacom
###########################################################
touchpad:usb:v056a*
touchpad:usb:v056ap????:*
ID_INPUT_TOUCHPAD_INTEGRATION=external

View File

@ -202,8 +202,9 @@ def check_matches(groups):
except ParseBaseException as e:
error('Pattern {!r} is invalid: {}', rest, e)
continue
if rest[-1] not in '*:':
error('pattern {} does not end with "*" or ":"', match)
if not rest.endswith(':*'):
error("pattern {!r} does not end with ':*'", match)
matches.sort()
prev = None

View File

@ -173,7 +173,7 @@
<citerefentry><refentrytitle>udev_enumerate_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>udev_monitor_new_from_netlink</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>udev_list_entry</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
</para>
</refsect1>

View File

@ -133,7 +133,6 @@ static int open_label_db(void) {
int mac_selinux_init(void) {
#if HAVE_SELINUX
int r;
bool have_status_page = false;
if (initialized)
return 0;
@ -141,15 +140,9 @@ int mac_selinux_init(void) {
if (!mac_selinux_use())
return 0;
r = selinux_status_open(/* netlink fallback */ 1);
if (r < 0) {
if (!ERRNO_IS_PRIVILEGE(errno))
return log_enforcing_errno(errno, "Failed to open SELinux status page: %m");
log_warning_errno(errno, "selinux_status_open() with netlink fallback failed, not checking for policy reloads: %m");
} else if (r == 1)
log_warning("selinux_status_open() failed to open the status page, using the netlink fallback.");
else
have_status_page = true;
r = selinux_status_open(/* no netlink fallback */ 0);
if (r < 0)
return log_enforcing_errno(errno, "Failed to open SELinux status page: %m");
r = open_label_db();
if (r < 0) {
@ -157,14 +150,13 @@ int mac_selinux_init(void) {
return r;
}
/* Save the current policyload sequence number, so mac_selinux_maybe_reload() does not trigger on
* first call without any actual change. */
/* save the current policyload sequence number, so `mac_selinux_maybe_reload()` does
not trigger on first call without any actual change */
last_policyload = selinux_status_policyload();
if (have_status_page)
/* Now that the SELinux status page has been successfully opened, retrieve the enforcing
* status over it (to avoid system calls in security_getenforce()). */
enforcing_status_func = selinux_status_getenforce;
/* now that the SELinux status page has been successfully opened,
retrieve the enforcing status over it (to avoid system calls in `security_getenforce()`) */
enforcing_status_func = selinux_status_getenforce;
initialized = true;
#endif

View File

@ -49,7 +49,16 @@ static int sigaction_many_ap(const struct sigaction *sa, int sig, va_list ap) {
int r = 0;
/* negative signal ends the list. 0 signal is skipped. */
for (; sig >= 0; sig = va_arg(ap, int)) {
if (sig < 0)
return 0;
if (sig > 0) {
if (sigaction(sig, sa, NULL) < 0)
r = -errno;
}
while ((sig = va_arg(ap, int)) >= 0) {
if (sig == 0)
continue;

View File

@ -145,32 +145,57 @@ char *strnappend(const char *s, const char *suffix, size_t b) {
char *strjoin_real(const char *x, ...) {
va_list ap;
size_t l = 1;
size_t l;
char *r, *p;
va_start(ap, x);
for (const char *t = x; t; t = va_arg(ap, const char *)) {
size_t n;
n = strlen(t);
if (n > SIZE_MAX - l) {
va_end(ap);
return NULL;
if (x) {
l = strlen(x);
for (;;) {
const char *t;
size_t n;
t = va_arg(ap, const char *);
if (!t)
break;
n = strlen(t);
if (n > ((size_t) -1) - l) {
va_end(ap);
return NULL;
}
l += n;
}
l += n;
}
} else
l = 0;
va_end(ap);
p = r = new(char, l);
r = new(char, l+1);
if (!r)
return NULL;
va_start(ap, x);
for (const char *t = x; t; t = va_arg(ap, const char *))
p = stpcpy(p, t);
va_end(ap);
if (x) {
p = stpcpy(r, x);
*p = 0;
va_start(ap, x);
for (;;) {
const char *t;
t = va_arg(ap, const char *);
if (!t)
break;
p = stpcpy(p, t);
}
va_end(ap);
} else
r[0] = 0;
return r;
}

View File

@ -123,6 +123,7 @@ size_t strv_length(char * const *l) {
}
char **strv_new_ap(const char *x, va_list ap) {
const char *s;
_cleanup_strv_free_ char **a = NULL;
size_t n = 0, i = 0;
va_list aq;
@ -132,28 +133,43 @@ char **strv_new_ap(const char *x, va_list ap) {
* STRV_IFNOTNULL() macro to include possibly NULL strings in
* the string list. */
va_copy(aq, ap);
for (const char *s = x; s; s = va_arg(aq, const char*)) {
if (s == STRV_IGNORE)
continue;
if (x) {
n = x == STRV_IGNORE ? 0 : 1;
n++;
va_copy(aq, ap);
while ((s = va_arg(aq, const char*))) {
if (s == STRV_IGNORE)
continue;
n++;
}
va_end(aq);
}
va_end(aq);
a = new(char*, n+1);
if (!a)
return NULL;
for (const char *s = x; s; s = va_arg(ap, const char*)) {
if (s == STRV_IGNORE)
continue;
if (x) {
if (x != STRV_IGNORE) {
a[i] = strdup(x);
if (!a[i])
return NULL;
i++;
}
a[i] = strdup(s);
if (!a[i])
return NULL;
while ((s = va_arg(ap, const char*))) {
i++;
if (s == STRV_IGNORE)
continue;
a[i] = strdup(s);
if (!a[i])
return NULL;
i++;
}
}
a[i] = NULL;

View File

@ -355,7 +355,7 @@ _public_ int sd_uid_is_on_seat(uid_t uid, int require_active, const char *seat)
char t[DECIMAL_STR_MAX(uid_t)];
xsprintf(t, UID_FMT, uid);
return string_contains_word(content, NULL, t);
return string_contains_word(content, ",", t);
}
static int uid_get_array(uid_t uid, const char *variable, char ***array) {

View File

@ -11,9 +11,6 @@
DnsAnswer *dns_answer_new(size_t n) {
DnsAnswer *a;
if (n > UINT16_MAX) /* We can only place 64K RRs in an answer at max */
n = UINT16_MAX;
a = malloc0(offsetof(DnsAnswer, items) + sizeof(DnsAnswerItem) * n);
if (!a)
return NULL;
@ -627,16 +624,12 @@ int dns_answer_reserve(DnsAnswer **a, size_t n_free) {
return -EBUSY;
ns = (*a)->n_rrs + n_free;
if (ns > UINT16_MAX) /* Maximum number of RRs we can stick into a DNS packet section */
ns = UINT16_MAX;
if ((*a)->n_allocated >= ns)
return 0;
/* Allocate more than we need */
ns *= 2;
if (ns > UINT16_MAX)
ns = UINT16_MAX;
n = realloc(*a, offsetof(DnsAnswer, items) + sizeof(DnsAnswerItem) * ns);
if (!n)
@ -713,7 +706,7 @@ void dns_answer_dump(DnsAnswer *answer, FILE *f) {
fputs("\t;", f);
if (ifindex != 0)
fprintf(f, " ifindex=%i", ifindex);
printf(" ifindex=%i", ifindex);
if (flags & DNS_ANSWER_AUTHENTICATED)
fputs(" authenticated", f);
if (flags & DNS_ANSWER_CACHEABLE)

View File

@ -1813,8 +1813,6 @@ int dnssec_nsec_test(DnsAnswer *answer, DnsResourceKey *key, DnssecNsecResult *r
/* The following checks only make sense for NSEC RRs that are not expanded from a wildcard */
r = dns_resource_record_is_synthetic(rr);
if (r == -ENODATA) /* No signing RR known. */
continue;
if (r < 0)
return r;
if (r > 0)

View File

@ -8,8 +8,7 @@
DnsQuestion *dns_question_new(size_t n) {
DnsQuestion *q;
if (n > UINT16_MAX) /* We can only place 64K key in an question section at max */
n = UINT16_MAX;
assert(n > 0);
q = malloc0(offsetof(DnsQuestion, keys) + sizeof(DnsResourceKey*) * n);
if (!q)

View File

@ -1650,7 +1650,7 @@ DnsResourceRecord *dns_resource_record_copy(DnsResourceRecord *rr) {
return NULL;
copy->nsec3.salt_size = rr->nsec3.salt_size;
copy->nsec3.next_hashed_name = memdup(rr->nsec3.next_hashed_name, rr->nsec3.next_hashed_name_size);
if (!copy->nsec3.next_hashed_name)
if (!copy->nsec3.next_hashed_name_size)
return NULL;
copy->nsec3.next_hashed_name_size = rr->nsec3.next_hashed_name_size;
copy->nsec3.types = bitmap_copy(rr->nsec3.types);

View File

@ -1156,16 +1156,12 @@ bool dns_scope_name_wants_search_domain(DnsScope *s, const char *name) {
bool dns_scope_network_good(DnsScope *s) {
/* Checks whether the network is in good state for lookups on this scope. For mDNS/LLMNR/Classic DNS scopes
* bound to links this is easy, as they don't even exist if the link isn't in a suitable state. For the global
* DNS scope we check whether there are any links that are up and have an address.
*
* Note that Linux routing is complex and even systems that superficially have no IPv4 address might
* be able to route IPv4 (and similar for IPv6), hence let's make a check here independent of address
* family. */
* DNS scope we check whether there are any links that are up and have an address. */
if (s->link)
return true;
return manager_routable(s->manager);
return manager_routable(s->manager, AF_UNSPEC);
}
int dns_scope_ifindex(DnsScope *s) {

View File

@ -1418,15 +1418,15 @@ void manager_dnssec_verdict(Manager *m, DnssecVerdict verdict, const DnsResource
m->n_dnssec_verdict[verdict]++;
}
bool manager_routable(Manager *m) {
bool manager_routable(Manager *m, int family) {
Link *l;
assert(m);
/* Returns true if the host has at least one interface with a routable address (regardless if IPv4 or IPv6) */
/* Returns true if the host has at least one interface with a routable address of the specified type */
HASHMAP_FOREACH(l, m->links)
if (link_relevant(l, AF_UNSPEC, false))
if (link_relevant(l, family, false))
return true;
return false;

View File

@ -185,7 +185,7 @@ DnsOverTlsMode manager_get_dns_over_tls_mode(Manager *m);
void manager_dnssec_verdict(Manager *m, DnssecVerdict verdict, const DnsResourceKey *key);
bool manager_routable(Manager *m);
bool manager_routable(Manager *m, int family);
void manager_flush_caches(Manager *m);
void manager_reset_server_features(Manager *m);

View File

@ -383,6 +383,7 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"clock_settime\0"
"clock_settime64\0"
"settimeofday\0"
"stime\0"
},
[SYSCALL_FILTER_SET_CPU_EMULATION] = {
.name = "@cpu-emulation",
@ -638,7 +639,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"security\0"
"sgetmask\0"
"ssetmask\0"
"stime\0"
"stty\0"
"sysfs\0"
"tuxcall\0"

View File

@ -7,18 +7,18 @@
import chromiumos.gen_autosuspend_rules
print('# pci:v<00VENDOR>d<00DEVICE> (8 uppercase hexadecimal digits twice)')
print('# pci:v<00VENDOR>d<00DEVICE>:* (8 uppercase hexadecimal digits twice)')
for entry in chromiumos.gen_autosuspend_rules.PCI_IDS:
vendor, device = entry.split(':')
vendor = int(vendor, 16)
device = int(device, 16)
print('pci:v{:08X}d{:08X}*'.format(vendor, device))
print('pci:v{:08X}d{:08X}:*'.format(vendor, device))
print('# usb:v<VEND>p<PROD> (4 uppercase hexadecimal digits twice)')
print('# usb:v<VEND>p<PROD>:* (4 uppercase hexadecimal digits twice)')
for entry in chromiumos.gen_autosuspend_rules.USB_IDS:
vendor, product = entry.split(':')
vendor = int(vendor, 16)
product = int(product, 16)
print('usb:v{:04X}p{:04X}*'.format(vendor, product))
print('usb:v{:04X}p{:04X}:*'.format(vendor, product))
print(' ID_AUTOSUSPEND=1')