Pages

Friday, February 13, 2026

Unleashing the Full Potential of Your Logitech MX Master on Linux

If you’ve recently picked up a Logitech MX Master mouse, you already know it’s a phenomenal piece of hardware. However, if you are a Linux user, you’ve probably hit a frustrating roadblock: Logitech doesn't provide an official version of their "Logi Options" software for Linux. Without it, your premium mouse is reduced to just basic point-and-click functionality.

Fortunately, the open-source community has a brilliant solution called Logiops. While the official documentation can sometimes feel a bit scattered, getting it up and running on Fedora is actually quite straightforward. Here is a simplified guide to compiling Logiops and getting all those extra buttons and gestures working on your machine.

(Note: The package names and commands below use dnf specifically for Fedora distributions. If you are on Ubuntu/Debian, you will need to use apt and their equivalent Debian package names.)

Step 1: Install the Required Dependencies

Before we can build the software, your Fedora system needs the right C++ compilers and development libraries. Open up your terminal and run the following command to install everything you need in one go:

sudo dnf install cmake gcc-c++ glib2-devel libevdev-devel systemd-devel libconfig-devel

Troubleshooting Tip: If CMake ever complains about a missing C++ compiler, double-check that gcc-c++ was successfully installed. If you see a "gio-2.0 not found" error during the CMake step, it means glib2-devel is missing.

Step 2: Clone and Build the Project

With the dependencies out of the way, it’s time to pull the source code from GitHub and build it.

First, clone the repository into a directory of your choice:

git clone https://github.com/PixlOne/logiops.git

Next, navigate into the new folder, create a build directory, and compile the code. Run these commands one by one:

cd logiops
mkdir build
cd build
cmake ..
make

Step 3: Create Your Configuration File

Logiops needs to know exactly what you want each button to do. We define this by creating a configuration file.

Create a new file at /etc/logid.cfg (you will need root/sudo privileges to write to the /etc/ directory). Here is an excellent starter configuration for an MX Master 2S (if you have a 3S, simply change the name field to "MX Master 3S"):

devices: (
{
    name: "Wireless Mouse MX Master 2S";
    smartshift:
    {
        on: true;
        threshold: 20;
    };
    hiresscroll:
    {
        hires: false;
        invert: false;
        target: false;
    };
    dpi: 1750;

    buttons: (
    {
        # Thumb button (Gestures)
        cid: 0xc3;
        action =
        {
            type: "Gestures";
            gestures: (
                {
                    direction: "Up";
                    mode: "OnRelease";
                    action = { type: "Keypress"; keys: ["KEY_VOLUMEUP"]; };
                },
                {
                    direction: "Down";
                    mode: "OnRelease";
                    action = { type: "Keypress"; keys: ["KEY_VOLUMEDOWN"]; };
                },
                {
                    direction: "Left";
                    mode: "OnRelease";
                    action = { type: "Keypress"; keys: ["KEY_PREVIOUSSONG"]; };
                },
                {
                    direction: "Right";
                    mode: "OnRelease";
                    action = { type: "Keypress"; keys: ["KEY_NEXTSONG"]; };
                },
                {
                    direction: "None";
                    mode: "OnRelease";
                    action = { type: "Keypress"; keys: ["KEY_PLAYPAUSE"]; };
                }
            );
        };
    },
    {
        # Button behind the scroll wheel
        cid: 0xc4;
        action = { type = "ToggleSmartshift"; };
    },
    {
        # Back button: Previous workspace
        cid: 0x53;
        action = { type: "Keypress"; keys: ["KEY_LEFTMETA", "KEY_PAGEUP"]; };
    },
    {
        # Next button: Next workspace
        cid: 0x56;
        action = { type: "Keypress"; keys: ["KEY_LEFTMETA", "KEY_PAGEDOWN"]; };
    }
    );
});

Feel free to tweak the dpi, customize the keys arrays, or adjust the SmartShift threshold to match your personal workflow!

Step 4: Install and Start the Daemon

You’re almost done. The final step is to install the compiled application to your system and enable the background service (daemon) so it starts automatically.

Run the following commands from inside your build directory:

sudo make install
sudo systemctl enable --now logid

The --now flag is a handy trick that enables the service to start on boot, while simultaneously starting it up right this second.

Final Thoughts

That's it! Your MX Master should now be fully functional on Fedora.

One final tip: If you find that your back and forward buttons aren't registering right away, try completely rebooting your machine. Sometimes the system needs

Tuesday, December 9, 2025

Changing the Gateway IP in Rocky Linux

 

Step 1: Find the Real Connection Name

Before you change anything, ask NetworkManager what the connection is actually called. Do not guess.

Run this command:

Bash
nmcli connection show

What to look for:

Focus on the NAME column on the far left.

NAMEUUIDTYPEDEVICE
enp1s05fb06bd0...ethernetenp1s0
Wired connection 12ad18c...ethernetenp1s0
  • In the first row, the connection name matches the device name (enp1s0).

  • In the second row, the connection is named Wired connection 1.

Copy the text from the NAME column exactly.

Step 2: Set the New Gateway

Now that you have the correct name, use nmcli to modify the configuration.

Syntax:

sudo nmcli connection modify "<CONNECTION_NAME>" ipv4.gateway <NEW_IP>

Example (If your name is "enp1s0"):

Bash
sudo nmcli connection modify "enp1s0" ipv4.gateway 192.168.0.70

