The correct value would be 0.700000, 0.000000, 0.000000, 0.000000, 0.700000, 0.000000, 0.000000, 0.000000, 1.000000
. The coordinate transform matrix is a 3x3 matrix, and to set the pointer speed multiplier the first two diagonals have to be set.
Your matrix:
0.7 0.0 0.7
0.0 1.0 0.0
0.0 0.0 1.0
Correct matrix:
0.7 0.0 0.0
0.0 0.7 0.0
0.0 0.0 1.0
I have attached a shell script that manipulates the coordinate transform matrix of a device using xfconf-query, to make the cursor faster or slower. To use it put the name of a pointer device from xinput list
into the device variable in the script, and change the scale_width
and scale_height
variables. Values between 0-1 decrease pointer speed, and values > 1 increase it. If xinput list
lists your mouse more than once you might need to disconnect and reconnect it after running the script (likely another bug in xfsettingsd).
If you're not using this MR the script will run but the Coordinate Transform Matrix that is applied to the device by xfsettingsd will be messed up. This can be confirmed using xinput list-props '<device name>'
. To recover from this, uncomment the last line from the script and run it again, then disconnect and reconnect the device.
Currently float array properties get "squished together" when they're applied to a device. This is because a format of 32 from/to XGet/ChangeDeviceProperty
actually means that each element takes sizeof(long)
bytes, not the expected 4 bytes. The float case was the only one that didn't account for this previously, so setting properties like the Coordinate Transform Matrix was broken.