Record Keyboard/Mouse Input on Linux/BSD Types of Operating Systems: Let it Run?

Abstract: Use evtest to record raw keyboard and mouse input events from Linux or BSD kernel interfaces for debugging hardware faults and testing automation scripts.

Created: 2026-08-23 by

Use the evtest utility to record raw input events from Linux or BSD systems without capturing video. This tool reads directly from the kernel’s event interface, logging keystrokes and mouse movements to a file for debugging purposes. It requires no screen recording overhead and provides precise data on input device states.

Understanding Input Event Recording

When you press a key or move a mouse, the operating system translates these physical actions into digital signals. In Linux and BSD systems, this translation happens at the kernel level before any graphical application ever sees the data. Standard screen recording software captures pixels, which is inefficient if you only need to analyze the input sequence itself. Instead, we target the input subsystem directly.

The primary method for accessing this low-level data involves reading from specific device nodes in the /dev/input/ directory. These nodes represent physical devices like keyboards, mice, and touchpads. By monitoring these nodes, you can capture every event generated by your peripherals. This approach is particularly useful for diagnosing hardware faults, testing automation scripts, or analyzing user interaction patterns without the bloat of video metadata.

It is important to distinguish between recording input and recording screen activity. Tools that simulate input, such as xdotool, are designed to generate events, not log them. Similarly, network monitors like portmon track network traffic, not peripheral I/O. To get accurate input logs, you must use utilities specifically built to parse the Linux input event stream.

Installing Required Utilities

The most reliable tool for this task on modern Linux distributions is evtest. This utility is part of the evdev suite and is widely available in major package repositories. It allows users to select an input device and print all subsequent events to the standard output.

  • Debian/Ubuntu: Install the package using sudo apt install evtest.
  • Arch Linux: Use sudo pacman -S evtest.
  • Fedora: Run sudo dnf install evtest.
  • FreeBSD: The equivalent functionality is often found in sysutils/evdev or via kldload modules, though native support varies more than in Linux. On FreeBSD, you may need to load the uhid module first.

If you are running a minimal system or a specialized embedded environment, ensure that the evdev kernel modules are loaded. Without these modules, the system will not expose the necessary device nodes for evtest to read. You can verify module availability by checking the output of dmesg | grep evdev or consulting your distribution’s documentation on input subsystem configuration.

Running the Recorder Safely

Accessing input devices requires elevated privileges because these devices are typically owned by the root user or the input group. You cannot simply run evtest as a standard user and expect it to work. Refer to our guide on Run Programs with Elevated Privileges: A Comprehensive Guide to understand the security implications of using sudo versus adding your user to the input group.

  1. Open a terminal window on the target machine.
  2. Execute sudo evtest. This command lists all available input devices detected by the kernel.
  3. Select the device ID corresponding to your keyboard or mouse. Be careful not to select virtual devices like "Virtual Console" unless you intend to test console input.
  4. Once selected, evtest will begin printing events. Every key press, release, and mouse movement appears in real-time.
  5. To save this output, redirect it to a file using shell redirection: sudo evtest > input_log.txt.

This process creates a text file containing timestamped events. Each line includes the type of event (e.g., key, relative motion), the code associated with the action, and the value. For example, a key press might appear as Event: time ... KEY_A (94) Press. This format is machine-readable and easy to parse with scripts.

Interpreting the Output

The raw output from evtest can look dense, but it follows a consistent structure. Understanding this structure helps you filter noise from significant actions. The first column indicates the event type, which determines how the second and third columns should be interpreted.

  • Key Events: Type 1. Code 94 usually maps to 'A' on a QWERTY layout. Value 1 means pressed, 0 means released.
  • Relative Motion: Type 2. Used for mouse X and Y axes. Positive values move right/down, negative moves left/up.
  • Synthetic Events: Type 0. These mark the end of a frame and include timestamps. They are crucial for calculating latency between actions.

If you find the raw codes confusing, consider using evemu-record, another tool in the suite that can replay recorded events. This allows you to verify that your recording logic is sound by reproducing the exact sequence later. However, for simple logging, evtest remains the most straightforward option.

Troubleshooting Common Issues

Users often encounter permission errors or missing devices when attempting to record input. If evtest reports "No such device," ensure that the correct kernel modules are loaded. On some systems, USB devices may require a moment to initialize after boot. Restarting the service or replugging the device can resolve transient connection issues.

