# Prerequisites for Running OpenLogi: Linux, macOS, and Windows Requirements

> Discover the essential prerequisites for running OpenLogi on Linux, macOS, and Windows. Learn about kernel modules, udev rules, and systemd user sessions for seamless operation.

- Repository: [Xuan Zhang/OpenLogi](https://github.com/AprilNEA/OpenLogi)
- Tags: getting-started
- Published: 2026-08-28

---

**To run OpenLogi, you must quit conflicting Logitech managers like Solaar, ensure your Linux kernel has the `hidraw` and `uinput` modules loaded, install the `70-openlogi.rules` udev rules for device permissions, and run the background agent under a systemd user session.**

OpenLogi is a native, local-first replacement for Logitech Options+ that consists of three communicating processes—GUI, agent, and overlay—connected via tarpc local-sockets. Meeting the prerequisites for running OpenLogi ensures the background agent can enumerate HID++ devices and synthesize virtual input events without conflicting with existing system services.

## Linux Prerequisites

According to [`docs/INSTALL-linux.md`](https://github.com/AprilNEA/OpenLogi/blob/main/docs/INSTALL-linux.md), Linux systems require specific kernel modules, user permissions, and system services to support OpenLogi's hardware access patterns.

### Kernel Modules: hidraw and uinput

The OpenLogi agent requires two specific kernel modules to interact with Logitech hardware. The **`hidraw`** module enables raw HID++ command access to receivers and devices, while **`uinput`** allows the agent to create virtual input devices for button remapping functionality.

Before starting the agent, verify these modules are loaded:

```bash
lsmod | grep -E 'hidraw|uinput' || echo "Missing kernel modules"

```

If missing, load them manually with `modprobe hidraw` and `modprobe uinput`, or add them to your system's module loader configuration.

### systemd and udev Integration

OpenLogi relies on **systemd** and **udev** for service management and dynamic device permissions. The agent runs as a per-user systemd service, requiring an active user session to maintain the local socket communication between the GUI, CLI, and agent processes.

The udev rules utilize `TAG+="uaccess"`, which depends on **systemd-logind** to grant temporary device access to the active seat user. On non-systemd systems, you must switch to fallback permission rules (see the device permissions section below).

### Device Permissions: 70-openlogi.rules

You must install the provided udev rules file located at `packaging/linux/udev/70-openlogi.rules` to grant read/write access to `/dev/hidraw*`, `/dev/input/event*`, and `/dev/uinput` without requiring manual group membership:

```bash
sudo cp packaging/linux/udev/70-openlogi.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

```

On systems without systemd-logind, edit the rules file to use the fallback permissions (`MODE="0660", GROUP="input"`) and add your user to the `input` group, as the `uaccess` tag only functions with logind present.

### Binary Compatibility

Pre-built OpenLogi packages require **GLIBC ≥ 2.35**, matching the Ubuntu 22.04 baseline. Systems with older glibc versions must build from source using the Rust toolchain as described in [`docs/DEVELOPMENT.md`](https://github.com/AprilNEA/OpenLogi/blob/main/docs/DEVELOPMENT.md).

### Conflicting Software

The agent, implemented in [`crates/openlogi-agent/src/main.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-agent/src/main.rs), requires exclusive HID++ device access. You must quit any other Logitech device managers such as **Solaar** before starting OpenLogi to prevent access conflicts that would prevent device enumeration.

## macOS Requirements

Running OpenLogi on macOS requires **macOS 13 or later** and **Xcode 26+** for the Metal toolchain and GUI bundle compilation. The Hook implementation for input synthesis relies on macOS-specific APIs available in these versions. Refer to [`docs/README.macos.md`](https://github.com/AprilNEA/OpenLogi/blob/main/docs/README.macos.md) for platform-specific build instructions.

## Windows Requirements

**Windows 10 or later** supports OpenLogi using the Win32 `SendInput` API for event synthesis. Unlike Linux, Windows requires no additional kernel modules, but the same rule applies: quit other Logitech managers (like Logitech Options+) before launching OpenLogi to prevent device contention. Details are available in [`docs/README.windows.md`](https://github.com/AprilNEA/OpenLogi/blob/main/docs/README.windows.md).

## Verification Steps

After installing prerequisites, verify your setup before launching the GUI:

```bash

# 1. Check kernel modules

lsmod | grep -E 'hidraw|uinput'

# 2. Verify uinput access

openlogi-agent --check-uinput 2>/dev/null || test -w /dev/uinput && echo "uinput accessible"

# 3. Inspect device permissions

ls -l /dev/hidraw*
getfacl /dev/input/event*

# 4. Start the agent as user service

systemctl --user enable --now openlogi-agent.service

# 5. Launch the GUI

openlogi-desktop

```

## Summary

- **Linux systems** require the `hidraw` and `uinput` kernel modules, systemd with logind, and the `70-openlogi.rules` udev file installed in `/etc/udev/rules.d/` to grant device access without root privileges.
- **Conflict prevention** mandates quitting Solaar or other Logitech managers before starting OpenLogi to ensure exclusive HID++ device access.
- **Binary compatibility** for pre-built releases requires GLIBC 2.35+ on Linux; older systems need source compilation via the Rust toolchain.
- **macOS 13+** with Xcode 26+ and **Windows 10+** support OpenLogi with platform-specific implementations of the input hook and GUI components.

## Frequently Asked Questions

### Can I run OpenLogi on Linux without systemd?

Yes, but you must modify the udev rules. The default `70-openlogi.rules` uses `TAG+="uaccess"` which requires systemd-logind. On non-systemd systems, switch to the fallback rules that specify `MODE="0660", GROUP="input"` and add your user to the `input` group to gain necessary device permissions.

### Why do I need to quit Solaar before running OpenLogi?

Both OpenLogi and Solaar attempt to claim exclusive access to HID++ devices for configuration and monitoring. Running both simultaneously causes conflicts where neither application can reliably communicate with your Logitech hardware, leading to dropped commands or failed device detection as implemented in [`crates/openlogi-agent/src/main.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-agent/src/main.rs).

### What is the minimum GLIBC version for pre-built OpenLogi packages?

Pre-built packages require **GLIBC 2.35 or later**, equivalent to the Ubuntu 22.04 baseline. If your distribution ships an older glibc version, you must build OpenLogi from source using the Rust toolchain as documented in [`docs/DEVELOPMENT.md`](https://github.com/AprilNEA/OpenLogi/blob/main/docs/DEVELOPMENT.md).

### Do I need to add my user to the input group to run OpenLogi?

Not if you use systemd-logind. Once the `70-openlogi.rules` udev file is installed and triggered, your user gains automatic read/write access to the required device nodes (`/dev/hidraw*`, `/dev/uinput`) without requiring membership in the `input` group, provided systemd-logind is active. Only non-systemd systems require the `input` group workaround.