home | help
JOYSTICK(4x)			  X Version 11			    JOYSTICK(4x)

NAME
     joystick - XLibre input driver for using a joystick as a mouse

SYNOPSIS
     Snippet for xorg.conf.d(5):

     Section "InputClass"
       Identifier "joystick-all"
       Driver "joystick"
       Option "MatchIsJoystick"   "on"
       Option "MatchDevicePath"   "/dev/input/event*"
       ...
     EndSection

DESCRIPTION
     joystick  is an XLibre input driver for controlling the pointer with a joy-
     stick device.

     Use this driver, if you want to

      - generate cursor movement, perform button or key events to control  desk-
	top and applications

      - generate cursor key events for playing legacy games, that have no native
	joystick support

     Do not use, if you want to

      - play games that have native joystick support

      - use XI2 applications. The evdev(4) driver will suffice for those in most
	cases.

     You may mix above scenarios by setting the device floating.  The driver re-
     ports  relative cursor movement, button and key events, as well as raw axis
     values through valuators.

SUPPORTED HARDWARE
     The joystick input module can be used on top of the  following  kernel  de-
     vices:

     - Linux's evdev device
     - Linux's joystick device
     - BSD's usbhid device

     Every  joystick supported by the kernel should be supported by the joystick
     input driver.  The joystick is assumed to be calibrated and reporting  axis
     values  between -32768 and 32768.	See the Linux kernel documentation for a
     complete list of supported devices.

     There is no support for force feedback at the moment.

CONFIGURATION DETAILS
     Please refer to xorg.conf(5) for general configuration details.  This  sec-
     tion only covers configuration details specific to this driver.

     The following Driver Options are supported:

     Option "Device" "string"

     Option "Path" "string"
	    Specifies  the  device  through  which the joystick can be accessed.
	    This option is mandatory and there is no default setting.

	    In Linux, joysticks are usually accessible through /dev/input/jsX or
	    /dev/input/eventX.

	    In *BSD, joysticks are usually recognized as /dev/uhidX.

     Option "AutoRepeat" "delay rate"
	    Sets the auto repeat behaviour for key events.  delay is the time in
	    milliseconds before a key starts repeating.  rate is the  number  of
	    times a key repeats per second.  Default: XLibre default

     Option "DebugLevel" "integer"
	    Controls  the  verbosity  of the driver for debugging purposes.  The
	    higher the DebugLevel, the more output is produced.  Default: 0

     Option "MapButton<number>" "string"
	    Sets the mapping of a joystick button to the desired action.  Button
	    counting starts with 1, Possible options are:

	    none   Don't do anything

	    "button=<number>"
		   Generate a pointer button event with button number  (starting
		   with 1).

	    "axis=[<factor>]<axis>"
		   Where  <axis>  is one of: x, y, zx, zy and <factor> is an op-
		   tional amplifier of the axis, like -, +, -5,  0.4,  1.3,  ...
		   Negative values invert the direction. Default: 1.0

	    "amplify=<factor>"
		   Amplifies  the  movement of all axes by the given factor when
		   this button is held down.  Different factors can be combined.

	    "key=<scancode>[,<scancode>[,<scancode>[,<scancode>]]]
		   When button is pressed, a series of keydown events  with  the
		   specified  scancodes  is  generated.   When the button is re-
		   leased, matching keyup events in the opposite order are  gen-
		   erated.  You can specify up to 4 scancodes per button.

		   See special section about key events below.

	    "disable-mouse"

	    "disable-keys"

	    "disable-all"
		   Disables  either  the generation of mouse events, key events,
		   or the generation of all X events by the driver.  Press  but-
		   ton again to allow the driver to generate events again.

		   You	may  also  set	the device floating from client space to
		   prevent it from generating core events.

     Option "MapAxis<number>" "string"
	    Sets the mapping of the axis to the desired  action.  Axis	counting
	    starts with 1, the parameter may contain:

	    "mode=<string>"
		   Where <string> can be one of:

		   none, relative, accelerated, absolute

	    "valuator"
		   Send extra valuator events for this axis.  The valuators will
		   be  numbered ascending, starting with 2 (valuator 0 and 1 are
		   reserved for pointer movement).  Please  consider  using  the
		   evdev(4)  input driver if you are only interested in XI2 fea-
		   tures.

		   The range of the valuators is always -32767 to  32768.   Nei-
		   ther mode nor axis needs to be set to generate extra valuator
		   events.   The axis will be labelled according to its physical
		   axis number, beginning with 1 , e.g.  "Axis 1" for the  first
		   axis (being the 3rd valuator).  Default: not set.

	    "axis=[<factor>]<axis>"
		   Where  <axis>  is  one of: x, y, zx, zy, key (see keylow/key-
		   high) and <factor> is an optional amplifier of the axis, like
		   -, +, -5, 0.4, 1.3, ...   Negative  values  will  invert  the
		   movement. Default: 1.0

	    "keylow=<scancode>[,<scancode>[,<scancode>[,<scancode>]]]

	    "keyhigh=<scancode>[,<scancode>[,<scancode>[,<scancode>]]]
		   When  the axis is moved out of the deadzone, a series of key-
		   down events according to the direction  of  the  movement  is
		   generated.	When the axis is released, matching keyup events
		   in opposite order will be generated.  You can specify up to 4
		   scancodes for each direction.

		   keylow defines the keys to be  generated  when  the	axis  is
		   moved in negative direction (left or up), keyhigh defines the
		   keys  to  be generated when the axis is moved in positive di-
		   rection (right or down).

		   If mode is set to relative: The driver will	emulate  autore-
		   peat  according  to the current value of the axis.  A keydown
		   and subsequent keyup event will be generated  in  short  time
		   intervals.  To modify that interval and the autorepeat speed,
		   supply the "axis=[<factor>]KEY" parameter.

		   If  mode is set to accelerated: Keydown and keyup events will
		   be generated repeatedly.  The time between a  keydown  and  a
		   keyup  event  corresponds  to the deflection of the axis.  If
		   the axis is deflected by 30%, the key will be  considered  to
		   be  down 300ms out of 1 second.  The exact intervals may vary
		   and can be adjusted with the amplify parameter.  If the  axis
		   is  deflected  by 100%, there will only be one keydown event,
		   so the key is considered down all the time.	The keys will be
		   autorepeated according to the XLibre keyboard settings.

		   See special section about key events below.

	    "deadzone=<number>"
		   Sets the unresponsive range of the axis  to	<number>.   This
		   can be between 0 and 30000.	Default: 5000

     Option "StartKeysEnabled" "boolean"
	    Set to False to disable key event generation after startup.  You can
	    toggle  key  event	generation with the disable-keys button mapping.
	    Default: enabled

     Option "StartMouseEnabled" "boolean"
	    Set to False to disable mouse event generation after  startup.   You
	    can toggle mouse event generation with the disable-mouse button map-
	    ping.  Default: enabled