Another common problem is capturing too much data. Virtual devices, such as those representing touchscreen gestures or multi-touch pads, can generate thousands of events per minute. To avoid cluttering your log file, try to identify and exclude virtual input sources. Focus on physical HID (Human Interface Device) peripherals for cleaner data.

For persistent issues with device access, check the ownership of files in /dev/input/. Your user account needs read permissions on these nodes. Adding your user to the input group is a permanent fix that avoids the need for sudo every time you start a recording session. See Fixing "Permission denied» with OpenSSH: Manually adding authorized_keys for similar concepts regarding manual permission management.

Frequently Asked Questions

Can I record input on macOS using these tools?

No, evtest and the Linux input subsystem are specific to Unix-like kernels that implement the evdev interface. macOS uses a completely different driver architecture called IOHIDManager. You would need to use AppleScript or Python libraries designed for macOS accessibility APIs instead.

Does evtest capture audio input?

No, evtest exclusively handles Human Interface Devices like keyboards, mice, and game controllers. Audio input is managed by the ALSA or PulseAudio subsystems, which require different tools like arecord or parec for capture.

Is it safe to leave evtest running in the background?

Yes, it is safe, but it consumes disk space as it writes to the log file. Since it does not interact with the graphical interface, it will not slow down your computer significantly. Just ensure you have enough storage for long recording sessions.

How do I stop the recording process?

You can stop evtest by pressing Ctrl+C in the terminal where it is running. If you redirected output to a file, the file will remain intact with all data captured up to that point.

Can I replay the recorded events automatically?

While evtest only records, the companion tool evemu-record can create replayable scripts. You can then use evemu-play to inject those events back into the system, effectively automating the recorded actions.

Latest News

How to Display Output of xterm Command in Terminal Screen using Cron

Resolve the inability to display xterm output in a terminal screen from cron by redirecting logs or using wall instead of insecure X11 workarounds.

Read More
Expose Local Server on VPS Preserving Real Client IPs (OS Level)

Resolve VPS logging showing only gateway IPs by configuring reverse proxies to forward real client addresses via X-Forwarded-For headers.

Read More
How to Clear Recent Files History in Linux without Deleting Actual Files?

Clear recent files history in Linux by deleting ~/.local/share/recently-used.xbel without removing the actual files.

Read More
Best HDD Copy Strategy: Manually Syncing and Rewriting Scratch

Resolve data drift between two 4TB hard drives by using rsync with the --delete flag to manually sync and rewrite scratch data for an exact mirror.

Read More
Understanding Bash Prompt Abbreviations: An Overview

Resolve repetitive typing errors by creating and persisting Bash aliases in the .bashrc file for improved command-line efficiency.

Read More
Free Tools and Methods to Log Real-Time Performance Details in Task Manager

Log real-time CPU and memory metrics to CSV files using Windows Performance Monitor Data Collector Sets to troubleshoot system slowness.

Read More
Contact Qatar Airways Customer Service: Phone Number, Help Center, and More

Resolve urgent Qatar Airways reservation issues like flight changes and baggage claims using the US phone number +1801-855-5905 or online self-service tools.

Read More
Windows 11: Alt Codes Displaying Wrong Characters - Solutions

Resolve Windows 11 Alt codes showing wrong characters by verifying the US keyboard layout and enabling Num Lock.

Read More
Run Programs with Elevated Privileges: A Comprehensive Guide

Eliminates the need to type sudo for frequent administrative tasks by configuring .bashrc aliases or functions.

Read More
Dynamically Changing Dates in Excel Formulas Using Cells

Eliminate manual date updates in Excel by using cell references to create dynamic formulas that automatically adjust calculations when input dates change.

Read More
Granting Edit Access to a Specific Excel Sheet in an Office 365 User Email ID-Based Login

Excel Online lacks native sheet-level permissions, so users must split workbooks or use worksheet protection to isolate edit access for specific tabs.

Read More
Creating Network Load on Local Wi-Fi from One PC

Generate sustained Wi-Fi bandwidth load from a single PC using a VM SFTP server to test router stability and throughput.

Read More
Changing the Default Editor for Batch Files in Windows 11's File Explorer

Resolve the issue of batch files opening in Notepad by changing the default editor to a preferred application like VS Code.

Read More
Gain WiFi Connection Minutes Before Losing it by Changing MAC Address

Bypass MAC address filtering to restore WiFi connectivity temporarily when a device is blocked by network administrators.

