| Without % = symbols | With % = symbols | With % = symbols (but incompatible with the non-universal version) |
|---|---|---|
| Model/Layout = ux433fa | Model/Layout = m433ia | Model/Layout = ux581l |
![]() |
![]() |
![]() |
This is a python service which enables switching between numpad and touchpad for the Asus UX433. It may work for other models. When running the script, use as an argument one of the strings ux433fa or m433ia or ux581l to select the layout that fits your touchpad. You can inspect the different layouts here.
This python driver has been tested and works fine for these asus versions at the moment:
- D413IA (with % and = symbols)
- E210MA (with % and = symbols)
- M433IA (with % and = symbols)
- R424DA (without extra symbols)
- ROG Strix G15 2021
- S413DA (with % and = symbols)
- TM420 (with % and = symbols)
- UM425I (with % and = symbols)
- UM425IA (with % and = symbols)
- UM425UA (with % and = symbols)
- UM431DA (without extra symbols)
- UM433DA (with % and = symbols)
- UX425EA (with % and = symbols)
- UX425E (with % and = symbols)
- UX425JA (with % and = symbols)
- UX434FA (with % and = symbols)
- UX463FL (with % and = symbols)
- UX463FA (with % and = symbols)
- UM462DA (without extra symbols)
- UX433 (without extra symbols)
- UX431F (without extra symbols)
- UX393 (with % and = symbols)
- UX371E (With % and = symbols)
- UX362-FA (without extra symbols)
- UX363EA (with % and = symbols)
- UX363JA (with % and = symbols)
- UX333FA (without extra symbols)
- UX3402ZA (with % and = symbols)
- UX325EA (with % and = symbols)
- UM325UA (with % and = symbols)
- X412DA (without extra symbols)
- UX581L (with % and = symbols)
- Zephyrus S GX701 (with % and = symbols)
- UX3405CA (with % and = symbols)
- UM5302L / Zenbook S 13 OLED (with % and = symbols, top-left is a "share" icon, see below)
Install required packages
- Debian / Ubuntu / Linux Mint / Pop!_OS / Zorin OS:
sudo apt install libevdev2 python3-libevdev i2c-tools git
- Arch Linux / Manjaro:
sudo pacman -S libevdev python-libevdev i2c-tools git
- Fedora:
sudo dnf install libevdev python-libevdev i2c-tools git
- NixOS:
Add these to your /etc/nixos/configuration.nix:
# i2c for https://github.com/mohamed-badaoui/asus-touchpad-numpad-driver
hardware.i2c.enable = true;
systemd.services.asus-touchpad-numpad = {
description = "Activate Numpad inside the touchpad with top right corner switch";
documentation = ["https://github.com/mohamed-badaoui/asus-touchpad-numpad-driver"];
path = [ pkgs.i2c-tools ];
script = ''
cd ${pkgs.fetchFromGitHub {
owner = "mohamed-badaoui";
repo = "asus-touchpad-numpad-driver";
# These needs to be updated from time to time
rev = "d80980af6ef776ee6acf42c193689f207caa7968";
sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
}}
# In the last argument here you choose your layout.
${pkgs.python3.withPackages(ps: [ ps.libevdev ])}/bin/python asus_touchpad.py ux433fa
'';
# Probably needed because it fails on boot seemingly because the driver
# is not ready yet. Alternativly, you can use `sleep 3` or similar in the
# `script`.
serviceConfig = {
RestartSec = "1s";
Restart = "on-failure";
};
wantedBy = [ "multi-user.target" ];
};Then enable i2c
sudo modprobe i2c-dev
sudo i2cdetect -l
Now you can get the latest ASUS Touchpad Numpad Driver for Linux from Git and install it using the following commands.
git clone https://github.com/mohamed-badaoui/asus-touchpad-numpad-driver
cd asus-touchpad-numpad-driver
sudo ./install.sh
To turn on/off numpad, tap top right corner touchpad area. To adjust numpad brightness, tap top left corner touchpad area.
Top-left corner action (e.g. the "share" icon on the UM5302L)
Outside numpad mode, tapping the top-left corner launches the calculator by default.
On models like the UM5302L this corner is a "share" icon instead, so you can override
the action with the ASUS_TOUCHPAD_TOPLEFT_CMD environment variable, set to any shell
command:
ASUS_TOUCHPAD_TOPLEFT_CMD="flameshot gui" LOG=DEBUG sudo -E ./asus_touchpad.py um5302l
install.sh will prompt for this command and store it in the generated systemd unit
(/etc/systemd/system/asus_touchpad_numpad.service) as Environment=ASUS_TOUCHPAD_TOPLEFT_CMD=....
Leave the prompt blank to keep the calculator behavior. You can change it later by
editing that line and running sudo systemctl daemon-reload && sudo systemctl restart asus_touchpad_numpad.
Numpad decimal key sends locale separator by default
KEY_KPDOT (the numpad decimal key) sends whatever your keyboard layout maps as the
decimal separator - a comma on German layouts, for example. Set
ASUS_TOUCHPAD_DECIMAL_KEY=period to always send the regular . key instead:
ASUS_TOUCHPAD_DECIMAL_KEY=period LOG=DEBUG sudo -E ./asus_touchpad.py um5302l
install.sh will also ask about this and set it in the systemd unit.
To uninstall, just run:
sudo ./uninstall.sh
Troubleshooting
To activate logger, do in a console:
LOG=DEBUG sudo -E ./asus_touchpad.py
For some operating systems with boot failure (Pop!OS, Mint, ElementaryOS, SolusOS), before installing, please uncomment in the asus_touchpad.service file, this following property and adjust its value:
# ExecStartPre=/bin/sleep 2
It is an adaptation made thanks to:
- solution published on reddit (https://www.reddit.com/r/linuxhardware/comments/f2vdad/a_service_handling_touchpad_numpad_switching_for/)
- many contributions on launchpad (https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1810183)
For any question, please do not hesitate to follow this tread discussion (https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1810183)
Thank you very much to all the contributors, mainly on launchpad, who made this device driver possible. (Kawaegle, David/magellan-2000, Pilot6/hanipouspilot, Julian Oertel /clunphumb, YannikSc and so many others. GG!)