DEFAULT CONFIGURATION
     The default configuration is as follows:

       Option "DebugLevel"	  "0"
       Option "StartKeysEnabled"  "True"
       Option "StartMouseEnabled" "True"
       Option "MapButton1"	  "button=1"
       Option "MapButton2"	  "button=2"
       Option "MapButton3"	  "button=3"
       Option "MapButton4"	  "none"
       ...
       Option "MapAxis1"	  "mode=relative    axis=+1x  deadzone=5000"
       Option "MapAxis2"	  "mode=relative    axis=+1y  deadzone=5000"
       Option "MapAxis3"	  "mode=relative    axis=+1zx deadzone=5000"
       Option "MapAxis4"	  "mode=relative    axis=+1zy deadzone=5000"
       Option "MapAxis5"	  "mode=accelerated axis=+1x  deadzone=5000"
       Option "MapAxis6"	  "mode=accelerated axis=+1y  deadzone=5000"
       Option "MapAxis7"	  "mode=none"
       ...

ACCELERATED AXIS CONFIGURATION
     Accelerated  mode	should	be  selected,  if the axis is a directional pad,
     which reports only three states: negative, center, positive.  It  will  re-
     sult  in  smoothly accelerated movement when the axis is deflected.  An op-
     tional factor will affect the acceleration and final speed.

     This example will set up the axis as scrolling  vertically  inverted,  with
     half the speed:
       Option "MapAxis1"     "mode=accelerated axis=-0.5zy"

     This  example  maps four buttons to the four pointer directions, so you can
     use the buttons like a d-pad.  The movement will be accelerated  with  half
     the normal speed:
       Option "MapButton1"     "axis=+0.5x"
       Option "MapButton2"     "axis=-0.5x"
       Option "MapButton3"     "axis=+0.5y"
       Option "MapButton4"     "axis=-0.5y"

