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
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
Arch wiki documentation:
Map scancodes to keycodes
Arch wiki documentation:
libinput
libinput documentation:
latest