====== Ubuntu - Mouse - Determine the Mouse Properties ====== ===== Determine the Mouse to use ===== xinput | grep -m 1 "DeathAdder" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/' returns: 8 **NOTE:** See [[Ubuntu:Mouse:Determine the Mouse|Determine the Mouse]]. * This shows that the id of the mouse is 8 in this case. * The id is needed, as the name of the mouse is not unique. * Trying to use the name, might return an error: xinput --list-props "Razer Razer DeathAdder V2" * returns: Warning: There are multiple devices matching 'Razer Razer DeathAdder V2'. To ensure the correct one is selected, please use the device ID, or prefix the device name with 'pointer:' or 'keyboard:' as appropriate. unable to find device Razer Razer DeathAdder V2 ---- ===== List the Mouse Properties ===== xinput list-props 8 returns: Device 'Razer Razer DeathAdder V2': Device Enabled (155): 1 Coordinate Transformation Matrix (157): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Natural Scrolling Enabled (291): 0 libinput Natural Scrolling Enabled Default (292): 0 libinput Scroll Methods Available (293): 0, 0, 1 libinput Scroll Method Enabled (294): 0, 0, 0 libinput Scroll Method Enabled Default (295): 0, 0, 0 libinput Button Scrolling Button (296): 2 libinput Button Scrolling Button Default (297): 2 libinput Middle Emulation Enabled (298): 0 libinput Middle Emulation Enabled Default (299): 0 libinput Accel Speed (300): 0.698529 libinput Accel Speed Default (301): 0.000000 libinput Accel Profiles Available (302): 1, 1 libinput Accel Profile Enabled (303): 1, 0 libinput Accel Profile Enabled Default (304): 1, 0 libinput Left Handed Enabled (305): 0 libinput Left Handed Enabled Default (306): 0 libinput Send Events Modes Available (276): 1, 0 libinput Send Events Mode Enabled (277): 0, 0 libinput Send Events Mode Enabled Default (278): 0, 0 Device Node (279): "/dev/input/event7" Device Product ID (280): 5426, 132 libinput Drag Lock Buttons (307): libinput Horizontal Scroll Enabled (308): 1 **NOTE:** The id of 8 is used as determined by the previous step, [[Ubuntu:Mouse:Determine the Mouse|Determine the Mouse]]. * **libinput** is an Xorg input driver based on libinput. * It therefore supports all input devices that libinput can handle, including most mice, keyboards, tablets and touchscreens. ---- ===== Descriptions of the Mouse Properties ===== ^Property^Description^ |Coordinate Transformation Matrix|This is a 3x3 coordinate transformation matrix. See [[https://wiki.ubuntu.com/X/InputCoordinateTransformation|Coordinate Transformation Matrix]]. It is encoded in row-major order, so the matrix would look like the following:| |:::|⎡ 1 0 0 ⎤| |:::|⎜ 0 1 0 ⎥| |:::|⎣ 0 0 1 ⎦| |libinput Accel Profiles Available|2 boolean values (8 bit, 0 or 1), in order "adaptive", "flat". Indicates which acceleration profiles are available on this device.| |libinput Accel Profile Enabled|2 boolean values (8 bit, 0 or 1), in order "adaptive", "flat". Indicates which acceleration profile is currently enabled on this device.| |libinput Accel Speed|1 32-bit float value, defines the pointer speed. Value range -1, 1| |libinput Button Scrolling Button|1 32-bit value. Sets the button number to use for button scrolling. This setting is independent of the scroll method, to enable button scrolling the method must be set to button-scrolling and a valid button must be set.| |libinput Button Scrolling Button Lock Enabled|1 boolean value. If true, the scroll button lock is enabled. This setting is independent of the scroll method or the scroll button, to enable button scrolling the method must be set to button-scrolling and a valid button must be set.| |libinput Calibration Matrix|9 32-bit float values, representing a 3x3 calibration matrix, order is row 1, row 2, row 3.| |libinput Click Methods Available|2 boolean values (8 bit, 0 or 1), in order "buttonareas", "clickfinger". Indicates which click methods are available on this device.| |libinput Click Methods Enabled|2 boolean values (8 bit, 0 or 1), in order "buttonareas", "clickfinger". Indicates which click methods are enabled on this device.| |libinput Drag Lock Buttons|Either one 8-bit value specifying the meta drag lock button, or a list of button pairs. See section below **Button Drag Lock** for details.| |libinput Horizontal Scrolling Enabled|1 boolean value (8 bit, 0 or 1). Indicates whether horizontal scrolling events are enabled or not.| |libinput Left Handed Enabled|1 boolean value (8 bit, 0 or 1). Indicates if left-handed mode is enabled or disabled.| |libinput Middle Emulation Enabled|1 boolean value (8 bit, 0 or 1). Indicates if middle emulation is enabled or disabled.| |libinput Natural Scrolling Enabled|1 boolean value (8 bit, 0 or 1). 1 enables natural scrolling.| |libinput Rotation Angle|1 32-bit float value [0.0 to 360.0). Sets the rotation angle of the device, clockwise of its natural neutral position.| |libinput Scroll Methods Available|3 boolean values (8 bit, 0 or 1), in order "two-finger", "edge", "button". Indicates which scroll methods are available on this device.| |libinput Scroll Method Enabled|3 boolean values (8 bit, 0 or 1), in order "two-finger", "edge", "button". Indicates which scroll method is currently enabled on this device.| |libinput Scroll Pixel Distance|1 32-bit value (nonzero, with additional implementation-defined range checks). Changes the movement distance required to trigger one logical wheel click.| |libinput Send Events Modes Available|2 boolean values (8 bit, 0 or 1), in order "disabled" and "disabled-on-external-mouse". Indicates which send-event modes are available on this device.| |libinput Send Events Mode Enabled|2 boolean values (8 bit, 0 or 1), in order "disabled" and "disabled-on-external-mouse". Indicates which send-event modes is currently enabled on this device.| |libinput Tablet Tool Pressurecurve|4 32-bit float values [0.0 to 1.0]. See section below **Tablet Tool Pressure Curve**.| |libinput Tablet Tool Area Ratio|2 32-bit values, corresponding to width and height. Special value 0, 0 resets to the default ratio. See section below **Tablet Tool Area Ratio** for more information.| |libinput Tapping Enabled|1 boolean value (8 bit, 0 or 1). 1 enables tapping.| |libinput Tapping Button Mapping Enabled|2 boolean value (8 bit, 0 or 1), in order "lrm" and "lmr". Indicates which button mapping is currently enabled on this device.| |libinput Tapping Drag Lock Enabled|1 boolean value (8 bit, 0 or 1). 1 enables drag lock during tapping.| |libinput Disable While Typing Enabled|1 boolean value (8 bit, 0 or 1). Indicates if disable while typing is enabled or disabled.| **NOTE:** Most properties have a **libinput Default** equivalent that indicates the default value for this setting on this device. * If a property is not listed against the device, does not imply that the feature is not available on the device. * It the property is not showing, usually mean that this same option can not be changed or configured. ---- ===== Button Drag Lock ===== Button drag lock holds a button logically down even when the button itself has been physically released since. Button drag lock comes in two modes: - **meta mode**: A meta button click activates drag lock for the next button press of any other button. * A button click in the future will keep that button held logically down until a subsequent click of that same button. * The meta button events themselves are discarded. * A separate meta button click is required each time a drag lock should be activated for a button in the future. - **pairs mode**: Each button can be assigned a target locking button. * On button click, the target lock button is held logically down until the next click of the same button. * The button events themselves are discarded and only the target button events are sent. **NOTE:** This feature is provided by this driver, not by libinput. ---- ===== Tablet Tool Pressurecurve ===== The pressure curve affects how stylus pressure is reported. * By default, the hardware pressure is reported as-is. * By setting a pressure curve, the feel of the stylus can be adjusted to be more like e.g. a pencil or a brush. The pressure curve is a cubic Bezier curve, drawn within a normalized range of 0.0 to 1.0 between the four points provided. * This normalized range is applied to the tablets pressure input so that the highest pressure maps to 1.0. * The points must have increasing x coordinates, if x0 is larger than 0.0 all pressure values lower than x0 are equivalent to y0. * If x3 is less than 1.0, all pressure values higher than x3 are equivalent to y3. The input for a linear curve (default) is "0.0/0.0 0.0/0.0 1.0/1.0 1.0/1.0"; * a slightly depressed curve (firmer) might be "0.0/0.0 0.05/0.0 1.0/0.95 1.0/1.0"; * a slightly raised curve (softer) might be "0.0/0.0 0.0/0.05 0.95/1.0 1.0/1.0". **NOTE:** This feature is provided by this driver, not by libinput. ---- ===== Tablet Tool Area Ratio ===== By default, a tablet tool can access the whole sensor area and the tablet area is mapped to the available screen area. * For external tablets, the height:width ratio of the tablet may be different to that of the monitor, causing the skew of input data. To avoid this skew of input data, an area ratio may be set to match the ratio of the screen device. * For example, a ratio of 4:3 will reduce the available area of the tablet to the largest available area with a ratio of 4:3. * Events within this area will scale to the tablets announced axis range, the area ratio is thus transparent to the X server. * Any events outside this area will send events equal to the maximum value of that axis. * The area always starts at the devices origin in its current rotation, i.e. it takes left-handed-ness into account. **NOTE:** This feature is provided by this driver, not by libinput. ---- ===== References ===== https://wayland.freedesktop.org/libinput/doc/ https://wiki.ubuntu.com/X/InputCoordinateTransformation https://www.mankier.com/4/libinput#Configuration_Details