ABSOLUTE AXIS CONFIGURATION
     In  absolute  axis mode, the position of the cursor will match the position
     of the configured axis, but relative to the previous position of  the  cur-
     sor.   You can specify the range in which the cursor can move.  The default
     range is the screen size.

     In this example the first axis gets a range from left to the right  of  the
     screen.   The  second axis gets a total range of 200 pixels, 100 to the top
     and 100 to the bottom:
       Option "MapAxis1"     "mode=absolute axis=x"
       Option "MapAxis2"     "mode=absolute axis=200y"

GENERATING KEY EVENTS
     Providing	a  "key=<scancode>[,<scancode>[...]]"  option  will  generate  X
     Events  with  specified  scancodes.   When the button/axis is released, the
     keys will be released in opposite order.

     If you want a certain KeySym, look up the matching scancode  using  xmodmap
     -pk.  The scancodes depend on the configured keyboard layout.  You can also
     use  unused  keycodes  and  map  them  to	a  KeySym  of  your choice using
     xmodmap(1).

     You can specify up to 4 scancodes per joystick button/axis,  which  can  be
     used for modificators to get the KeySym you want.

     Examples:
       Option "MapButton1"     "key=64,23"
     will generate Alt_L+Tab when the button is pressed.

       Option "MapButton1"     "key=50,40"
     will generate a Shift_L+d which will result in an uppercase d.

       Option "MapButton1"     "key=65"
     will result in a space key.

       Option  "MapAxis1"      "mode=relative	 keylow=113  keyhigh=114 axis=0.5key"
       Option  "MapAxis2"      "mode=relative	 keylow=111  keyhigh=116"
       Option  "MapAxis3"      "mode=accelerated keylow=113  keyhigh=114"
       Option  "MapAxis4"      "mode=accelerated keylow=111  keyhigh=116"
     will  map the first and third axis to the arrow keys left and right and the
     second and fourth axis to the arrow keys up and down.

     The keys for the first two axes will be generated in an interval  according
     to  the  value of the axis.  The autorepeat speed of the first axis will be
     half the speed of that of the second axis.  The  keys  for  the  third  and
     fourth  axis are generated once when the axis moves out of the deadzone and
     when it moves back into the deadzone.  XLibre will  autorepeat  those  keys
     according to current keyboard settings.

XI2 Events
     If you only care about raw valuator events instead of using the joystick to
     control the cursor, consider using the evdev(4) input driver.  If you still
     use the joystick driver for raw events, make sure to unmap all axes/buttons
     and add the valuator option to the axes:

       Option  "MapAxis1"      "mode=none valuator"
       Option  "MapAxis2"      "mode=none valuator"
       Option  "MapAxis3"      "mode=none valuator"
       Option  "MapAxis4"      "mode=none valuator"
       ...
       Option  "MapButton1"	 "button=1"
       Option  "MapButton2"	 "button=2"
       Option  "MapButton3"	 "button=3"
       Option  "MapButton4"	 "button=4"
       Option  "MapButton5"	 "button=5"
       ...

     Remember,	that  valuators 0 and 1 are reserved for pointer movement, addi-
     tional axes will start with valuator 2.

     You might also want to set the device "floating" to stop it from  reporting
     core events:
       Option  "Floating"      "true"

NOTES
     It is not recommended to enable the joystick input driver by default unless
     explicitly requested by the user.

     Configuration  through  InputClass sections is recommended in X servers 1.8
     and later.  See xorg.conf.d(5) for more details.  An example xorg.conf.d(5)
     snippet is provided in ${sourcecode}/config/50-joystick-all.conf

     Configuration through hal fdi files is recommended in X servers  1.5,  1.6,
     and  1.7.	 An  example  hal  policy  file  is  still provided in ${source-
     code}/config/50-x11-input-joystick.fdi to be placed in /etc/hal/fdi/policy.

SEE ALSO
     XLibre(1), xorg.conf(5), xorg.conf.d(5), Xserver(1), X(7), xmodmap(1)

AUTHORS
     Sascha Hlusiak (2007-2012),
     Frederic Lepied (1995-1999)

xlibre-xf86-input-joystick 25.0.0  2012-10-03			    JOYSTICK(4x)

home | help