Ova

How do you right click on a Raspberry Pi touch screen?

Published in Raspberry Pi Touchscreen 5 mins read

Right-clicking on a Raspberry Pi touchscreen, much like other touch-only interfaces, typically involves a software-based emulation method since there's no physical "right-click" button. The most effective way to achieve this is by configuring a long-press gesture to act as a right-click, often facilitated by a specialized utility.

Emulating a Right-Click on Raspberry Pi Touchscreens

Since touchscreens only detect touch inputs (taps), a right-click action needs to be translated from a gesture. The most common and robust solution involves using a utility that intercepts touch events and emulates a right-click based on a specific gesture, such as a long press.

The evdev-right-click-emulation Method

One highly effective way to add right-click functionality to your Raspberry Pi touchscreen is by using a specialized tool like evdev-right-click-emulation. This utility allows a long press on the screen to be registered as a right-click, providing a familiar interaction experience.

Here's how to set it up:

1. Install evdev-right-click-emulation

First, you need to obtain and install the utility. This typically involves cloning its repository from GitHub and installing it using Python's package installer, pip.

  • Open a terminal on your Raspberry Pi.
  • Install Git if you haven't already:
    sudo apt update
    sudo apt install git -y
  • Clone the repository:
    git clone https://github.com/simonthum/evdev-right-click-emulation.git
  • Navigate into the directory:
    cd evdev-right-click-emulation
  • Install the utility:
    sudo pip install .

    (Note: If pip is not installed, you might need sudo apt install python3-pip first. Use pip3 if your system defaults to Python 2 for pip).

2. Load the uinput Kernel Module

The evdev-right-click-emulation utility works by creating a virtual input device, which requires the uinput kernel module to be loaded. This module allows user-space programs to create and send input events to the kernel.

  • Load the module temporarily:
    sudo modprobe uinput
  • Make it persistent (loads on boot): To ensure uinput is always available after a reboot, add it to the modules load configuration:
    echo uinput | sudo tee -a /etc/modules-load.d/uinput.conf

3. Ensure Access to /dev/uinput and /dev/input

For the emulation software to function correctly, it needs appropriate permissions to interact with the input devices and create virtual ones. This involves having read/write access to /dev/uinput (for creating the virtual device) and read access to the actual touch input devices in /dev/input.

While running the utility with sudo often bypasses permission issues, a more secure method is to configure udev rules. These rules ensure that non-root users (like your standard Pi user) have the necessary permissions.

  • Add a udev rule for uinput: Create a new udev rule file, for example, /etc/udev/rules.d/99-uinput.rules:
    echo 'KERNEL=="uinput", MODE="0660", GROUP="input"' | sudo tee /etc/udev/rules.d/99-uinput.rules
  • Add your user to the input group:
    sudo usermod -a -G input $USER

    You will need to reboot or log out and back in for group changes to take effect.

  • For /dev/input: Standard Raspberry Pi OS configurations usually grant sufficient read access to devices in /dev/input for members of the input group.

4. Run evdev-right-click-emulation

Once the prerequisites are met, you can start the emulation utility.

  • Run it manually:

    sudo evdev-right-click-emulation

    (If you've properly configured udev rules and user groups, you might be able to run it without sudo: evdev-right-click-emulation).

    • This command will start the program, which will then listen for touch events. A long press (usually around 0.5-1 second) will now register as a right-click.
  • Autostart on boot: To make this permanent, you'll want to configure the utility to run automatically when your Raspberry Pi starts up. A common way to do this is via a systemd service:

    1. Create a service file (e.g., /etc/systemd/system/right-click.service):

      sudo nano /etc/systemd/system/right-click.service
    2. Add the following content (adjust User if you're not using pi, and ExecStart if you're not using sudo):

      [Unit]
      Description=Evdev Right-Click Emulation
      After=multi-user.target
      
      [Service]
      Type=simple
      User=pi  # Change 'pi' to your username if different, or remove if running with sudo in ExecStart
      ExecStart=/usr/local/bin/evdev-right-click-emulation --long-press-time 0.75 --tap-time 0.15
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target

      (You might need to find the exact path to evdev-right-click-emulation using which evdev-right-click-emulation).

    3. Save and close the file (Ctrl+O, Enter, Ctrl+X).

    4. Enable and start the service:

      sudo systemctl enable right-click.service
      sudo systemctl start right-click.service

      You can check its status with sudo systemctl status right-click.service.

Other Considerations

While evdev-right-click-emulation is a robust solution, some desktop environments or applications might offer built-in touch gestures:

  • Desktop Environment Gestures: Some newer desktop environments (like those using Wayland composers) or touch-optimized applications might have configurable long-press or two-finger tap gestures for right-clicking. However, for the default Raspberry Pi OS (Raspbian/Raspberry Pi Desktop, which typically uses X11), a system-level solution like evdev-right-click-emulation is generally required for widespread functionality.
  • On-Screen Keyboards: Some on-screen keyboards include a "right-click" button that can be tapped. This is application-specific and not a system-wide solution.

By implementing the evdev-right-click-emulation utility, you can achieve reliable and intuitive right-click functionality on your Raspberry Pi touchscreen, making navigation and interaction much smoother.