joystick(4)


NAME

   joystick - Joystick input driver

SYNOPSIS

   Snipped 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  Xorg  input driver for controlling the pointer with a
   joystick device.

   Use this driver, if you want to
      - generate cursor movement, perform button or key events to  control
      desktop 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
   reports 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
   devices:

   - 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
   section 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: Xorg 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 optional 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
                 released, matching keyup events in the opposite order are
                 generated. 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 button 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 features.

                 The  range  of  the  valuators is always -32767 to 32768.
                 Neither 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/keyhigh)

                 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
                 keydown 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 direction (right or down).

                 If mode is set  to  relative:  The  driver  will  emulate
                 autorepeat  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 Xorg 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 mapping. 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
   result  in smoothly accelerated movement when the axis is deflected. An
   optional 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 cursor. 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. X.Org 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,
   additional 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 explicitely 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) snipped 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
   ${sourcecode}/config/50-x11-input-joystick.fdi    to   be   placed   in
   /etc/hal/fdi/policy.

SEE ALSO

   Xorg(1), xorg.conf(5), xorg.conf.d(5), Xserver(1), X(7), xmodmap(1)

AUTHORS

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





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.