Read More
Photos Folders Turned Black: Troubleshooting Picture Applications on Windows

Resolve black screens in Windows Photos by resetting the app, updating graphics drivers, and repairing system files.

Read More
Troubleshooting High CPU Temperature Values: A Step-by-Step Guide

Resolve high CPU temperatures and thermal throttling by monitoring with Speedfan, cleaning dust from cooling components, and replacing degraded thermal paste.

Read More
Make cURL establish TLS connection with CA unknown

Resolve cURL TLS connection failures with unknown or self-signed certificates by using the --insecure flag to bypass CA validation.

Read More
Troubleshooting Incorrect Network Metrics Values in Grafana, Prometheus, InfluxDB, and Telegraf

Fix incorrect network metrics in Grafana, Prometheus, InfluxDB, and Telegraf by verifying interface selection, resolving unit mismatches, and handling counter resets.

Read More
Start Another Terminal Window (cmd.exe) Windows Repair/Troubleshoot

Provides step-by-step instructions to access the Windows Command Prompt via bootable media for advanced system repair and troubleshooting.

Read More
Thinkpad P1 Gen 6: Sudden Thunderbolt 3 Dock USB-C Charging Stopped Working

Resolve sudden Thunderbolt 3 dock USB-C charging and internet failure on ThinkPad P1 Gen 6 by updating firmware, resetting the dock, and adjusting power settings.

Read More
ASUS Windows 11 Laptop: Internet Connection Issue with Hotspot

Resolve ASUS Windows 11 laptop spinning wheel issue when connecting to mobile hotspot by resetting network stack, disabling IPv6, and adjusting power settings.

Read More
Developing iOS Project with Firebase: Logging in and Sending Push Notifications

Integrates Firebase to enable secure user authentication and push notifications in iOS applications.

Read More
Troubleshooting Bash Script with Suspected Issues of Spaces, Dashes, Filenames and Quoting

Resolve Bash script failures caused by word splitting, globbing, and special characters in filenames by applying proper quoting techniques.

Read More
Populating OneDrive Folder for Local Backup without Affecting Remote Files

Prevent OneDrive from deleting remote files during Windows reinstallation by unlinking the account or using symbolic links to isolate local data.

Read More
Force First Frame as Keyframe Without Re-encoding: A Quick Solution

Resolve inaccurate seeking and playback glitches by re-encoding video to ensure the first frame is a valid keyframe.

Read More
Find Information in Database Using WSL (Ubuntu) on Windows-10

Resolve database connection issues from WSL Ubuntu on Windows 10 by configuring client tools and network access to query remote or local servers.

Read More
Configuring a New Router with Different Networks: One Family, One Guest

Resolve IP conflicts and isolate guest traffic by configuring a second router with a distinct subnet via its WAN port.

Read More
Quickly Open Multiple Stock Websites with a Single Command

Solve the problem of manually opening multiple stock research websites by creating a single command to launch them simultaneously on Windows, macOS, or Linux.

Read More
Improved Adobe Acrobat Search Experience: Access Advanced Search with Ease

Access advanced search filters like case sensitivity and regex in Adobe Acrobat by clicking More Options in the Find bar.

Read More
Port Forwarding VM via OpenVPN: A Comprehensive Guide

Configure OpenVPN server and iptables to forward specific ports from VPN clients to a virtual machine's internal IP address.

Read More
Understanding Partitions in the 1980s: A Look Back at MS-DOS and Master Boot Record

Explains how the Master Boot Record and partition table enabled MS-DOS to manage multiple disk volumes on a single physical drive.

Read More
Windows 10 Enterprise: Keyboard Not Detected in Managed Organization with Admin Privileges

Resolve Windows 10 Enterprise keyboard detection failures caused by Group Policy restrictions, driver corruption, or USB enumeration errors.

Read More
Can't Find x86_64 Versions of Applications on MacOS arm64 (M1)

Resolve missing x86_64 app issues on M1 Macs by installing Rosetta 2 and reinstalling apps as universal binaries.

Read More
How to Hide Installation Source for an Android App

Manage Android app installation source visibility by using USB transfers or file managers to reduce browser traces and isolate data via work profiles.

Read More
Connecting Momentus 4200.2 ST9808210A Hard Drive via USB Cable

Resolve inability to access Seagate Momentus 4200.2 ST9808210A hard drive by connecting it via USB using a compatible SATA-to-USB adapter and configuring the disk in Windows.

Read More