Code Monkey home page Code Monkey logo

revoco's Introduction

```
== Revoco
== MX revolution control for Linux
``` 


About
-----

A command-line tool to setup the Logitech MX Revolution mouse
buttons behavior under Linux

Install
-------

```
$ make
$ ./revoco
Revoco v0.6 - Change the wheel behaviour of Logitech's MX-Revolution mouse.

Usage:
  revoco free                      free spinning mode
  revoco click                     click-to-click mode
  revoco manual[=button[,button]]  manual mode change via button
  revoco auto[=speed[,speed]]      automatic mode change (up, down)
  revoco battery                   query battery status
  revoco mode                      query scroll wheel mode
  revoco reconnect                 initiate reconnection

Prefixing the mode with 'temp-' (i.e. temp-free) switches the mode
temporarily, otherwise it becomes the default mode after power up.

Button numbers:
  0 previously set button   7 wheel left tilt
  3 middle (wheel button)   8 wheel right tilt
  4 rear thumb button       9 thumb wheel forward
  5 front thumb button     11 thumb wheel backward
  6 find button            13 thumb wheel pressed
```
References
----------

Note: this is copy/paste http://blogs.gentoo.org/betelgeuse/2006/11/26/getting_mx_revolution_setup_in_gentoo/

```
== Getting MX Revolution setup in Gentoo
== Posted on November 26, 2006 by betelgeuse
```

I recently bought a Logitech MX Revolution mouse. This is a very nice cordless
laser mouse with plenty of buttons. See Gizmodo review for pictures. As usual I
first googled to find what others have done to get everything working with this
mouse. Of course the usual functionality was there without anything special.

The first link Google gave me was
http://andy.hillhome.org/blog/2006/09/27/logitech-mx-revolution-in-linux/ Based
on this information I set out to setup my new mouse. First I changed my
xorg.conf to have the following:

```
Section "InputDevice"
		Identifier  "Mx Rev"
		Driver      "evdev"
		Option      "Protocol"  "Auto"
		Option      "Name"      "Logitech USB Receiver"
		Option      "Phys"      "usb-*/input0
EndSection
```

This gives evdev control of my mouse and still keeps my other stuff working
using the normal /dev/mice/input. This at least makes it possible to control
this mouse specifically if I need to. The hotplug input framework should
hopefully make this kind of stuff obsolete in the future.

Having evdev working and handling the mouse I got xev to recognize all my mouse
buttons nicely. I have been using imwheel with my previous mouses and have
found it an able tool to map mouse events to keyboard events. Here is my
`.imwheelrc`:

```
"Firefox"
None, Thumb1, Alt_L|Left
None, Thumb2, Alt_L|Right
None, Left, Control_L|W
None, Right, Control_L|T

"Thunderbird"
None, Thumb1, N
None, Thumb2, B

"Konsole"
None, Thumb1, Shift_L|Right
None, Thumb2, Shift_L|Left
```

What this does:

- Makes back/forward work in Firefox with Thumb buttons
- Makes creating/deleting tabs work by tilting the scroll wheel
- Makes Thunderbird go to next unread message / previous message using Thumb buttons
- Makes Konsole change tabs using Thumb buttons

Using the same pattern you should be able to adjust the rest of the buttons to
your liking. I will probably look into using the Thumb wheel to control beryl.

The last thing I didn’t like about the default behavior of the MX in Linux was
the scroll wheel. By default it is in the Free-spin mode which means that
clicking the wheel does not generate Button2 events. I found a handy tool to
control the features of this mouse in the comments of that blog post and I made
an ebuild for it
http://overlays.gentoo.org/svn/dev/betelgeuse/app-misc/revoco/. Using this tool
I can just issue revoco manual=6 and after that I can use the One-Touch Search
button to change the scrolling mode of the mouse. I don’t know yet if this is
good enough for the main tree as it atm must be run setuid because of default
/dev/usb/hiddevN permissions. Will probably add it if I find the time to
rewrite it using libhid.

The final touch to glue all this together is to have my .xprofile start the necessary programs for me:

```
revoco manual=6
#xmodmap -e "keycode 122 = XF86Search"
/usr/bin/imwheel -k -b "007689"
```

Notice that you can use xmodmap to map the One-Touch search to XF86Search if
you like. It’s quite weird how the button is handled. To the OS it is shown as
a keyboard with one button. Well engineers are creative.

# EOF

revoco's People

Contributors

danalbert avatar dolanor avatar heltjara avatar sebastien avatar urban82 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

revoco's Issues

Not working with "Bluetooth Mini-Receiver"

Do you provide help with stuff like this? I don't want to waste time writing a lot of stuff out if you don't have the time to help anyway.

Basically I added the new product code and it selected the device but it doesn't work.

Here is the device from lsusb -v.

Bus 003 Device 004: ID 046d:c70a Logitech, Inc. MX5000 Cordless Desktop
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x046d Logitech, Inc.
  idProduct          0xc70a MX5000 Cordless Desktop
  bcdDevice           51.03
  iManufacturer           1 Logitech
  iProduct                2 BT Mini-Receiver
  iSerial                 3 000761CA8E60
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          4 RR51.03_B0077
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower               98mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     226
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               5
Device Status:     0x0000
  (Bus Powered)

And then there are 2 more devices in there but neither can be selected with the ioctl by adding the product code. Only the one above gets detected there.

Bus 003 Device 003: ID 046d:c70e Logitech, Inc. MX1000 Bluetooth Laser Mouse
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x046d Logitech, Inc.
  idProduct          0xc70e MX1000 Bluetooth Laser Mouse
  bcdDevice           51.03
  iManufacturer           1 Logitech
  iProduct                2 BT Mini-Receiver
  iSerial                 3 000761CA8E60
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          4 RR51.03_B0077
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower               98mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      59
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)

Bus 003 Device 002: ID 046d:0b02 Logitech, Inc. C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode)
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 Unused
  bDeviceProtocol         0 Full speed (or root) hub
  bMaxPacketSize0         8
  idVendor           0x046d Logitech, Inc.
  idProduct          0x0b02 C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode)
  bcdDevice           51.03
  iManufacturer           1 Logitech
  iProduct                2 BT Mini-Receiver
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0001  1x 1 bytes
        bInterval             255
Hub Descriptor:
  bLength               9
  bDescriptorType      41
  nNbrPorts             3
  wHubCharacteristic 0x0004
    Ganged power switching
    Compound device
    Ganged overcurrent protection
  bPwrOn2PwrGood       50 * 2 milli seconds
  bHubContrCurrent    100 milli Ampere
  DeviceRemovable    0x0c
  PortPwrCtrlMask    0xff
 Hub Port Status:
   Port 1: 0000.0100 power
   Port 2: 0000.0103 power enable connect
   Port 3: 0000.0103 power enable connect
Device Status:     0x0000
  (Bus Powered)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.