Standalone¶
Works in any environment.
Note
A stable release of this implementation is currently not available.
CMake builds flags¶
INPUTACTIONS_SYSTEMD- enable systemd support, currently only installs the daemon service (default: ON)
Packages¶
NixOS (flakes)
{
inputs = {
inputactions-ctl = {
url = "git+https://github.com/InputActions/ctl?submodules=1";
inputs.nixpkgs.follows = "nixpkgs";
};
inputactions-standalone = {
url = "git+https://github.com/InputActions/standalone?submodules=1";
inputs.nixpkgs.follows = "nixpkgs";
};
};
}
{ inputs, pkgs, ... }:
{
environment.systemPackages = [
inputs.inputactions-ctl.packages.${pkgs.system}.default
inputs.inputactions-standalone.packages.${pkgs.system}.default
];
}
Optionally, add the official binary cache if compilation times are an issue:
{
nix.settings = {
extra-substituters = ["https://inputactions.cachix.org"];
extra-trusted-public-keys = ["inputactions.cachix.org-1:yBGhAqTOv0V08lrOTBwMAkU7V/9a0i2UPvsvCu39CjE="];
};
}
Manual¶
Dependencies¶
Arch Linux
sudo pacman -S --needed --noconfirm base-devel git extra-cmake-modules qt6-tools yaml-cpp libevdev cli11
Debian-based (KDE Neon, Kubuntu, Ubuntu)
sudo apt install git cmake g++ extra-cmake-modules qt6-tools-dev gettext libyaml-cpp-dev libxkbcommon-dev pkg-config libevdev-dev libudev-dev libinput-dev libwayland-dev systemd-dev libcli11-dev
Fedora
sudo dnf install git cmake extra-cmake-modules gcc-g++ qt6-qtbase-devel qt6-qtbase yaml-cpp yaml-cpp-devel libevdev libevdev-devel libinput-devel libudev-devel wayland-devel cli11-devel
openSUSE
sudo zypper in git cmake-full gcc-c++ kf6-extra-cmake-modules "cmake(Qt6Core)" "cmake(Qt6DBus)" "cmake(Qt6Network)" yaml-cpp-devel libevdev-devel libudev-devel libinput-devel wayland-devel libxkbcommon-devel "pkgconfig(systemd)" cli11-devel
Installation¶
Add the --standalone-no-systemd flag to not install the daemon service.
curl -o inputactions-installer.sh https://raw.githubusercontent.com/taj-ny/InputActions/refs/heads/main/install.sh
chmod +x inputactions-installer.sh
./inputactions-installer.sh --ctl --standalone --latest
Post-installation¶
Warning
If you have installed the compositor plugin, make sure to disable it. There is currently no protection against running it and the standalone version simultaneously.
Enable the daemon (
/usr/bin/inputactionsd):sudo systemctl enable --now inputactionsd
Add
/usr/bin/inputactions-clientto autostart. The client must be started after the session, by the user who owns the session, in an environment where it can use KWin’s DBus interface (Plasma only) and can connect to the Wayland server (non-GNOME environments). A running client is required in every virtual terminal InputActions will be used in.
GNOME¶
Enable the InputActions helper extension (installed automatically after starting the client).
Plasma¶
The helper script is loaded and unloaded automatically by the client.
InputActions setup¶
By default, devices are not grabbed but their events are processed. Grabbing is required for event filtering. Both properties can be configured using device rules.
device_rules:
- conditions:
all:
- any: # remove some conditions if you don't use triggers for a specific device type
- $keyboard # keyboards must be grabbed for Trigger.clear_modifiers to work
- $mouse # ungrabbed mice are currently very buggy
- $touchpad # touchpad event filtering is experimental and may cause issues
- $touchscreen
- none: # blacklist
- $name == Yubico YubiKey OTP+FIDO+CCID
grab: true
ignore: false
- conditions: $types != keyboard
ignore: true # ignore all devices other than keyboards (required to get modifiers) by default
Virtual devices¶
Two devices, named InputActions Virtual Keyboard and InputActions Virtual Mouse are created for the purpose of generating input events using the
input action. Pointer acceleration should be disabled for InputActions Virtual Mouse.
For each grabbed input device, a pair of virtual devices is created. The first one has the (InputActions internal) name suffix, is grabbed and only used
internally as a hack for injecting evdev events into libinput. The second one has the (InputActions output) suffix and is where real and simulated
events are written to.
The output device does not inherit settings from the real device, they must be copied manually.
Udev rules¶
Libinput relies on udev environment variables for some features, such as pointer acceleration. These variables are not applied to virtual devices, which can result in devices changing their behavior after starting InputActions. In that case, udev rules must be created to apply some missing variables.
Run
sudo libinput list-devicesto get the path of the input deviceDevice: Logitech G502 X Kernel: /dev/input/event15
Run
udevadm info [path](where[path]is the value ofKernel:above). Look for lines that start withE:. Known problematic variables include (but are not limited to) the following:MOUSE_DPI.E: MOUSE_DPI=800@1000 1200@1000 *1600@1000 2400@1000 3200@1000
Add the rules to
/etc/udev/rules.d/99-inputactions.rules. The rule for(InputActions internal)is optional but recommended.SUBSYSTEM=="input", ATTRS{name}=="Logitech G502 X (InputActions output)", ENV{MOUSE_DPI}="800@1000 1200@1000 *1600@1000 2400@1000 3200@1000" SUBSYSTEM=="input", ATTRS{name}=="Logitech G502 X (InputActions internal)", ENV{MOUSE_DPI}="800@1000 1200@1000 *1600@1000 2400@1000 3200@1000"
Reload rules
sudo udevadm control --reload-rules sudo udevadm trigger
Restart the daemon
sudo systemctl restart inputactionsd