Logitech Marble Mouse

The Logitech Marble Mouse is a pointing device with four buttons and a trackball, also known as the Trackman Marble. The Marble Mouse is usable either left- or right-handed. It requires some configuration to enable scrolling with the trackball. For a detailed image, see: Logitech Marble Mouse (or here).

Installation

The mouse is detected at boot time or whenever it is "hot-plugged" into a booted system, automatically. No special installation is required.

Basic function

The Logitech Marble Mouse has a trackball and four buttons, namely Large left button, Large right button, Small left button and Small right button. It does not have a scroll wheel, neither it has a middle button (conventionally the button placed "under the wheel"). As such, default usability is bad on modern systems and applications that rely heavily on those functions. However, it is possible to enable both of those functions with some simple configurations (see #Button mapping and #Scroll modifier).

When no additional configuration is specified, buttons are mapped to these functions:

Default Button Actions
Button  Result                
Large left button left-click
Both large buttons middle-click 1
Large right button right-click
Small left button browser back
Small right button browser forward
  1. Both large buttons clicked simultaneously creates a middle-click emulated event. This is enabled by default for pointer devices without a middle button.
Non-button Input Actions
Action     Result                
Roll ball down move cursor down
Roll ball up move cursor up
Roll ball left move cursor left
Roll ball right move cursor right

By default, Logitech Marble Mouse has no way of performing scroll events. However, scrolling is possible by assigning a scroll modifier, i.e. a button that when held down trackball movements are converted to scroll events.

Button mapping

In modern systems, the best way to remap buttons is to configure mappings in udev/hwdb that apply directly in the kernel (check Map scancodes to keycodes for details).

Note: It is still possible to remap button functions in upper layers (e.g. libinput X11 configuration), but it is discouraged as it can lead to inconsistent behavior.

The default scancode-to-event mappings for Logitech Marble Mouse buttons are as follows:

Button Scancode Default Event
Large left button KEYBOARD_KEY_90001 btn_left
Large right button KEYBOARD_KEY_90002 btn_right
Small left button KEYBOARD_KEY_90004 btn_side
Small right button KEYBOARD_KEY_90005 btn_extra

There is no mapping for btn_middle event by default, but it's possible to remap one of the KEYBOARD_KEY_90000x scancodes to the btn_middle event and make the respective button to behave like a proper middle button.

For example, to remap the Small left button to middle button, create an .hwdb file as follows (pay attention to case and indentation):

/etc/udev/hwdb.d/99-logitech-marble-middle.hwdb
evdev:input:b0003v046DpC408*
 KEYBOARD_KEY_90004=btn_middle

After that, update the hardware database index and manually force udev to trigger the new rule:

# systemd-hwdb update
# udevadm trigger

It is possible to check which event is being raised by each button press by using evtest. If the remapping worked, pressing Small left button should output events like this:

# evtest /dev/input/by-id/usb-Logitech_USB_Trackball-event-mouse
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc408 version 0x110
Input device name: "Logitech USB Trackball"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 276 (BTN_EXTRA)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1747653343.971300, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1747653343.971300, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
Event: time 1747653343.971300, -------------- SYN_REPORT ------------
Event: time 1747653344.043073, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1747653344.043073, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 0
Event: time 1747653344.043073, -------------- SYN_REPORT ------------
Note: Remapping the button in hwdb will make the upper layers perceive the click as if it were a real middle button click. So when referring to the button later, use middle button identifiers (e.g. in GNOME gsettings, set scroll-wheel-emulation-button to value 2).

Troubleshooting libinput quirk

In some systems Logitech Marble Mouse libinput configuration includes a "quirk" that completely disables BTN_MIDDLE events, so after remapping a button to btn_middle in hwdb, said button will "stop working" completely (even if evtest still reports BTN_MIDDLE events). It's possible to check this using libinput, by running libinput debug-events as root and making sure that clicking the remapped button does not output any events.

To fix that, create an override quirks file as follows (if the file already exists, append the following contents to it):

/etc/libinput/local-overrides.quirks
[Logitech Marble Mouse Trackball]
MatchUdevType=mouse
MatchBus=usb
MatchVendor=0x046D
MatchProduct=0xC408
AttrEventCode=+BTN_MIDDLE

then reboot to make sure the config takes effect.

Now clicking the remapped button should output events like this:

# libinput debug-events
event6   POINTER_BUTTON               +9.968s	BTN_MIDDLE (274) pressed, seat count: 1
event6   POINTER_BUTTON               +10.072s	BTN_MIDDLE (274) released, seat count: 0

Scroll modifier

One huge limitation for the Logitech Marble Mouse is the lack of a scroll wheel or scroll ring. This limitation is overcome by assigning a scroll modifier: a mouse button which allows the trackball to scroll. When the scroll modifier is held, the trackball movement becomes scroll events.

Note: By default, the button selected as scroll modifier will still retain it's usual function when clicked (i.e. quick press-and-release action, instead of press-and-hold). For example, if Small left button is assigned as scroll modifier, by default it will still perform browser back when clicked. That can be modified by a scroll modifier lock setting, that changes the behavior of the scroll modifier from "scroll while held" to "scroll until clicked again". In the latter case, there is no way of using the original click function of the button

When defining the scroll modifier button, the ID used to specify the button is a number associated with the event, and not directly the hardware button. That means if buttons were remapped in the kernel (#Button mapping), the ID used will correspond to the remapped button. The event ID numbers (and default buttons) are in the table below:

Default Hardware Button Event Event number
Large left button btn_left 1
(none) btn_middle 2 †
Large right button btn_right 3
Small left button btn_side 8
Small right button btn_extra 9
Note:
  • Numbers 4 to 7 refer to scroll events
  • † Emulated middle-click (i.e. Both large buttons simultaneous click) is not a real event and cannot be used as scroll modifier. In order for middle-click button to double down as scroll modifier, it must be first remapped to a real button as per #Button mapping

The scroll modifier button is implemented in libinput, but libinput is made so the upper layers are the ones responsible for configurations (check libinput for details), so the proper way to define the scroll modifier will depend on whether Wayland or X11 is used, and also on the desktop environment. The following sections show how to configure the scroll modifier (as well as other settings) in different systems.

GNOME 3 and Wayland

GNOME provides a limited set of configuration options for enabling a scroll modifier and adjusting the acceleration behaviour of the mouse cursor. These setings can be modified using gsettings and are also available via dconf under /org/gnome/desktop/peripherals/trackball/.

Change the following option to assign a button as a scroll modifier:

$ gsettings set org.gnome.desktop.peripherals.trackball scroll-wheel-emulation-button <button_id>

, where <button_id> is the ID of the libinput event that should act as the modifier (see #Scroll modifier). To deactivate the scroll modifier, set the <button_id> to 0.

It's also possible to enable scroll modifier lock by setting:

$ gsettings set org.gnome.desktop.peripherals.trackball scroll-wheel-emulation-button-lock true

Middle-click emulation is enabled by default for Logitech Marble Mouse and cannot be disabled in settings. It will be disabled however when the libinput quirk is modified so that a BTN_MIDDLE event is enabled (see #Troubleshooting libinput quirk). If after that one still wishes to use middle-click emulation, it can be reenabled with:

$ gsettings set org.gnome.desktop.peripherals.trackball middle-button-emulation true

The trackball can be configured to either use a "flat" or "adaptive" acceleration profile or to just use its "default" one. To do that, set

$ gsettings set org.gnome.desktop.peripherals.trackball accel-profile <profile>

to the desired value.

Sway and Wayland

When running Wayland, the aforementioned configuration files have no effect. Sway provides a limited set of configuration options for enabling mouse wheel emulation and adjusting the acceleration behaviour of the mouse cursor. In your sway configuration file, add the following section to enable scrolling with the marble while the small left button is pressed:

input "1133:50184:Logitech_USB_Trackball" {
    scroll_method on_button_down
}

Hyprland

Hyprland also supports a limited set of options for wheel emulation. Add the following block your configuration:

hyprland.conf
device {
    name = logitech-usb-trackball
    scroll_method = on_button_down
}
Note: Check to make sure your device has the same name as the example above using hyprctl devices.

You can also configure on_button_up or edge per the Hyprland input documentation.

The middle click emulation when clicking both the left mouse button and the right mouse button simultaneously seems to work without additional configuration.

Plasma and Wayland

When running a Plasma Desktop session in Wayland, you can configure scrolling with qdbus, you just have to find the right event number, which you can determine from /dev, for example:

event="$(basename $(readlink /dev/input/by-id/usb-Logitech_USB_Trackball-event-mouse))"
qdbus org.kde.KWin /org/kde/KWin/InputDevice/$event org.kde.KWin.InputDevice.scrollOnButtonDown true

By default the small left button is used. If you want to use the small right button, set

qdbus org.kde.KWin /org/kde/KWin/InputDevice/$event org.kde.KWin.InputDevice.scrollButton 276

For other buttons, follow the table below:

Button     Kwin button code     Function (default)
Large button left 272 normal click
Large button right 273 right click
Small button Left 275 browser forward
Small button right 276 browser back

X11

When using an X11 based desktop, libinput can be configured using the X11 configuration files and utilities. It requires that xf86-input-libinput be installed. Configurations can be added to file /etc/X11/xorg.conf.d/10-libinput.conf. If the file exists, append the contents to it's end. Some basic configuration samples are shown below.

/etc/X11/xorg.conf.d/10-libinput.conf
 Section "InputClass"
   Identifier   "Marble Mouse"
   MatchProduct "Logitech USB Trackball"
   Driver       "libinput"
   Option       "ScrollMethod"    "button"
   Option       "ScrollButton"    "8"
   Option       "MiddleEmulation" "true"
 EndSection

This:

  • Enables horizontal and vertical scrolling by pressing and holding the BTN_SIDE button (Small left button by default) while moving the trackball.
  • Enables middle-click emulation by pressing the two large buttons simultaneously.

If you remapped a real button to BTN_MIDDLE as per #Button mapping, you can use the following:

/etc/X11/xorg.conf.d/10-libinput.conf
 Section "InputClass"
   Identifier   "Marble Mouse"
   MatchProduct "Logitech USB Trackball"
   Driver       "libinput"
   Option       "ScrollMethod"    "button"
   Option       "ScrollButton"    "2"
 EndSection

This:

  • Enables horizontal and vertical scrolling by pressing and holding the BTN_MIDDLE event (i.e. the real button remapped to this event) while moving the trackball.
  • As the BTN_MIDDLE event (ID 2) is enabled and remapped to a real button, there is no need for "MiddleEmulation". However, it can still be enabled if necessary.

Some other notable configuration options are:

Option "ScrollButtonLock" "true" # enable scroll modifier lock mode
Option "LeftHanded" "true" # swap left and right buttons
Option "HorizontalScrolling" "false" # disable horizontal scrolling

Check libinput(4) § CONFIGURATION DETAILS for a comprehensive list of options.

Additional tweaks

Console (gpm)

See Console mouse support for details. Within the console you can use gpm with type option set to imps2. Edit /etc/conf.d/gpm such that:

GPM_ARGS="-m /dev/input/mice -t imps2"

This lets you use the large left button for selecting text and the right button to extend the selection. The small left button acts as a middle-click; it pastes the selection.

See also