How to Configure Mouse and Pointer Accessibility on Fedora

Configure mouse speed, natural scrolling, and mouse keys on Fedora using GNOME Settings or gsettings commands.

The pointer feels wrong

You just connected a new mouse or switched to a laptop with a high-resolution trackpad. The pointer jumps across the screen when you need precision, or it drags behind your hand when you are trying to click quickly. You open GNOME Settings, adjust the speed slider, and the change feels inconsistent. You need a reliable way to lock in pointer behavior, whether you are configuring a workstation for accessibility compliance or simply fixing a frustrating input curve.

What GNOME actually does with pointer settings

GNOME does not store desktop preferences in plain text files scattered across /etc. The environment uses a centralized binary database called dconf. The gsettings command is the official, schema-aware wrapper around that database. When you move a slider in the Settings application, GNOME translates your input into a gsettings call behind the scenes. When you run gsettings set in the terminal, you are writing directly to the same key-value store.

The system reads these values when your user session starts. The display server applies them to the input stack. Wayland and X11 handle the actual acceleration curves and event routing differently, but the configuration layer remains identical. Think of gsettings as the documented API for desktop preferences. Bypassing it with raw dconf write commands works, but you lose type validation, default fallback behavior, and automatic schema updates when GNOME upgrades.

Run gsettings list-schemas | grep mouse to see which configuration paths are available in your current session. The output will show org.gnome.desktop.peripherals.mouse for general pointer behavior and org.gnome.desktop.a11y.mouse for accessibility overrides. Knowing the exact schema path saves time when you need to script these settings for new user accounts.

Configure pointer behavior from the terminal

The terminal approach gives you exact decimal control, immediate application, and the ability to automate configuration across multiple machines. You do not need root privileges to change user-level pointer settings. The changes apply to the current session and persist across reboots.

Here is how to adjust the base pointer speed. The value ranges from negative acceleration to positive acceleration, with zero representing a linear 1:1 mapping.

# Set pointer speed to a moderate value. Negative values increase acceleration.
gsettings set org.gnome.desktop.peripherals.mouse speed -0.5

# Apply the change immediately to the running session.
gsettings set org.gnome.desktop.peripherals.mouse natural-scroll false

# Lock the setting so it survives desktop environment updates.
gsettings set org.gnome.desktop.peripherals.mouse accel-profile default

Mouse acceleration and pointer speed are not the same thing. Speed controls the baseline sensitivity. Acceleration controls how quickly the pointer gains velocity as you move the hardware faster. A value of -0.5 gives you a predictable, linear feel. A value of 0.5 makes the pointer start slow and snap across the screen with quick flicks. Pick the curve that matches your workflow.

Here is how to enable Mouse Keys, which routes pointer movement through the numeric keypad. This is essential for users who cannot use a physical mouse or trackpad.

# Activate the accessibility overlay that captures numpad input.
gsettings set org.gnome.desktop.a11y.mouse enable-mouse-keys true

# Set the initial delay before the pointer starts moving. Lower is faster.
gsettings set org.gnome.desktop.a11y.mouse initial-delay 0.2

# Set the acceleration curve for sustained key presses.
gsettings set org.gnome.desktop.a11y.mouse acceleration-profile default

# Define how many pixels the pointer moves per key press.
gsettings set org.gnome.desktop.a11y.mouse max-speed 8

The numeric keypad maps to directional movement. The 8 key moves up, 2 moves down, 4 moves left, 6 moves right. The 5 key acts as a left click. The 0 key releases the button. The Insert key toggles click-and-hold. The Delete key toggles right-click. Hold Shift while pressing a direction key to move at half speed. Hold Ctrl to move at double speed. These modifiers work regardless of your base speed configuration.

Here is how to configure natural scrolling and pointer acceleration profiles for touchpads. The same schema handles both mice and touchpads in modern GNOME versions.

# Reverse scroll direction to match mobile device behavior.
gsettings set org.gnome.desktop.peripherals.mouse natural-scroll true

# Disable hardware acceleration for pixel-perfect control.
gsettings set org.gnome.desktop.peripherals.mouse accel-profile disabled

# Set a fixed sensitivity multiplier for touchpad gestures.
gsettings set org.gnome.desktop.peripherals.touchpad speed 0.3

