Input

Differences between revisions 1 and 18 (spanning 17 versions)
Revision 1 as of 2008-11-05 01:05:37
Size: 9347
Editor: c-67-168-233-128
Comment:
Revision 18 as of 2011-05-20 07:23:16
Size: 7172
Editor: dsl-hkibrasgw1-ff1dc000-147
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Ubuntu 8.04 and later include a new version of Xorg which support input-hotplug. With this new functionality, it's likely that you won't need to do any configuration at all to make your devices work, assuming they're recognized and set up by the kernel. However, if you do need to do adjust things, read on. #title Configuring Input Devices
||<tablestyle="font-size: 0.9em; background:#F1F1ED;margin: 0 0 1em 1em;" style="padding:2.0em;"><<TableOfContents(2)>>||

Ubuntu supports input-hotplug. With this functionality, it's likely that you won't need to do any configuration at all to make your devices work, assuming they're recognized and set up by the kernel. However, if you do need to do adjust things, read on.
Line 5: Line 8:
The {{{xinput}}} command line tool can be used for some on-the-fly configuration adjustments.  Ubuntu 8.04 users will first need to install {{{xinput}}} from {{{universe}}}. The {{{xinput}}} command line tool can be used for some on-the-fly configuration adjustments.
Line 11: Line 14:
...
"Configured Mouse" id=2 [XExtensionPointer]
 Num_buttons is 9
 Num_axes is 2
 Mode is Relative
 Motion_buffer is 256
 Axis 0 :
  Min_value is -1
  Max_value is -1
  Resolution is 1
 Axis 1 :
  Min_value is -1
  Max_value is -1
  Resolution is 1
"Generic Keyboard" id=3 [XExtensionKeyboard]
 Num_keys is 248
 Min_keycode is 8
 Max_keycode is 255
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=8 [slave pointer (2)]
⎜ ↳ Logitech USB Receiver id=9 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
    ↳ Power Button id=6 [slave keyboard (3)]
    ↳ Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint id=7 [slave keyboard (3)]
Line 31: Line 24:
Individual devices can be queried for more details: Individual devices can be queried for more details by using the numerical id or the name:
Line 34: Line 27:
$ xinput query-state "Configured Mouse" $ xinput query-state 9
Line 46: Line 39:
 button[10]=up
 button[11]=up
 button[12]=up
 button[13]=up
 button[14]=up
 button[15]=up
 button[16]=up
 button[17]=up
 button[18]=up
 button[19]=up
 button[20]=up
 button[21]=up
 button[22]=up
 button[23]=up
 button[24]=up
Line 47: Line 55:
 valuator[0]=3182
 valuator[1]=969
}}}

If you have multiple mouse devices installed, you can switch which is considered the core pointer like this:

