This guide permanently disables your laptopβs internal keyboard and touchpad while keeping external keyboards and mice fully functional. It uses the modern, safe method recommended by libinput and works across reboots.
Run:
sudo libinput list-devices | grep -A5 "Device:"Look for entries like:
Device: AT Translated Set 2 keyboard
Kernel: /dev/input/event3
...
Device: FocalTechPS/2 FocalTech Touchpad
Kernel: /dev/input/event4
Here,
- Internal keyboard β
/dev/input/event3 - Internal touchpad β
/dev/input/event4
Create a new file:
sudo vim /etc/udev/rules.d/99-ignore-internal-input.rulesPaste the following lines:
# Ignore internal keyboard
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="AT Translated Set 2 keyboard", ENV{LIBINPUT_IGNORE_DEVICE}="1"
# Ignore internal touchpad
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="FocalTechPS/2 FocalTech Touchpad", ENV{LIBINPUT_IGNORE_DEVICE}="1"
Save and exit (Esc β :wq β Enter).
Then reload udev:
sudo udevadm control --reload-rules
sudo udevadm triggerReboot your system:
sudo rebootsudo libinput debug-eventsYou should not see:
AT Translated Set 2 keyboard
FocalTechPS/2 FocalTech Touchpad
β only your external keyboard/mouse devices.
udevadm info -a -n /dev/input/event3 | grep LIBINPUT_IGNORE_DEVICE
udevadm info -a -n /dev/input/event4 | grep LIBINPUT_IGNORE_DEVICEExpected output:
E: LIBINPUT_IGNORE_DEVICE=1
Simply comment out or delete the rule:
sudo vim /etc/udev/rules.d/99-ignore-internal-input.rulesThen reload rules and reboot:
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo reboot- Works perfectly on Wayland (KDE, GNOME, Sway, etc.).
- Doesnβt modify kernel drivers or
/dev/inputpermissions. - 100% safe β the devices still exist but are invisible to libinput and all applications.
- Survives reboots, system upgrades, and Wayland restarts.
β Summary
| Component | Disabled? | Method | Safe? |
|---|---|---|---|
| Internal Keyboard | β | LIBINPUT_IGNORE_DEVICE udev rule |
β |
| Internal Touchpad | β | LIBINPUT_IGNORE_DEVICE udev rule |
β |
| External Keyboard & Mouse | β | Unaffected | β |
This guide permanently disables your laptopβs internal keyboard and touchpad while keeping external keyboards and mice fully functional.
It uses the modern, safe method recommended by libinput (LIBINPUT_IGNORE_DEVICE=1)
and optionally makes it conditional β automatically re-enabling when no external keyboard is plugged in.
Run:
sudo libinput list-devices | grep -A5 "Device:"Look for entries like:
Device: AT Translated Set 2 keyboard
Kernel: /dev/input/event3
...
Device: FocalTechPS/2 FocalTech Touchpad
Kernel: /dev/input/event4
Note the device names exactly as shown β weβll match by those names.
Create:
sudo vim /etc/udev/rules.d/99-ignore-internal-input.rulesPaste:
# Ignore internal keyboard
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="AT Translated Set 2 keyboard", ENV{LIBINPUT_IGNORE_DEVICE}="1"
# Ignore internal touchpad
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="FocalTechPS/2 FocalTech Touchpad", ENV{LIBINPUT_IGNORE_DEVICE}="1"
Save (Esc :wq) and reload:
sudo udevadm control --reload-rules
sudo udevadm triggersudo rebootsudo libinput debug-eventsOnly your external keyboard/mouse should appear β no βAT Translated Set 2 keyboardβ or βFocalTech Touchpadβ.
udevadm info -a -n /dev/input/event3 | grep LIBINPUT_IGNORE_DEVICE
udevadm info -a -n /dev/input/event4 | grep LIBINPUT_IGNORE_DEVICEExpected:
E: LIBINPUT_IGNORE_DEVICE=1
(auto-re-enable internal keyboard if no external one is detected)
Create a small systemd service that dynamically enables or disables the udev rule.
sudo vim /usr/local/bin/toggle-internal-keyboard.shPaste:
#!/bin/bash
RULE_FILE="/etc/udev/rules.d/99-ignore-internal-input.rules"
# Detect external keyboard
if grep -qi "Keychron" /proc/bus/input/devices || grep -qi "Logitech" /proc/bus/input/devices; then
echo "External keyboard detected β keeping internal keyboard disabled."
else
echo "No external keyboard detected β re-enabling internal keyboard."
sed -i 's/^/#/' "$RULE_FILE"
fi
# Reload udev and trigger changes
udevadm control --reload-rules
udevadm triggerMake it executable:
sudo chmod +x /usr/local/bin/toggle-internal-keyboard.shCreate the service:
sudo vim /etc/systemd/system/toggle-internal-keyboard.servicePaste:
[Unit]
Description=Toggle internal keyboard rule depending on external keyboard
After=graphical.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/toggle-internal-keyboard.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.targetEnable and run:
sudo systemctl daemon-reload
sudo systemctl enable toggle-internal-keyboard.service
sudo systemctl start toggle-internal-keyboard.serviceNow, on every boot:
- If an external keyboard (e.g., Keychron, Logitech, etc.) is detected β internal keyboard stays disabled.
- If no external keyboard is present β udev rule is commented out (re-enabling internal keyboard automatically).
Just remove the rule:
sudo rm /etc/udev/rules.d/99-ignore-internal-input.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo reboot| Component | Disabled? | Controlled By | Safe? |
|---|---|---|---|
| Internal Keyboard | β | LIBINPUT_IGNORE_DEVICE udev rule |
β |
| Touchpad | β | LIBINPUT_IGNORE_DEVICE udev rule |
β |
| External Keyboard & Mouse | β | Unaffected | β |
| Conditional Toggle | βοΈ Optional | toggle-internal-keyboard.service |
β |
π‘ This is the safest, Wayland-native way to disable your laptopβs built-in keyboard and touchpad β no kernel tweaks, no permissions hacks, and it auto-adjusts when you connect or disconnect an external keyboard.