Touchpad sensitivity and mouse speed use separate schema keys. Changing one does not affect the other. If you use both a trackpad and an external mouse, configure them independently. The accel-profile key accepts three values: default, adaptive, or disabled. The adaptive profile adjusts sensitivity based on your historical movement patterns. The disabled profile gives you a strict linear mapping.

Check your current values before overwriting them. You can restore defaults later if the new curve feels wrong.

Verify the changes took effect

Terminal commands apply immediately, but the display server sometimes caches input parameters. Verify that the database received your values and that the session is using them.

Here is how to read back the current configuration and confirm the active profile.

# Retrieve the current speed value from the schema.
gsettings get org.gnome.desktop.peripherals.mouse speed

# Check whether mouse keys are currently active in the session.
gsettings get org.gnome.desktop.a11y.mouse enable-mouse-keys

# List all mouse-related keys to audit your configuration.
gsettings list-recursively org.gnome.desktop.peripherals.mouse

The get command returns the exact value stored in the database. If you see @double 0.5, the value is active. If you see @string 'default', the system is using the schema fallback. Run gsettings reset org.gnome.desktop.peripherals.mouse speed to return to the distribution default. The reset command clears your override and lets GNOME apply its built-in baseline.

Open a terminal and move your pointer. The changes should feel immediate. If the pointer still behaves incorrectly, your session might be holding a stale input state. Log out and log back in. The display server will reload the dconf database on session start.

Check the system journal if the pointer freezes or jumps erratically after configuration. Input stack errors show up under the libinput or gnome-shell service tags.

# Example journal output when libinput rejects an invalid acceleration value
libinput: Failed to set pointer acceleration profile: Invalid argument
gnome-shell: Input device configuration error, falling back to defaults

The error means you passed a value outside the accepted range. Mouse speed accepts floats between -1.0 and 1.0. Max speed for mouse keys accepts integers between 1 and 100. Stay within those bounds.

Common pitfalls and why settings revert

Settings sometimes disappear after a reboot or a GNOME update. The cause is usually one of three things. Enterprise policy overrides, broken user profiles, or schema version mismatches.

Group Policy Management (GDM) and dconf profiles can lock settings. If your machine is joined to a directory service, an administrator might enforce a specific pointer configuration. Run dconf dump / to see if your keys are being shadowed by a system-wide profile. The output will show # prefixed lines for locked values. You cannot override locked keys without root access and policy modification.

User profile corruption happens when the ~/.config/dconf/user binary database gets truncated. This usually occurs during an unclean shutdown or a disk full event. When the file is corrupted, GNOME silently falls back to defaults on login. Copy the database to a safe location before it breaks. Run cp ~/.config/dconf/user ~/.config/dconf/user.backup once a month if you rely on custom input mappings.

Schema version mismatches occur after major Fedora upgrades. GNOME updates its gsettings schemas when the desktop environment changes. Old keys sometimes get renamed or deprecated. Run gsettings list-schemas | grep -i mouse after an upgrade to verify your paths still exist. Update your scripts if the schema namespace changed.

Mouse Keys can interfere with normal typing if you leave it enabled. The numeric keypad stops functioning as a standard input device. Disable it when you switch back to a physical mouse. The toggle is immediate. No reboot required.

Reset the entire mouse schema if you need a clean slate. The reset-recursively command clears every override in that namespace.

# Clear all custom mouse settings and restore distribution defaults.
gsettings reset-recursively org.gnome.desktop.peripherals.mouse

# Clear accessibility overrides as well.
gsettings reset-recursively org.gnome.desktop.a11y.mouse

Run this before you start debugging input lag. Half the time the symptom is caused by a conflicting override from a previous experiment.

Choose the right tool for your workflow

Use GNOME Settings when you want a visual interface and only need to change one or two values. Use gsettings when you need exact decimal precision, want to script configuration for multiple accounts, or are working over SSH without a desktop environment. Use dconf directly when you are debugging locked keys or need to export an entire configuration subtree for backup. Use libinput configuration files in /etc/X11/xorg.conf.d/ or /etc/udev/rules.d/ when you need hardware-level overrides that survive desktop environment changes. Stay on gsettings for 95 percent of pointer and accessibility adjustments.

Where to go next