Example (If your name is "Wired connection 1"):

Bash
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.0.70

Step 3: Apply the Changes

Modifying the connection only updates the config file on the disk. To make it live, you must reload the interface.

Bash
sudo nmcli connection up "enp1s0"

(Replace enp1s0 with your actual connection name found in Step 1).

Step 4: Verify

Check the kernel routing table to confirm the default route has updated.

Bash
ip route show

You are looking for the line starting with default:

default via 192.168.0.70 dev enp1s0 proto static metric 100


Common Gotcha: DHCP Overrides

If you followed the steps above but ip route still shows the old gateway, your server is likely getting its IP via DHCP.

By default, DHCP provides an IP address and a gateway. The DHCP gateway will override your manual setting every time the interface comes up.

The Fix:

You need to tell NetworkManager to keep the DHCP IP address but ignore the DHCP gateway.

Bash
# 1. Ignore the automatic gateway from DHCP sudo nmcli connection modify "enp1s0" ipv4.ignore-auto-routes yes # 2. Enforce your manual gateway sudo nmcli connection modify "enp1s0" ipv4.gateway 192.168.0.70 # 3. Apply changes sudo nmcli connection up "enp1s0"

Summary

  • Don't assume the connection name is "System enp1s0".

  • Always check nmcli connection show first.

  • Remember to reload with nmcli connection up after making changes.

Fix "Failed to Mount /sysroot" on Rocky Linux

 There are few things more heart-stopping for a System Administrator than watching a server boot, only to see it hang and drop into the dreaded Dracut Emergency Shell.

If you are seeing the error Failed to mount /sysroot followed by a prompt that looks like dracut:/#, your system has failed to load the root filesystem. On Rocky Linux (and RHEL/AlmaLinux), this is almost always caused by XFS filesystem corruption following a hard shutdown, power loss, or hypervisor crash.


Prerequisite: Understand the Environment

You are currently in the initramfs environment. This is a small, temporary filesystem loaded into memory before the real disk is mounted. Because the real disk is corrupted, the OS cannot transition to it.

Note: Rocky Linux uses XFS as its default filesystem. Unlike EXT4 (which uses fsck), XFS has its own set of tools, specifically xfs_repair.


Step 1: Identify Your Root Partition

First, you need to find the specific device name of your root partition. Since you are in a limited shell, standard commands like lsblk might not show what you expect.

Run the block ID command:

Bash
blkid

You are looking for a device labeled root or an LVM path.

  • Standard Partition: /dev/sda2 or /dev/nvme0n1p2

  • LVM (Most Common): /dev/mapper/rl-root or /dev/mapper/rocky-root

Can't see the /dev/mapper entries? If you use LVM (Logical Volume Manager) and don't see your volumes, they are likely inactive. Activate them manually:

Bash
lvm vgchange -ay

Run blkid again. You should now see your root volume.


Step 2: The Repair Process

Crucial Rule: Never run a filesystem repair on a mounted partition. Since the boot failed, your partition is likely unmounted, which is exactly what we want.

Attempt 1: Standard Repair

Run the repair command against your specific root device (replace the path below with the one you found in Step 1):

Bash
xfs_repair /dev/mapper/rl-root

Scenario A: Success If the command runs, shows a flurry of text, and ends with done, you are safe. Proceed to Step 3.

Scenario B: "Filesystem has a dirty log" If xfs_repair fails and says the log is dirty, it means there is pending metadata in the journal. It will suggest you mount and unmount the filesystem to replay the log.

Try to mount it manually to let the journal replay:

  1. mount /dev/mapper/rl-root /sysroot

  2. umount /sysroot

  3. Run xfs_repair /dev/mapper/rl-root again.

Attempt 2: Force Log Zeroing (The "Nuclear" Option)

If the mount fails, or if xfs_repair refuses to run because the log is too corrupt, you must use the -L flag.

Warning: The -L flag forces the filesystem to zero out the log. This means you may lose the metadata for the most recent file operations that were occurring exactly when the server crashed. However, this is often the only way to make the disk mountable again.

Bash
xfs_repair -L /dev/mapper/rl-root

You should see output indicating that the log is being destroyed and the filesystem is being rebuilt.


Step 3: Verify and Reboot

Once the repair returns cleanly, verify that the filesystem is mountable.

  1. Test Mount:

    Bash
    mount /dev/mapper/rl-root /sysroot
    

    If this command returns no output, it worked.

  2. Reboot: You can now exit the Dracut shell. The system will detect the exit and attempt to resume the boot process.

    Bash
    exit
    

    (Alternatively, type reboot to restart the machine entirely).


Troubleshooting: "It still won't boot!"

If xfs_repair says the disk is clean but you still get boot errors, the issue might be in your /etc/fstab file (e.g., a secondary drive is failing, and the OS refuses to boot without it).

To check this from the Dracut shell:

  1. Mount the system: mount /dev/mapper/rl-root /sysroot

  2. Change root: chroot /sysroot

  3. Edit fstab: vi /etc/fstab

Comment out any non-essential drives (like data drives or swap) to see if the system will boot with just the root drive.


Summary

The "Failed to mount /sysroot" error is intimidating, but xfs_repair is a robust tool.

  1. Use blkid to find your device.

  2. Use lvm vgchange -ay if using LVM.

  3. Run xfs_repair /dev/device-name.

  4. Use -L only if absolutely necessary.