{{{
$ xinput set-pointer "Configured Mouse"
 valuator[0]=66
 valuator[1]=925
Line 59: Line 61:
In '''Ubuntu 8.10''' and later, different input drivers may also expose arbitrary properties for applications to set. Synaptics touchpads are particularly configurable like this, but other devices have some more general properties. Different input drivers may also expose arbitrary properties for applications to set. Synaptics touchpads are particularly configurable like this, but other devices have some more general properties.
Line 62: Line 64:
$ xinput list-props "SynPS/2 Synaptics TouchPad" $ xinput list-props 8
Line 73: Line 75:
$ xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 8 0
$ xinput list-props "SynPS/2 Synaptics TouchPad"
$ xinput set-int-prop 8 "Device Enabled" 8 0
$ xinput list-props 8
Line 86: Line 88:
<<Anchor(hal)>>
== Input Configuration with HAL ==
== Input Configuration with InputClass sections ==
Line 89: Line 90:
Beginning with Ubuntu 8.10, input device configuration is done through HAL rather than in your {{{xorg.conf}}}. The syntax for HAL {{{fdi}}} files is a bit different than {{{xorg.conf}}}, and editing XML is only marginally better than editing {{{xorg.conf}}}... but on the plus side configuration changes don't require an X restart - just replugging of the device. TODO
Line 91: Line 92:
Essentially, to configure a device, add a new {{{fdi}}} file for it to your {{{/etc/hal/fdi/policy}}} directory. You will then need to replug the device or log out and in again for the changes to take effect. == Example: Disabling middle-mouse button paste on a scrollwheel mouse ==
Line 93: Line 94:
For example, use this sort of {{{fdi}}} file to set Synaptics touchpad options (see the {{{synaptics}}} manpage for possible options, or [[https://help.ubuntu.com/community/SynapticsTouchpad|the Synaptics documentation]] for other methods): Scrollwheel mice support a middle-button click event when pressing the scrollwheel. This is a great feature, but you may find it irritating. Fortunately it can be disabled.

First, you need to know the id of the mouse, like this:
Line 96: Line 99:
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
 <device>
  <match key="input.x11_driver" string="synaptics">
   <merge key="input.x11_options.VertTwoFingerScroll" type="string">true</merge>
   <merge key="input.x11_options.HorizTwoFingerScroll" type="string">true</merge>
  </match>
 </device>
</deviceinfo>
$ xinput list | grep 'id='

"Virtual core pointer" id=0 [XPointer]
"Virtual core keyboard" id=1 [XKeyboard]
"AT Translated Set 2 keyboard" id=2 [XExtensionKeyboard]
"Macintosh mouse button emulation" id=3 [XExtensionPointer]
"Logitech USB-PS/2 Optical Mouse" id=4 [XExtensionPointer]
Line 107: Line 108:
The '''match''' elements are used to conditionally match on various attributes related to the device or system. In this case we apply these settings to any device using the {{{synaptics}}} (ie. touchpad) driver.
The '''append''' elements are used to add parameters to various options. Options previously put in {{{xorg.conf}}} can be set using {{{input.x11_options.<option-name> (string)}}}.
My mouse has the Logitech logo printed on it, so I gather I need the last entry.
Line 110: Line 110:
Here is an example {{{fdi}}} file for setting up keys on a Dell Precision M20: I can view the current button mapping thusly:
Line 113: Line 113:
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="/org/freedesktop/Hal/devices/computer:system.hardware.product" prefix="Precision">
      <match key="/org/freedesktop/Hal/devices/computer:system.hardware.product" contains="M20">
        <append key="input.keymap.data" type="strlist">e005:brightnessdown</append> <!-- Fn+Down arrow Brightness Down -->
        <append key="input.keymap.data" type="strlist">e006:brightnessup</append> <!-- Fn+Up arrow Brightness Up -->
        <append key="input.keymap.data" type="strlist">e007:battery</append> <!-- Fn+F3 battery icon -->
        <append key="input.keymap.data" type="strlist">e008:wlan</append> <!-- Fn+F2 Turn On/Off Wireless -->
        <append key="input.keymap.data" type="strlist">e009:ejectclosecd</append> <!-- Fn+F10 Eject CD -->
        <append key="input.keymap.data" type="strlist">e00a:suspend</append> <!-- Fn+F1 hibernate -->
        <append key="input.keymap.data" type="strlist">e00b:displaytoggle</append> <!-- Fn+F8 CRT/LCD -->
        <append key="info.capabilities" type="strlist">input.keymap</append>
      </match>
    </match>
  </device>
</deviceinfo>
$ xinput get-button-map 4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 10
Line 132: Line 118:
These '''match''' elements are used to match on the system's product name, to check that it starts with "Precision" and contains "M20". In this case, we're appending some {{{[key]:[function]}}} pairs to the {{{input.keymap.data}}} option.

As a contrived example, let's say you wanted to specify the dvorak-intl variant and configure the eurosign to the E key:
Really, only the first three numbers have meaning for me. They represent the left, middle, and right mouse buttons.
Line 137: Line 121:
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keys">
      <merge key="input.xkb.variant" type="string">dvorak-intl</merge>
      <merge key="input.xkb.options" type="string">eurosign:e</merge>
    </match>
  </device>
</deviceinfo>
$ xinput get-button-map 4
Line 148: Line 124:
An example of configuring for the Logitech MX1000 USB mouse: I can turn the middle mouse button off by setting it to 0:
Line 151: Line 127:
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
 <device>
  <match key="info.capabilities" contains="input.mouse">
   <merge key="input.x11_driver" type="string">mouse</merge>

    <!-- Logitech tweaks -->
    <match key="@input.originating_device:usb.vendor_id" int="0x46d">
     <match key="@input.originating_device:usb.product_id" int_outof="0xc50e;0xc518">
      <merge key="input.x11_options.RelHWHEELOptions" type="string">invert</merge>
     </match>
    </match>

   </match>
  </match>
 </device>
</deviceinfo>
$ xinput set-button-map 4 1 0 3
Line 170: Line 130:
The {{{vendor_id}}} and {{{product_id}}} values can be found via Or I can turn the middle-mouse button into a left-mouse button by setting it to 1:
Line 173: Line 133:
$ cat /proc/bus/input/devices $ xinput set-button-map 4 1 1 3
Line 175: Line 135:

To make this set on a per-user basis, I can plug that line into my ~/.xstartup or other init file. It can also be done via configuring a matching InputClass section on xorg.conf.

== Troubleshooting ==

Custom settings are restored to default when a device is hotplugged, so if you mess up mouse button behavior just unplug it and plug it back in. No need to reboot. ;-)
Line 181: Line 147:
 * [[https://help.ubuntu.com/community/MultimediaKeys|General Multimedia keyboard]]
 * [[https://wiki.ubuntu.com/USBKeyboardInstall|USB keyboard]]
 * [[https://help.ubuntu.com/community/AppleKeyboard|Apple Keyboard]]
 * [[https://help.ubuntu.com/community/MultimediaKeys|General Multimedia keyboard]] - Probably out of date as of Intrepid due to input-hotplug
 * [[https://wiki.ubuntu.com/USBKeyboardInstall|USB keyboard]] - Probably out of date as of Intrepid due to input-hotplug
 * [[https://help.ubuntu.com/community/AppleKeyboard|Apple Keyboard]] - Probably out of date as of Intrepid due to input-hotplug

Ubuntu supports input-hotplug. With this functionality, it's likely that you won't need to do any configuration at all to make your devices work, assuming they're recognized and set up by the kernel. However, if you do need to do adjust things, read on.

Dynamic Input Configuration with xinput

The xinput command line tool can be used for some on-the-fly configuration adjustments.

To view a listing of the input devices X sees, run:

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=8    [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                     id=9    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint    id=7    [slave  keyboard (3)]

Individual devices can be queried for more details by using the numerical id or the name:

$ xinput query-state 9
2 classes :
ButtonClass
        button[1]=up
        button[2]=up
        button[3]=up
        button[4]=up
        button[5]=up
        button[6]=up
        button[7]=up
        button[8]=up
        button[9]=up
        button[10]=up
        button[11]=up
        button[12]=up
        button[13]=up
        button[14]=up
        button[15]=up
        button[16]=up
        button[17]=up
        button[18]=up
        button[19]=up
        button[20]=up
        button[21]=up
        button[22]=up
        button[23]=up
        button[24]=up
ValuatorClass Mode=Relative Proximity=In
        valuator[0]=66
        valuator[1]=925

xinput can also be used to alter the button mappings on mice and adjust the acceleration and feedback settings.

Different input drivers may also expose arbitrary properties for applications to set. Synaptics touchpads are particularly configurable like this, but other devices have some more general properties.

$ xinput list-props 8
Device 'SynPS/2 Synaptics TouchPad':
        Device Enabled:         1
        Synaptics Edges:                1632, 5312, 1575, 4281
        Synaptics Finger:               25, 30, 256
        Synaptics Tap Time:             180
        Synaptics Tap Move:             220
        Synaptics Tap Durations:                180, 180, 100
        Synaptics Tap FastTap:          0
[...]

$ xinput set-int-prop 8 "Device Enabled" 8 0
$ xinput list-props 8
Device 'SynPS/2 Synaptics TouchPad':
        Device Enabled:         0
        Synaptics Edges:                1632, 5312, 1575, 4281
        Synaptics Finger:               25, 30, 256
        Synaptics Tap Time:             180
        Synaptics Tap Move:             220
        Synaptics Tap Durations:                180, 180, 100
        Synaptics Tap FastTap:          0
[...]

Input Configuration with InputClass sections

TODO

Example: Disabling middle-mouse button paste on a scrollwheel mouse

Scrollwheel mice support a middle-button click event when pressing the scrollwheel. This is a great feature, but you may find it irritating. Fortunately it can be disabled.

First, you need to know the id of the mouse, like this:

$ xinput list | grep 'id='

"Virtual core pointer"  id=0    [XPointer]
"Virtual core keyboard" id=1    [XKeyboard]
"AT Translated Set 2 keyboard"  id=2    [XExtensionKeyboard]
"Macintosh mouse button emulation"      id=3    [XExtensionPointer]
"Logitech USB-PS/2 Optical Mouse"       id=4    [XExtensionPointer]

My mouse has the Logitech logo printed on it, so I gather I need the last entry.

I can view the current button mapping thusly:

$ xinput get-button-map 4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 10

Really, only the first three numbers have meaning for me. They represent the left, middle, and right mouse buttons.

$ xinput get-button-map 4

I can turn the middle mouse button off by setting it to 0:

$ xinput set-button-map 4 1 0 3

Or I can turn the middle-mouse button into a left-mouse button by setting it to 1:

$ xinput set-button-map 4 1 1 3

To make this set on a per-user basis, I can plug that line into my ~/.xstartup or other init file. It can also be done via configuring a matching InputClass section on xorg.conf.

Troubleshooting

Custom settings are restored to default when a device is hotplugged, so if you mess up mouse button behavior just unplug it and plug it back in. No need to reboot. Wink ;-)

Contributed Documentation

The following documentation was provided by various people in the past. Generally, much of it was written for pre-InputHotplug X, so may or may not still work in Intrepid.

Keyboard Config

Mouse Config

Tablet Config

Touchpad Config

Game Controller Config

X/Config/Input (last edited 2012-12-21 12:38:00 by 027edfa5)